关于定时器,中途要修改定时时间,怎么让它生效
现在有2个问题:
1 怎么动态修改修改定时时长
2 修改定时时长,怎么让定时器立即重新开始计数?
那位大侠能回复一下,不胜感谢。
除以下代码:
定时器中途修改:
tmr_counter_enable(TMR1, FALSE);
tmr_counter_value_set(TMR1,300); ==>这里修改好像不起作用。
tmr_counter_enable(TMR1, TRUE);
定时器1,配置初始化
/* enable tmr1 clock */
crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
/* enable tmr2 clock */
crm_periph_clock_enable(CRM_TMR2_PERIPH_CLOCK, TRUE);
/* tmr1 configuration */
/* 1秒计时1000000,定时最小 1us*/
tmr_base_init(TMR1, BitTime-1, (ahb_freg_get() /1000000) - 1);
tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);
/* overflow interrupt enable */
tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE);
nvic_irq_enable(TMR1_OVF_TMR10_IRQn, 0, 0);
tmr_counter_enable(TMR1, FALSE);
在定时器溢出中断函数里修改。 仔细看了源码,原来想法有问题,正确应该这样
tmr_counter_enable(TMR2, FALSE);
tmr_period_value_set(TMR2,BitTime*2); ==》这个函数修改定时周期
//tmr_counter_value_set(TMR2,BitTime-1); ==》这个函数,只改当次计数值
tmr_counter_enable(TMR2, TRUE);
tmr_event_sw_trigger(TMR2,TMR_OVERFLOW_SWTRIG);==》立即进入定时器更新中断,不用定时等待
页:
[1]