LPC1768 and LPC11U24 watchdog timer
Dependents: GSwifi_tsutenkaku barometer-m0 BMAGThrRev
WDT.cpp
- Committer:
- okini3939
- Date:
- 2012-08-04
- Revision:
- 1:f7baa89f84bc
- Parent:
- 0:f28de891b0d3
- Child:
- 2:f6f05e2eafd0
File content as of revision 1:f7baa89f84bc:
#include "mbed.h" #include "WDT.h" // Simon's Watchdog code from // http://mbed.org/forum/mbed/topic/508/ void Watchdog::init(float s) { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDCLKSEL = 0x01; // Set CLK src to PCLK uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 LPC_WDT->WDTC = s * (float)clk; LPC_WDT->WDMOD = 0x03; // Enabled and Reset #elif defined(TARGET_LPC11U24) LPC_WWDT->CLKSEL = 0x01; // Set CLK src to PCLK uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 LPC_WWDT->TC = s * (float)clk; LPC_WWDT->MOD = 0x03; // Enabled and Reset #endif kick(); } // "kick" or "feed" the dog - reset the watchdog timer // by writing this required bit pattern void Watchdog::kick() { __disable_irq(); #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDFEED = 0xAA; LPC_WDT->WDFEED = 0x55; #elif defined(TARGET_LPC11U24) LPC_WWDT->FEED = 0xAA; LPC_WWDT->FEED = 0x55; #endif __enable_irq(); } int Watchdog::getFlg () { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) return LPC_WDT->WDMOD & (1<<2) ? 1 : 0; #elif defined(TARGET_LPC11U24) return LPC_WWDT->MOD & (1<<2) ? 1 : 0; #endif }