要启用TIMER,需要在ecbm_core.h中开启
详细配置在timer.h中设置
如果使能了定时器中断,则中断函数调用回调函数,用户在回调函数中编写逻辑。TIMER0的回调函数名称为 timer0_it_callback(),其它具体中断回调函数名称可查看nvic.c 。一般把timer0_it_callback()放在main.c文件中即可。
另外ECBM库使用手册V0.8中说明的定时器中断处理函数与源码不符。
TIMER库里最好用的是void timer_set_timer_mode(u8 id,u16 us) 函数。以前设定定时器中断时间需要计算定时器初始值(也可以用STC isp软件生成),现在有了timer_set_timer_mode可以直接填入定时时间,时间单位是us。
由于时钟主频不同,timer_set_timer_mode定时最大时间也有不同,库作者列了如下表格。
24M时钟主频下,如果使用timer_set_timer_mode定时50ms是不能实现的,因为表中已经列出最大定时时间是32768us=32.768ms,即使你写成timer_set_timer_mode(0,65535)也是定时32.768ms。
该函数自动根据定时时间长短设置时钟分频模式,具体可以参考源码。
使用timer_set_timer_mode时最好把定时器工作模式设置成16位自动重载模式,因为16位不自动重载模式下要在回调函数中再次使用timer_set_timer_mode定时,该函数执行时需要一定时间,如果定时是微秒级,则对定时会有较大影响。
11.0592M主频定时50ms的main.c代码
#include "ecbm_core.h" //加载库函数的头文件。
void main(void){ //main函数,必须的。
system_init(); //系统初始化函数,也是必须的。
gpio_mode(D21,GPIO_OUT);
timer_init();//先初始化定时器。
timer_set_timer_mode(0,50000);
timer_start(0);//再打开定时器0。
while(1){
delay_ms(500);
}
}
void timer0_it_callback(){//这是定时器0的中断处理函数。
gpio_toggle(D21);//当定时器0中断时,取反LED的亮灭状态。
}