我有一个使用大量外设的应用程序、其中包括一个定期调用处理程序的计时器。 如果没有看门狗复位、则一切都按预期运行。
如果我注释掉馈入看门狗的代码、其余代码会在预期的延迟之后发生、但 MSP430似乎并不是真正执行计时器外设的"完全"复位。 看门狗复位后 、TA0_TA0CCTL0包含0x01值。 这表明定时器中断(TAIE)标志已经像应该那样被正确清除、但是中断标志(TAIFG)被置位、这表示一个挂起的中断!
我该怎么做才能清除看门狗复位前可能已经挂起/有效的所有中断、以便在应用程序初始化之前无法执行我的中断处理程序?
伪代码:
void main() { //(看门狗复位后从不到达这里) //初始化应用程序数据(指针初始化、堆分配等...) //初始化看门狗 ROM_WDT_A_initWatchdogTimer (WDT_A_base、WDT_A_CLOCKSOURCE_SMCLK、WDT_A_CLOCKDIVIDER_8192K); ROM_WDT_A_START (WDT_A_BASE); //初始化其他外设,包括硬件计时器 对于(;) { //源看门狗 ROM_WDT_A_resetTimer (WDT_A_base); } } void timerInterruptHandler() { //访问应用程序数据 ,在调用该数据之前必须对其进行初始化,或应用程序崩溃}