commit

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
kaushalpkk
Date:
Thu Aug 30 13:17:29 2018 +0000
Commit message:
commit

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Aug 30 13:17:29 2018 +0000
@@ -0,0 +1,65 @@
+#include "mbed.h"
+
+// LEDs used to indicate code activity and reset source
+DigitalOut myled1(LED1); //in main loop part 1
+DigitalOut myled2(LED2); //in main loop part 2
+
+class Watchdog
+{
+public:
+// Load timeout value in watchdog timer and enable
+    void kick(float s) {
+        LPC_WDT->WDCLKSEL = 0x1;                // 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 = 0x3;                   // Enabled and Reset
+        kick();
+    }
+// "kick" or "feed" the dog - reset the watchdog timer
+// by writing this required bit pattern
+    void kick() {
+        LPC_WDT->WDFEED = 0xAA;
+        LPC_WDT->WDFEED = 0x55;
+    }
+};
+
+
+Watchdog wdt;
+
+int main()
+{
+    int count = 0;
+// On reset, indicate a watchdog reset or a pushbutton reset on LED 4 or 3
+    if ((LPC_WDT->WDMOD >> 2) & 1) {
+        printf("\n\nWDT reset\n");
+    } else {
+        printf("\n\nnice reset\n");
+    }
+
+// setup a 5 second timeout on watchdog timer hardware
+// needs to be longer than worst case main loop exection time
+    wdt.kick(5.0);
+
+    printf("going in while 1\n");
+// Main program loop - resets watchdog once each loop iteration
+// Would typically have a lot of code in loop with many calls
+    while (1) {
+        myled1 = 1; //Flash LEDs 1 & 2 to indicate normal loop activity
+        wait(.5);
+        myled1 = 0;
+        myled2 = 1;
+        wait(.5);
+        // Simulate a fault lock up with an infinite while loop, but only after 10 loop iterations
+        if (count == 10) {
+            printf("software stuck\n");
+            while (1) {
+            }
+        };
+
+// LED 2 will stay on during the fault
+        myled2 = 0;
+        count ++;
+// End of main loop so "kick" to reset watchdog timer and avoid a reset
+        wdt.kick();
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Aug 30 13:17:29 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a7c7b631e539
\ No newline at end of file