• 沒有找到結果。

【例 4.3】

在文檔中 嵌入式微處理器 (頁 181-184)

使用計時器 5 作為 PWM 輸出,計時器 4 作為比較擷取輸入,獲得 PWM 的輸出週期。

參考代碼:

#include "SPCE3200_Constant.h"

#include "SPCE3200_Register.h"

//---主函數 ---//

int main(void) {

*P_INT_MASK_CTRL1 = ~C_INT_TIMER_DIS; // 打開 TIMER 中斷 *P_CLK_32K_CONF = C_32K_CRY_EN; // 打開 32K 晶振 *P_TIMER_CLK_SEL = C_TIMER4_CLK_32K

| C_TIMER5_CLK_32K; // 選擇 TIMER4、TIMER5 時鐘源 *P_TIMER_INTERFACE_SEL = C_TIMER4_PORT_SEL

| C_TIMER5_PORT_SEL;

*P_TIMER5_CLK_CONF = 0; // 重設 TIMER5 模組 *P_TIMER5_CLK_CONF = C_TIMER_CLK_EN

| C_TIMER_RST_DIS; // 使能 TIMER5 模組 *P_TIMER5_PRELOAD_DATA = 0xF200; // 設置計數初值

*P_TIMER5_CCP_DATA = 0xF700; // 設置 CCP 初值

*P_TIMER5_CCP_CTRL = C_TIMER_PWM_MODE; // 選擇 TIMER5 工作在 PWM 模式 *P_TIMER5_MODE_CTRL = C_TIMER_CTRL_EN // 使能 TIMER5

| C_TIMER_INT_EN | C_TIMER_INT_FLAG;

*P_TIMER4_CLK_CONF = 0; // 重設 TIMER4 模組 *P_TIMER4_CLK_CONF = C_TIMER_CLK_EN

| C_TIMER_RST_DIS; // 使能 TIMER4 模組

*P_TIMER4_CCP_CTRL = C_TIMER_CAP_MODE // 選擇 TIMER4 工作在擷取模式

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 181 V1.1 - Agu 29, 2007

| C_TIMER_CAP_FALL;

*P_TIMER4_MODE_CTRL = C_TIMER_CTRL_EN // 使能 TIMER4 | C_TIMER_INT_EN | C_TIMER_INT_FLAG;

while(1);

return 0;

}

//---中斷服務函數 ---//

IRQ56(void) {

unsigned int t;

unsigned int h;

if(*P_TIMER5_MODE_CTRL & C_TIMER_INT_FLAG) {

*P_TIMER5_MODE_CTRL |= C_TIMER_INT_FLAG;

}

if(*P_TIMER4_MODE_CTRL & C_TIMER_INT_FLAG) {

*P_TIMER4_MODE_CTRL |= C_TIMER_INT_FLAG;

t = *P_TIMER4_COUNT_DATA;

h = *P_TIMER4_CCP_DATA; // 獲得 PWM 週期 }

}

4. PWM 輸出模式

Timer0~5 作 PWM 輸出的結構如圖 4-13所示:其核心是一個 16 位計數器與 PWM 控制邏輯。

透過 P_TIMER0_PRELOAD_DATA 與 P_TIMER0_CCP_DATA 暫存器決定 TIMER0 模組的 PWM 信號的週期和脈寬,PWM 信號透過 CCP IO 輸出。具體對應晶片上管腳參考表 4-4。

32768Hz

16位計數器 計數初值

PWM控制邏輯 CCP寄存器單元 27MHz/(M+1)

CCP IO

控制邏輯

圖 4-13 Timer0~5 PWM 輸出結構圖

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 182 V1.1 - Agu 29, 2007

Timer0~5 PWM 輸出的時序如圖 4-14所示:

計數時鐘

功能選擇 000 CCP_MODE = 0xC0000000

計數值 2B5C2B5D 55E355E4 FFFEFFFF80008001 80028003 BFFF C000 C001 C002 C003

PRELOAD(R) 8000

CCP_REG(R) C000

2B5C

55E3

Timer _CCP0

PRELOAD(W) 8000

CCP_REG(W) C000

2B5C

55E3

圖 4-14 Timer0~5 PWM 輸入時序圖

向 P_TIMER0_CCP_CTRL 暫存器的 b31:b30 寫入 11,選擇計時器工作在 PWM 輸出模式 下,使能計時器,計數器載入 P_TIMER0_PRELOAD_DATA 與 P_TIMER0_CCP_DATA 的 值,並開始計數。當計數值 P_TIMER0_COUNT_DATA 與 P_TIMER0_CCP_DATA 的值匹 配時置位 PWM 輸出埠,當計數器溢出時(達到 65536)清除 PWM 輸出埠,周而復始。當 計數器溢出時,可以重新載入計數初值與 CCP 初值。若計時器的計數時鐘頻率為 f,

P_TIMER0_PRELOAD_DATA 和 P_TIMER0_CCP_DATA 預置的值分別為 PRELOAD 和 CCP_REG,則輸出 PWM 信號的週期和占空比由圖 4-15公式計算:

Non-Return-One(NRO)

Non-Return-Zero(NRZ)

T =f * (65536 – PRELOAD) T0 =f * (CCP_REG – PRELOAD)

圖 4-15 PWM 輸出信號計算方法

透過設置暫存器 P_TIMER0_CCP_CTRL 的 b25 位選擇 NRO 模式或 NRZ 模式,當 b25 為 0 時選擇 NRO 模式;當 b25 為 1 時選擇 NRZ 模式。

應用 Timer0~5 的 PWM 輸出功能,需要以下操作:配置計時器模組、選擇計時器時鐘源、設

置計時器計數初值及 CCP 初值、使能 I/O 作為 CCP 埠使用、選擇計時器工作方式為 PWM

輸出方式、使能計時器及中斷。其操作流程如下:

嵌入式微處理器 SPCE3200 原理及應用

© Sunplus Technology Co., Ltd. PAGE 183 V1.1 - Agu 29, 2007

使能/配置計時器模組

(P_TIMER0_CLK_CONF)

使能32768Hz即時時鐘(P_CLK_32K_CONF)

選擇計時器時鐘源(P_TIMER_CLK_SEL)

設置計時器計數初值/CCP初值

(P_TIMER0_PRELOAD_DATA /P_TIMER0_CCP_DATA)

選擇計時器工作方式

(P_TIMER0_CCP_CTRL)

使能計時器、計時器中斷(清)

(P_TIMER0__CTRL)

使能I/O埠為CCP埠

(P_TIMER_INTERFACE_SEL)

圖 4-16 Timer0~5 PWM 輸出初始化流程圖

在文檔中 嵌入式微處理器 (頁 181-184)