通过查阅数据手册了解到窗口看门狗的功能是如果软件在窗口时间内喂狗失败则复位处理器。相关特性如下:
配置如下:
Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_WDTOSC_PD);
wdtFreq = Chip_Clock_GetWDTOSCRate() / 4;
Chip_WWDT_Init(LPC_WWDT);
Chip_WWDT_SetTimeOut(LPC_WWDT, wdtFreq * 2);
Chip_WWDT_SetWarning(LPC_WWDT, 512);
Chip_WWDT_SetWindow(LPC_WWDT, wdtFreq * 3);
Chip_WWDT_SetOption(LPC_WWDT, WWDT_WDMOD_WDRESET);
Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDTOF | WWDT_WDMOD_WDINT);
Chip_SYSCTL_SetWakeup(~(SYSCTL_SLPWAKE_IRCOUT_PD | SYSCTL_SLPWAKE_IRC_PD |SYSCTL_SLPWAKE_FLASH_PD | SYSCTL_SLPWAKE_SYSOSC_PD | SYSCTL_SLPWAKE_SYSPLL_PD | SYSCTL_SLPWAKE_WDTOSC_PD));
Chip_SYSCTL_EnableERP0PeriphWakeup(SYSCTL_ERP0_WAKEUP_WDTINT);
NVIC_ClearPendingIRQ(WWDT_IRQn);
NVIC_EnableIRQ(WWDT_IRQn);
Chip_WWDT_Start(LPC_WWDT);
主要进行了时钟,窗口时间设置,开启中断等配置。
中断子程序:
void WDT_IRQHandler(void)
{
uint32_t wdtStatus = Chip_WWDT_GetStatus(LPC_WWDT); Board_LED_Toggle(0);
if (wdtStatus & WWDT_WDMOD_WDTOF) {
Chip_WWDT_UnsetOption(LPC_WWDT, WWDT_WDMOD_WDEN);
Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDTOF);
Chip_WWDT_Start(LPC_WWDT);
}
if (wdtStatus & WWDT_WDMOD_WDINT) {
Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDINT);
Chip_WWDT_Feed(LPC_WWDT);
}
}
在编写喂狗程序时将喂狗时间设置在之前配置的窗口时间之外,可以在keil调试窗口观察到板子出现复位的现象。通过配置也可以实现在告警时进入中断进行告警喂狗操作,以免复位。
|