1、配置分支数据监测终端 Timer2
首先需要知道当前程序有哪些定时器的是闲置可以应用的:
drv_timer.c文件中,有定义好的五个定时器相关的配置,我们将系统debug,然后分别在每个定时器的回调函数上打断点测试,即可知道闲置的定时器。其中,回调函数指向的就是定时器溢出中断处理函数。
可以根据占用的定时器学习如何配置,目前分支数据监测终端的Timer1用于系统时钟(1s进一次中断)、Timer3用于系统超级电容充电和红外、Timer4(用于系统滴答)。
我们仿照Timer1配置闲置的定时器Timer2,在debug的时候将断点打在Timer1的回调函数上,如图
进入断点后点击步入,就进入了Timer1的定时器中断处理函数void tpos_soft_rtc(void)
查找tpos_soft_rtc函数,发现在drv_tmr1_open函数中被调用。
void drv_tmr1_open(void)
{
_drv_adc_trig_tmr.trig_value= 32767;
_drv_adc_trig_tmr.tmr_isr_callback=tpos_soft_rtc;
drv_tmr_config(&_drv_adc_trig_tmr);
drv_tmr_int_enable(&_drv_adc_trig_tmr);
drv_tmr_start(&_drv_adc_trig_tmr);
}
定时器的选择在_drv_adc_trig_tmr结构体力里面进行配置TMR_ID_1,上面的NULL表示回调函数,在drv_tmr1_open函数中被指向函数tpos_soft_rtc
tmr_para_t _drv_adc_trig_tmr =
{
NULL,
#ifdef __TCBUS_VERSION__
NULL,
#endif
0,
0,
0,
TMR_ID_1,
};
其中_drv_adc_trig_tmr.trig_value为定时器延时的初值,即在这里配置多少ms/us进一次中断
目前定时器2的配置参数如下
500us进一次中断 SYS_FREQ/8/1000 - 1
1ms进一次中断 SYS_FREQ/4/1000 - 1
2ms进一次中断 SYS_FREQ/2/1000 - 1
如果需要延时40ms一般在定时器中断处理函数中通过计数实现,比如配置初值为1ms进一次定时器中断,在中断函数中定义一个全局变量,使其+1,当这个变量等于40时表示 延时40s 在进行相应的处理,并将变量清零。
例如:
void tpos_soft_rtc(void)//1ms 进一次中断
{
time3count++;
if(10000 == time3count)//10s进一次
{
rs485_send_frame(1,&time3count,4,9600);
time3count=0;
}
}