Completion of http://mbed.org/users/simon/programs/WatchdogExample

Dependencies:   mbed

Committer:
IgorGZ
Date:
Sat Apr 21 14:38:29 2012 +0000
Revision:
0:f6684fa81520
WatchdogExample with power up state detect.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IgorGZ 0:f6684fa81520 1 #include "mbed.h"
IgorGZ 0:f6684fa81520 2
IgorGZ 0:f6684fa81520 3 DigitalOut led(LED1);
IgorGZ 0:f6684fa81520 4
IgorGZ 0:f6684fa81520 5 class Watchdog {
IgorGZ 0:f6684fa81520 6 public:
IgorGZ 0:f6684fa81520 7 void kick(float s) {
IgorGZ 0:f6684fa81520 8 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK
IgorGZ 0:f6684fa81520 9 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4
IgorGZ 0:f6684fa81520 10 LPC_WDT->WDTC = s * (float)clk;
IgorGZ 0:f6684fa81520 11 LPC_WDT->WDMOD = (LPC_WDT->WDMOD|0x3); // Enabled and Reset, without clear WD time-out flag.
IgorGZ 0:f6684fa81520 12 kick();
IgorGZ 0:f6684fa81520 13 }
IgorGZ 0:f6684fa81520 14
IgorGZ 0:f6684fa81520 15 void kick() {
IgorGZ 0:f6684fa81520 16 LPC_WDT->WDFEED = 0xAA;
IgorGZ 0:f6684fa81520 17 LPC_WDT->WDFEED = 0x55;
IgorGZ 0:f6684fa81520 18 }
IgorGZ 0:f6684fa81520 19
IgorGZ 0:f6684fa81520 20 /* You only can do IsWatchdogReset once... because flag must be cleared. */
IgorGZ 0:f6684fa81520 21 bool IsWatchdogReset() {
IgorGZ 0:f6684fa81520 22 if (LPC_WDT->WDMOD & 0x4) {
IgorGZ 0:f6684fa81520 23 LPC_WDT->WDMOD=(LPC_WDT->WDMOD&(~0x4)); /* Clear timeout flag. */
IgorGZ 0:f6684fa81520 24 return true;
IgorGZ 0:f6684fa81520 25 }
IgorGZ 0:f6684fa81520 26 else return false;
IgorGZ 0:f6684fa81520 27 }
IgorGZ 0:f6684fa81520 28 };
IgorGZ 0:f6684fa81520 29
IgorGZ 0:f6684fa81520 30 Watchdog w;
IgorGZ 0:f6684fa81520 31
IgorGZ 0:f6684fa81520 32 int main() {
IgorGZ 0:f6684fa81520 33 /* First activate WD */
IgorGZ 0:f6684fa81520 34 w.kick(2.5);
IgorGZ 0:f6684fa81520 35
IgorGZ 0:f6684fa81520 36 printf("Hello World!\n");
IgorGZ 0:f6684fa81520 37
IgorGZ 0:f6684fa81520 38 if (w.IsWatchdogReset())
IgorGZ 0:f6684fa81520 39 printf("MAIN: WD RESET Power up!!\r\n");
IgorGZ 0:f6684fa81520 40
IgorGZ 0:f6684fa81520 41 int hang = 0;
IgorGZ 0:f6684fa81520 42 while(1) {
IgorGZ 0:f6684fa81520 43 printf("loop...\n");
IgorGZ 0:f6684fa81520 44 wait(0.1);
IgorGZ 0:f6684fa81520 45
IgorGZ 0:f6684fa81520 46 if(hang == 10) {
IgorGZ 0:f6684fa81520 47 while(1);
IgorGZ 0:f6684fa81520 48 }
IgorGZ 0:f6684fa81520 49
IgorGZ 0:f6684fa81520 50 w.kick();
IgorGZ 0:f6684fa81520 51 hang++;
IgorGZ 0:f6684fa81520 52 }
IgorGZ 0:f6684fa81520 53 }