Timer0_On-Reg Settling条件

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
nhan.ngodinh.
离线
最后一次露面:1年5个月前
加入:2017-03-21 10:20
Timer0_On-Reg Settling条件

在Timer0_On_reg寄存器中设置新值时,我们已经看到Timer0无法立即应用设置。在某些情况下,Timer0在根据旧的Timer0_On_reg值生成某些处于计数器重新加载中断后,将设置应用。

通过在考虑结算新值之前,通过等待一些反击重新加载中断来设置解决方法。但是等待的中断的数量不确定,因为一些中断负载条件似乎不同。

是否有人可以澄清要遵循的程序是什么,以确保新的timer0_on_reg值生效?

问候,
n

设备:
mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨nhan.ngodinh,

嗨nhan.ngodinh,

在更改timer_on_reg中的值之前,您是否停止计时器计数?据我所知,如果您不这样做,那么设备将使用Rimer0_On_Reg上的先前值以及当中断命中时,它将使用加载的新值为timer_on_reg。请调用hw_timer0_disable();在更改寄存器的值之前。

谢谢mt_dialog.

nhan.ngodinh.
离线
最后一次露面:1年5个月前
加入:2017-03-21 10:20
嗨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

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨nhan.ngodinh,

嗨nhan.ngodinh,

关于Timer0,它不会根据寄存器值而生成中断,两个计数器之间的条件是计时器实现的,以便触发中断(请检查数据表)。此外,我也没有完全得到回调在10重新加载中调用回调,HW_TIMER_SET_ON_RELOAD(10)表示在所选时钟的10个周期之后将调用回调,而不是在10次之后on CORNER重新加载之后调用回调,不确定我是否正确地得到了这个。此外,它建议在禁用计时器时更改计时器的重载值,尽管我尝试了PowerInh方案以复制您正在遇到的内容。

所以我创建了一个定时器,其中t0_reload值设置为零,并且在0次转弯后的ON值时,回调已经改变了重新加载值,从中断发生并更改了上的重载值定时器中断与旧值发生两次,然后根据在计时器上重新加载的新值发生下一个中断。所以总结,我没有遇到一个在加载新值后用旧值的2个中断的情况触发,我可以假设如果发生这种情况是因为中断生成的频率,所以如果您有一个很大的中断计时器频率,即是可能的。在任何情况下,为了更改定时器的值,您应该停止计时器更改设置并开始它。

谢谢mt_dialog.