一、 簡介
本篇文章介紹在 TMPM037 EVB 實作 Timer 的操作手冊,並舉兩個範例來做演示。範例一 : 透過 Timer 控制 LED1 產生 1 秒的週期閃爍。
範例二 : Timer 產生 PWM 的輸出,佔空比 10% 於 PC3 管腳。
二、 工具準備
1. TMPM037 開發板2. Mini USB Cable
用途說明 : 提供電源輸入與程式燒錄。
三、 實作範例一 : 透過 Timer 控制 LED1 產生 1 秒的週期閃爍
1. 編譯範例程式1) 下載範例程式 :
https://toshiba.semicon-storage.com/tw/semiconductor/knowledge/application-note/ev1.html
2) 開啟範例程式 : tmpm037_v2.3.2\tx00_cmsis_v2.3.2\M037\TMPM037\Project\Examples\TMRB\TMRB_TIMER\IAR\ TMRB_TIMER.eww。
3) 進入主程式【main.c】可以看到範例程式是採用 1ms 的 Timer,然後再 TMRB0 interrupt service routine 計數 500 次,讓 LED1 產生 1 秒的週期閃爍。
4) 編譯程式,選擇【Project】,再選擇【Clean】。
5) 接著選擇【Rebuild All】。
6) 確認編譯完成。
2. 硬體連接
1) 在【TMPM037FWFG Starter kit Hardware Manual_Rev1.0.pdf】文件第 4.3 章節說,任意一個 PIN 可以連接至 PORT_LED (0 - 3)。
線路圖如下 :
2) 這裡使用 GPIO ( PC3) 與 PORT_LED1 連接。
3) 本篇文章演示是透過 USB 給 MCU 3.3V 電,開發板上自帶仿真器功能 ( CMSIS—DAP ) 。
4) Jumper 連接方式如下:
3. 燒錄與驗證
1) 選擇專案,點擊右鍵並選擇【Options】。
2) 選擇【Debugger】,將 Driver 選取為【CMSIS DAP】。
3) 點擊【Download and Debug】 圖示,進入範例程式的 Debug 頁面。
4) 點擊【Go】 圖示,讓程式運行起來,此時即可以看到開發板上的 LED1 以 1 秒週期做亮滅的閃爍。
5) 用示波器測量 PC3 pin 輸出的波形,如下圖
四、 實作範例二 : Timer 產生 PWM 的輸出,佔空比 10% 於 PC3 管腳
1. 編譯範例程式1) 開啟範例程式 : tmpm037_v2.3.2\tx00_cmsis_v2.3.2\M037\TMPM037\Project\Examples\TMRB\TMRB_PPG\IAR\ TMRB_PPG.eww。
2) 編譯程式,選擇【Project】,再選擇【Clean】。
3) 接著選擇【Rebuild All】。
4) 確認編譯完成。
2. 燒錄與驗證
1) 點擊【Download and Debug】 圖示,進入範例程式的 Debug 頁面。
2) 點擊【Go】 圖示,讓程式運行起來,此時即可以看到開發板上的 PC3 ( 與 LED1 相連接 ) ,以 10% 的佔空比做 PWM 輸出。
3) 用示波器測量 PC3 pin 輸出的波形,如下圖
五、實作範例一程式介紹
1. TMRB source clock & Timer register ( TBxRG0 與 TBxRG1 ) 設定1) 本範例使用 EVB 上外掛的 10 MHz 震盪器,經由 PLL 倍頻 ( x2 ),因此系統工作頻率為 20 MHz。
2) 本範例使用 1/8 分頻器,當系統工作頻率為 20 MHz 下,此時提供 TMRB 計數的時鐘源 (ΦT0 ) 為 2.5 MHz。
3) 當要產生 1 ms 的定時中斷,寄存器 TBxRG0 與 TBxRG1 的計算如下 :
2. main.c
底下將針對 TMRB_Enable(TSB_TB0),TMRB_Init(TSB_TB0, &m_tmrb),
TMRB_SetRunState(TSB_TB0, TMRB_RUN) 等函式內之寄存器設定說進一步的解說。
1) TMRB_Enable(TSB_TB0) :
TB0EN 寄存器 bit7(TBEN) 裡寫入“1”。
2) TMRB_Init(TSB_TB0, &m_tmrb) :
TB0MOD 寄存器的 bit3(TBCLE ) 寫入“1”, bit2-0 ( TBCLK ) 寫入“010”, TB0RG0 以及 TB0RG1 中寫入相當於 1ms 值。
TB0RG0 – 表示 m_tmrb.LeadingTiming
TB0RG1 – 表示 m_tmrb.TrailingTiming
3) TMRB_SetRunState(TSB_TB0, TMRB_RUN) :
TB0RUN 寄存器的 bit2(TBPRUN ) 和 bit0 ( TBRUN ) 寫入“1”。
3. tmpm037_tmrb_int.c
4. led.h
六、實作範例二程式介紹
1. TB0OUT 輸出腳位與 Timer register ( TBxRG0 與 TBxRG1 ) 設定1) TB0OUT 輸出腳位定義:PC3。
2) TBxRG0 與 TBxRG1 之設定:
TB0RG0 – 表示 m_tmrb.LeadingTiming ( PWM 正 duty cycle value )
TB0RG1 – 表示 m_tmrb.TrailingTiming ( 週期 )
已知 : TrailingTiming = 500 us,Ttmrb = 0.4 us
如果要設定輸出 PWM 10% duty cycle ( TB0RG0 ) :
high-level time is 500 * 10% = 50 us,low-level time is 500-50 = 450us, LeadingTiming = 450 us / Ttmrb = 0x465U
2. main.c
1) TMRB_SetFlipFlop (TSB_TB0, &PPGFFInital) :
TB0FFCR 寄存器的 bit3(TBE1T1) 寫入“1”, bit2 ( TBE0T1) 寫入“1”, Bit1-0 ( TBFF0C) 寫入“10”。
2) TMRB_SetDoubleBuf (TSB_TB0, ENABLE) :
TB0CR 寄存器的 bit7(TBWBF ) 寫入“1”。
七、參考資料
[1] TMPM037FWFG Starter kit Hardware Manual_Rev1.0.pdf[2] TOSHIBA TX00 Peripheral Driver User Guide (TMPM037)_EN.pdf
[3] TX00 Peripheral Driver Usage Example (TMPM037)_EN.pdf