如何用Timer3生成精确的定时事件?(避免RF中断的影响)
时间:10-02
整理:3721RD
点击:
如题,我使用timer3来生成定时事件,每1ms一次中断,每50次中断翻转一次io做测试。
实际测试发现io翻转毫无周期可言,怀疑是timer3中断被RF中断抢占导致的,于是将timer3所在的中断组提升到最高优先级。
这样测试发现,io已经是精确地50ms翻转一次了。
但是由于调高了定时器中断,RF中断可能被抢占,造成了另外的问题:
大概有1/50的概率,上电后cc2541的observer功能会失效(扫描不到广播包)。
这是调高优先级之前未发生过的。
请问如何同时保证射频功能的稳定,和 定时器事件的精确?
在初始化函数中,加入下面两句
HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_DISABLE_CLK_divIDE_ON_HALT );
HCI_EXT_HaltDuringRfCmd( HCI_EXT_HALT_DURING_RF_DISABLE );
你好,这两句只是让MCU在RF操作的时候不休眠(切换到低速晶振)吧?
我已经做了这个处理的,否则连PWM都会受影响。
现在的问题是T3中断被抢占,而不是T3运行时被切到低速晶振。