Ameba Arduino: [RTL8195] 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);