/** * @brief Watchdog Timer Interrupt Handler * @return Nothing * @note Handles watchdog timer warning and timeout events */ void WDT_IRQHandler(void) { uint32_t wdtStatus = Chip_WWDT_GetStatus(LPC_WWDT); #if defined(CHIP_LPC11CXX) if (wdtStatus & WWDT_WDMOD_WDTOF) { Board_LED_Toggle(0); while(Chip_WWDT_GetStatus(LPC_WWDT) & WWDT_WDMOD_WDTOF) { Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDTOF); } Chip_WWDT_Start(LPC_WWDT); /* Needs restart */ } #else Board_LED_Toggle(0); /* The chip will reset before this happens, but if the WDT doesn't have WWDT_WDMOD_WDRESET enabled, this will hit once */ if (wdtStatus & WWDT_WDMOD_WDTOF) { /* A watchdog feed didn't occur prior to window timeout */ Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDTOF); Chip_WWDT_Start(LPC_WWDT); /* Needs restart */ } /* Handle warning interrupt */ if (wdtStatus & WWDT_WDMOD_WDINT) { /* A watchdog feed didn't occur prior to warning timeout */ Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDINT); Chip_WWDT_Feed(LPC_WWDT); } #endif }
void WDTInit( void ) { uint32_t i; //uint32_t wdtFreq; /* Initialize WWDT (also enables WWDT clock) */ Chip_WWDT_Init(LPC_WWDT); /* Prior to initializing the watchdog driver, the clocking for the watchdog must be enabled. This example uses the watchdog oscillator set at a 50KHz (1Mhz / 20) clock rate. */ Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_WDTOSC_PD); Chip_Clock_SetWDTOSC(WDTLFO_OSC_1_05, 20); /* The WDT divides the input frequency into it by 4 */ //wdtFreq = Chip_Clock_GetWDTOSCRate() / 4; /* LPC1102/4, LPC11XXLV, and LPC11CXX devices select the watchdog clock source from the SYSCLK block, while LPC11AXX, LPC11EXX, and LPC11UXX devices select the clock as part of the watchdog block. */ /* Select watchdog oscillator for WDT clock source */ Chip_WWDT_SelClockSource(LPC_WWDT, WWDT_CLKSRC_WATCHDOG_WDOSC); Chip_WWDT_SetTimeOut(LPC_WWDT, 0x7FFF); Chip_WWDT_SetOption(LPC_WWDT, (WWDT_WDMOD_WDEN|WWDT_WDMOD_WDRESET)); Chip_WWDT_Feed(LPC_WWDT); /* Make sure feed sequence executed properly */ for (i = 0; i < 0x80; i++); return; }
/** * @brief SysTick Interrupt Handler * @return Nothing * @note Systick interrupt handler feeds WWDT */ void SysTick_Handler(void) { #if !defined(DISABLE_WDT_TIMEOUT) Chip_WWDT_Feed(LPC_WWDT); #endif }