S K UCI
/
an_m0interface_stall_test
simple test program to demonstrate a (random) stalling of the mbed on a call to the interface chip
Diff: Watchdog.h
- Revision:
- 0:fcbed0c42196
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Watchdog.h Wed Jan 21 05:04:32 2015 +0000 @@ -0,0 +1,52 @@ +#ifndef MB_Watchdog +#define MB_Watchdog + +#define WDFAILSAFE (1200u) + +// Adapted from Simon's Watchdog code from +// http://mbed.org/forum/mbed/topic/508/ +namespace Watchdog { + + // "kick" or "feed" the dog - reset the watchdog timer + // by writing this required bit pattern + inline + void kick() { + LPC_WDT->WDFEED = 0xAA; + LPC_WDT->WDFEED = 0x55; + } + + // Load timeout value in watchdog timer and enable + inline + void kick(const float s) { +// LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK + // WD has a fixed /4 prescaler, PCLK default is /4 +// static const float clk = static_cast<float>(SystemCoreClock / 16); + + LPC_WDT->WDCLKSEL = 0x00; // Set CLK src to Internal RC + static const float clk = static_cast<float>(1e6); // 4MHz / 4 for WD prescaler + LPC_WDT->WDTC = static_cast<uint32_t>(s * clk); + + LPC_WDT->WDMOD |= 0x3; // Enabled and Reset + kick(); + } + + inline + bool didWatchdogReset() { + return ( (LPC_WDT->WDMOD) & 0x4 ); + } + + inline + void clearResetFlag() { + LPC_WDT->WDMOD &= ~(0x4); + } + + struct SnKickStarter { + SnKickStarter(const float s) { + Watchdog::kick(s); + } + }; + +}; + + +#endif // MB_Watchdog