Watchdog timer for the LPC4088
Watchdog.h@0:fc62d045ca0c, 2013-12-20 (annotated)
- Committer:
- loopsva
- Date:
- Fri Dec 20 19:42:32 2013 +0000
- Revision:
- 0:fc62d045ca0c
Initial cut. A Watchdog timer for the LPC4088.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loopsva | 0:fc62d045ca0c | 1 | #ifndef WATCHDOG_4088_H |
loopsva | 0:fc62d045ca0c | 2 | #define WATCHDOG_4088_H |
loopsva | 0:fc62d045ca0c | 3 | |
loopsva | 0:fc62d045ca0c | 4 | #include "mbed.h" |
loopsva | 0:fc62d045ca0c | 5 | |
loopsva | 0:fc62d045ca0c | 6 | /** Routines to set and kick the Watchdog timer for the LPC4088. |
loopsva | 0:fc62d045ca0c | 7 | * |
loopsva | 0:fc62d045ca0c | 8 | * The LPC4088 has a fixed, internal 500KHz oscillator which |
loopsva | 0:fc62d045ca0c | 9 | * is divided by 4 to give an 8uS master clock to the Watchdog countdown timer. |
loopsva | 0:fc62d045ca0c | 10 | * |
loopsva | 0:fc62d045ca0c | 11 | * User inputs a value from 1 to 134 seconds when initializing the Watchdog |
loopsva | 0:fc62d045ca0c | 12 | * timer. The user's input number is multiplied by 125k and then placed into |
loopsva | 0:fc62d045ca0c | 13 | * the countdown timer. |
loopsva | 0:fc62d045ca0c | 14 | * |
loopsva | 0:fc62d045ca0c | 15 | * The user is responsible for "kicking" the Watchdog before the timeout interval |
loopsva | 0:fc62d045ca0c | 16 | * expires, otherwise the LPC4088 will automatically reboot. |
loopsva | 0:fc62d045ca0c | 17 | * |
loopsva | 0:fc62d045ca0c | 18 | * @code |
loopsva | 0:fc62d045ca0c | 19 | * #include "mbed.h" |
loopsva | 0:fc62d045ca0c | 20 | * #include "Watchdog.h" |
loopsva | 0:fc62d045ca0c | 21 | * |
loopsva | 0:fc62d045ca0c | 22 | * Watchdog wdt; |
loopsva | 0:fc62d045ca0c | 23 | * |
loopsva | 0:fc62d045ca0c | 24 | * int main() { |
loopsva | 0:fc62d045ca0c | 25 | * initialization code.... |
loopsva | 0:fc62d045ca0c | 26 | * wdt.kick(20); //init the watchdog for a 20 second timeout |
loopsva | 0:fc62d045ca0c | 27 | * while(1) { |
loopsva | 0:fc62d045ca0c | 28 | * wait_ms(1000); //do some code |
loopsva | 0:fc62d045ca0c | 29 | * wdt.kick(); //kick the watchdog before 20 seconds is up |
loopsva | 0:fc62d045ca0c | 30 | * } |
loopsva | 0:fc62d045ca0c | 31 | * } |
loopsva | 0:fc62d045ca0c | 32 | * @endcode |
loopsva | 0:fc62d045ca0c | 33 | * |
loopsva | 0:fc62d045ca0c | 34 | */ |
loopsva | 0:fc62d045ca0c | 35 | /* Watchdog controller class |
loopsva | 0:fc62d045ca0c | 36 | */ |
loopsva | 0:fc62d045ca0c | 37 | class Watchdog { |
loopsva | 0:fc62d045ca0c | 38 | |
loopsva | 0:fc62d045ca0c | 39 | public: |
loopsva | 0:fc62d045ca0c | 40 | /** Create a Watchdog object and initialize timeout in seconds |
loopsva | 0:fc62d045ca0c | 41 | * |
loopsva | 0:fc62d045ca0c | 42 | * @param int timeout in seconds. Range (1 - 134) |
loopsva | 0:fc62d045ca0c | 43 | */ |
loopsva | 0:fc62d045ca0c | 44 | void kick(int WDTseconds); |
loopsva | 0:fc62d045ca0c | 45 | |
loopsva | 0:fc62d045ca0c | 46 | |
loopsva | 0:fc62d045ca0c | 47 | /** Keep alive by kicking the Watchdog occasionally |
loopsva | 0:fc62d045ca0c | 48 | * |
loopsva | 0:fc62d045ca0c | 49 | * @param NONE |
loopsva | 0:fc62d045ca0c | 50 | */ |
loopsva | 0:fc62d045ca0c | 51 | void kick(); |
loopsva | 0:fc62d045ca0c | 52 | |
loopsva | 0:fc62d045ca0c | 53 | private: |
loopsva | 0:fc62d045ca0c | 54 | int WDTseconds; |
loopsva | 0:fc62d045ca0c | 55 | }; |
loopsva | 0:fc62d045ca0c | 56 | |
loopsva | 0:fc62d045ca0c | 57 | #endif |