simple test program to demonstrate a (random) stalling of the mbed on a call to the interface chip

Dependencies:   mbed

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