A very basic example using the watchdog timer

Dependencies:   mbed

Committer:
simon
Date:
Wed Feb 17 14:32:10 2010 +0000
Revision:
0:8da3c40a4505

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:8da3c40a4505 1 #include "mbed.h"
simon 0:8da3c40a4505 2
simon 0:8da3c40a4505 3 DigitalOut led(LED1);
simon 0:8da3c40a4505 4
simon 0:8da3c40a4505 5 class Watchdog {
simon 0:8da3c40a4505 6 public:
simon 0:8da3c40a4505 7 void kick(float s) {
simon 0:8da3c40a4505 8 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK
simon 0:8da3c40a4505 9 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4
simon 0:8da3c40a4505 10 LPC_WDT->WDTC = s * (float)clk;
simon 0:8da3c40a4505 11 LPC_WDT->WDMOD = 0x3; // Enabled and Reset
simon 0:8da3c40a4505 12 kick();
simon 0:8da3c40a4505 13 }
simon 0:8da3c40a4505 14
simon 0:8da3c40a4505 15 void kick() {
simon 0:8da3c40a4505 16 LPC_WDT->WDFEED = 0xAA;
simon 0:8da3c40a4505 17 LPC_WDT->WDFEED = 0x55;
simon 0:8da3c40a4505 18 }
simon 0:8da3c40a4505 19 };
simon 0:8da3c40a4505 20
simon 0:8da3c40a4505 21 Watchdog w;
simon 0:8da3c40a4505 22
simon 0:8da3c40a4505 23 int main() {
simon 0:8da3c40a4505 24 printf("Hello World!\n");
simon 0:8da3c40a4505 25 w.kick(2.5);
simon 0:8da3c40a4505 26
simon 0:8da3c40a4505 27 int hang = 0;
simon 0:8da3c40a4505 28 while(1) {
simon 0:8da3c40a4505 29 printf("loop...\n");
simon 0:8da3c40a4505 30 wait(0.1);
simon 0:8da3c40a4505 31
simon 0:8da3c40a4505 32 if(hang == 10) {
simon 0:8da3c40a4505 33 while(1);
simon 0:8da3c40a4505 34 }
simon 0:8da3c40a4505 35
simon 0:8da3c40a4505 36 w.kick();
simon 0:8da3c40a4505 37 hang++;
simon 0:8da3c40a4505 38 }
simon 0:8da3c40a4505 39 }