主题中讨论的其他器件:DK-TM4C123G、 TM4C123
这个问题是在几年前编写的代码的代码审查期间提出的。
我们的大多数开发团队都熟悉看门狗、当看门狗挨饿时、只需重置控制器即可。 通常、寄存器中的位被置位以指示 WDOG 复位。
TM4C 控制器是我使用过的首款可用作计时器等的控制器。
我编程到的一个行为是、如果您使用 WDOG 作为 WDOG、那么当您首次启用 WDOG 外设时、最终会进入 WDOG ISR。
因此、我最终得到的代码如下所示:
bool waitingForFirstWDOG_HIT = true; void WDOG_Init (void){ ROM_SysCtlPeripheralEnable (SYSCTL_Periph_WDOG0); if (ROM_WatchdogLockState (WATCHDOG0_BASE)== true) { ROM_WatchdogUnlock (WATCHDOG0_BASE); } ROM_WatchdogStallEnable (WATCHDOG0_BASE); ROM_WatchdogIntClear (WATCHDOG0_BASE); ROM_WatchdogReloadSet (WATCHDOG0_BASE、SysCtlClockGet ()/10); ROM_IntEnable (INT_Watchdog);//这将生成立即中断、因此第一次 ISR 调用需要 IntClear ROM_WatchdogEnable (WATCHDOG0_BASE); }
静态空 Watchdog_timer_ISR (空){
if (waitingForFirstWDOG_HIT){
ROM_WatchdogIntClear (WATCHDOG0_BASE);
waitingForFirstWDOG_HIT = false;
}
否则{
numAbnormalResets++;
EEPROM_Write16 (ADDR_numAb常规 复位、numAb常规 复位);
// TODO:Watchdog_timer_ISR 写入故障
ROM_SysCtlReset();
}
}
(抱歉使用代码粘贴。 今天对我来说不起作用。)
它的工作原理。 问题是、为什么启用 WDOG 后最终会进入 WDOG? 我很确定代码来自一个示例。 我尝试避免第一个中断、但没有找到方法。