分支数据监测终端(配置定时器2)


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;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/luopeng12345/article/details/111043553