工具/软件:
大家好:
在我正在开发的应用中、我遇到了极少数情况、即 C28x CPU1处理器似乎挂起、我怀疑其在 ISR 中被捕获。
看门狗计时器配置如下:
void InitWatchdog (void)
{
//--配置看门狗
SysCtl_setWatchdogPredivider (SYSCTL_WD_PREDIV_512); // WDPRECLKDIV = INTOSC1/512
SysCtl_setWatchdogPrescaler (SysCtl_WD_PRESCALE_2); // WDCLK=OSCCLK/512/2
SysCtl_setWatchdogWindowValue (0); //最小窗口阈值(禁用)
//--设置看门狗模式(复位/中断)
SysCtl_setWatchdogMode (SYSCTL_WD_MODE_INTERRUPT); //看门狗生成中断
//--启用/禁用看门狗
SysCtl_enableWatchdog (); //启用 watchdog
SysCtl_serviceWatchdog();
//--启用看门狗中断
INTERRUPT_REGISTER (INT_WAKE、&wakeISR); // Re ISR 函数的 ISR 映射看门狗唤醒中断信号
INTERRUPT_ENABLE (INT_WAKE); //在 PIE 组1中启用 WAKEINT 并在 IER 中启用 INT1以启用 PIE 组1
} // InitWatchdog()结束
理想情况下,我希望 wakeISR ()触发并重新启动模块,因为我已经配置了它,但它没有发生,大概是因为 PIE 中断无法在另一个正在运行时执行。 相反、它们会根据优先级排队。
是否有办法将看门狗计时器配置为在其到期时触发不可屏蔽中断、以便使其能够中断任何其他 ISR、或者我是否必须启用嵌套并将 wakeISR 嵌套在所有其他中断内?
此致、
- Jakub