Ameba Arduino: [RTL8195] [RTL8710] Timer – 使用週期性的GTimer

材料準備

  • Ameba x 1

範例說明

Ameba本身帶有硬體的Timer供使用者使用, 目前使用者可以使用5個GTimer, 解析度為microseconds, 要注意的是這些Timer可能會與其它週邊重覆使用。舉例來說, Timer ID為0的Timer與PMW_3共用, 所以當我們使用Timer ID 0的時候, D12上面的PWM_3就無法使用。

Time ID Note
0 Share with PWM_3
1 Share with PWM_0
2 Share with PWM_1
3 Share with PWM_2
4 Share with software RTC

在使用上,可以將Timer設定週期性或一次性。週期性的Timer當時間到了會重新設定,而一次性的Timer則不會。

我們打開範例, “File” -> “Examples” -> “AmebaGTimer” -> “timer_periodical”, 編譯並上傳至Ameba之後, 按下Reset按鈕。
接著會在Serial Monitor看到使用者定義counter定時被呼叫。

程式碼說明

在begin()裡面, 第1個參數是timer id, 目前有5個timer可以使用, 可以填的值為0~4。第二個參數是timer的時間, 單位是 us (microseconds), 範例裡填的是1000000us = 1s。第三個參數是當Timer的時間到了要呼叫的function,這邊的myhandler裡面將counter加1並且印出來。
GTimer.begin(0, 1 * 1000 * 1000, myhandler);
GTimer預設的行為是週期性的, 所以會看到每秒都會呼叫myhandler,結果就是每秒看到counter數量加1的log

如果想要將GTimer停下來, 就呼叫Stop, 範例裡我們在10秒後將Timer ID 0的Timer停下來
GTimer.stop(0);