在Timer0_On_reg寄存器中设置新值时,我们已经看到Timer0无法立即应用设置。在某些情况下,Timer0在根据旧的Timer0_On_reg值生成某些处于计数器重新加载中断后,将设置应用。
通过在考虑结算新值之前,通过等待一些反击重新加载中断来设置解决方法。但是等待的中断的数量不确定,因为一些中断负载条件似乎不同。
是否有人可以澄清要遵循的程序是什么,以确保新的timer0_on_reg值生效?
问候,n
嗨nhan.ngodinh,
在更改timer_on_reg中的值之前,您是否停止计时器计数?据我所知,如果您不这样做,那么设备将使用Rimer0_On_Reg上的先前值以及当中断命中时,它将使用加载的新值为timer_on_reg。请调用hw_timer0_disable();在更改寄存器的值之前。
谢谢mt_dialog.
嗨mt_dialog,
在应用程序上下文中,我们正在处理的上下文中无法执行此操作:禁用Timer0将停止PWM,并且连接的设备将受此影响。
此外,我们测试了在线改变锁上的柜台,但实力的时间略有不可预测。通常它在大约2个上加载周期中生效。在一些罕见的情况下,我们检测到它需要3个,甚至4个周期。
以下初始化:
hw_timer0_set_clock_source(hw_timer0_clk_src_fast);hw_timer0_set_pwm_mode(hw_timer0_mode_pwm);hw_timer0_set_fast_clock_div(hw_timer0_fast_clk_div_2);hw_timer0_set_t0_reload(0,0);hw_timer0_set_on_clock_div(false);hw_timer0_enable();
然后注册了一个锁上计数器和中断:
hw_timer0_set_on_reload(10);hw_timer0_register_int(cb1);
在第一次调用时,CB1称为每10个重新加载。如果我们切换到其他重新加载计数器,CB1仍然以10重新加载间隔称为2-4个循环,然后中断间隔切换到新值。
有关如何使它更可预测的想法?
关于Timer0,它不会根据寄存器值而生成中断,两个计数器之间的条件是计时器实现的,以便触发中断(请检查数据表)。此外,我也没有完全得到回调在10重新加载中调用回调,HW_TIMER_SET_ON_RELOAD(10)表示在所选时钟的10个周期之后将调用回调,而不是在10次之后on CORNER重新加载之后调用回调,不确定我是否正确地得到了这个。此外,它建议在禁用计时器时更改计时器的重载值,尽管我尝试了PowerInh方案以复制您正在遇到的内容。
所以我创建了一个定时器,其中t0_reload值设置为零,并且在0次转弯后的ON值时,回调已经改变了重新加载值,从中断发生并更改了上的重载值定时器中断与旧值发生两次,然后根据在计时器上重新加载的新值发生下一个中断。所以总结,我没有遇到一个在加载新值后用旧值的2个中断的情况触发,我可以假设如果发生这种情况是因为中断生成的频率,所以如果您有一个很大的中断计时器频率,即是可能的。在任何情况下,为了更改定时器的值,您应该停止计时器更改设置并开始它。
嗨nhan.ngodinh,
在更改timer_on_reg中的值之前,您是否停止计时器计数?据我所知,如果您不这样做,那么设备将使用Rimer0_On_Reg上的先前值以及当中断命中时,它将使用加载的新值为timer_on_reg。请调用hw_timer0_disable();在更改寄存器的值之前。
谢谢mt_dialog.
嗨mt_dialog,
在应用程序上下文中,我们正在处理的上下文中无法执行此操作:禁用Timer0将停止PWM,并且连接的设备将受此影响。
此外,我们测试了在线改变锁上的柜台,但实力的时间略有不可预测。通常它在大约2个上加载周期中生效。在一些罕见的情况下,我们检测到它需要3个,甚至4个周期。
以下初始化:
hw_timer0_set_clock_source(hw_timer0_clk_src_fast);
hw_timer0_set_pwm_mode(hw_timer0_mode_pwm);
hw_timer0_set_fast_clock_div(hw_timer0_fast_clk_div_2);
hw_timer0_set_t0_reload(0,0);
hw_timer0_set_on_clock_div(false);
hw_timer0_enable();
然后注册了一个锁上计数器和中断:
hw_timer0_set_on_reload(10);
hw_timer0_register_int(cb1);
在第一次调用时,CB1称为每10个重新加载。如果我们切换到其他重新加载计数器,CB1仍然以10重新加载间隔称为2-4个循环,然后中断间隔切换到新值。
有关如何使它更可预测的想法?
问候,
n
嗨nhan.ngodinh,
关于Timer0,它不会根据寄存器值而生成中断,两个计数器之间的条件是计时器实现的,以便触发中断(请检查数据表)。此外,我也没有完全得到回调在10重新加载中调用回调,HW_TIMER_SET_ON_RELOAD(10)表示在所选时钟的10个周期之后将调用回调,而不是在10次之后on CORNER重新加载之后调用回调,不确定我是否正确地得到了这个。此外,它建议在禁用计时器时更改计时器的重载值,尽管我尝试了PowerInh方案以复制您正在遇到的内容。
所以我创建了一个定时器,其中t0_reload值设置为零,并且在0次转弯后的ON值时,回调已经改变了重新加载值,从中断发生并更改了上的重载值定时器中断与旧值发生两次,然后根据在计时器上重新加载的新值发生下一个中断。所以总结,我没有遇到一个在加载新值后用旧值的2个中断的情况触发,我可以假设如果发生这种情况是因为中断生成的频率,所以如果您有一个很大的中断计时器频率,即是可能的。在任何情况下,为了更改定时器的值,您应该停止计时器更改设置并开始它。
谢谢mt_dialog.