LPC1768 and LPC11U24 watchdog timer
Dependents: GSwifi_tsutenkaku barometer-m0 BMAGThrRev
WDT.cpp@1:f7baa89f84bc, 2012-08-04 (annotated)
- Committer:
- okini3939
- Date:
- Sat Aug 04 11:36:51 2012 +0000
- Revision:
- 1:f7baa89f84bc
- Parent:
- 0:f28de891b0d3
- Child:
- 2:f6f05e2eafd0
bugfix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 1:f7baa89f84bc | 1 | #include "mbed.h" |
okini3939 | 1:f7baa89f84bc | 2 | #include "WDT.h" |
okini3939 | 1:f7baa89f84bc | 3 | |
okini3939 | 1:f7baa89f84bc | 4 | // Simon's Watchdog code from |
okini3939 | 1:f7baa89f84bc | 5 | // http://mbed.org/forum/mbed/topic/508/ |
okini3939 | 1:f7baa89f84bc | 6 | void Watchdog::init(float s) { |
okini3939 | 1:f7baa89f84bc | 7 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
okini3939 | 1:f7baa89f84bc | 8 | LPC_WDT->WDCLKSEL = 0x01; // Set CLK src to PCLK |
okini3939 | 1:f7baa89f84bc | 9 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
okini3939 | 1:f7baa89f84bc | 10 | LPC_WDT->WDTC = s * (float)clk; |
okini3939 | 1:f7baa89f84bc | 11 | LPC_WDT->WDMOD = 0x03; // Enabled and Reset |
okini3939 | 1:f7baa89f84bc | 12 | #elif defined(TARGET_LPC11U24) |
okini3939 | 1:f7baa89f84bc | 13 | LPC_WWDT->CLKSEL = 0x01; // Set CLK src to PCLK |
okini3939 | 1:f7baa89f84bc | 14 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
okini3939 | 1:f7baa89f84bc | 15 | LPC_WWDT->TC = s * (float)clk; |
okini3939 | 1:f7baa89f84bc | 16 | LPC_WWDT->MOD = 0x03; // Enabled and Reset |
okini3939 | 1:f7baa89f84bc | 17 | #endif |
okini3939 | 1:f7baa89f84bc | 18 | kick(); |
okini3939 | 1:f7baa89f84bc | 19 | } |
okini3939 | 1:f7baa89f84bc | 20 | // "kick" or "feed" the dog - reset the watchdog timer |
okini3939 | 1:f7baa89f84bc | 21 | // by writing this required bit pattern |
okini3939 | 1:f7baa89f84bc | 22 | void Watchdog::kick() { |
okini3939 | 1:f7baa89f84bc | 23 | __disable_irq(); |
okini3939 | 1:f7baa89f84bc | 24 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
okini3939 | 1:f7baa89f84bc | 25 | LPC_WDT->WDFEED = 0xAA; |
okini3939 | 1:f7baa89f84bc | 26 | LPC_WDT->WDFEED = 0x55; |
okini3939 | 1:f7baa89f84bc | 27 | #elif defined(TARGET_LPC11U24) |
okini3939 | 1:f7baa89f84bc | 28 | LPC_WWDT->FEED = 0xAA; |
okini3939 | 1:f7baa89f84bc | 29 | LPC_WWDT->FEED = 0x55; |
okini3939 | 1:f7baa89f84bc | 30 | #endif |
okini3939 | 1:f7baa89f84bc | 31 | __enable_irq(); |
okini3939 | 1:f7baa89f84bc | 32 | } |
okini3939 | 1:f7baa89f84bc | 33 | |
okini3939 | 1:f7baa89f84bc | 34 | int Watchdog::getFlg () { |
okini3939 | 1:f7baa89f84bc | 35 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
okini3939 | 1:f7baa89f84bc | 36 | return LPC_WDT->WDMOD & (1<<2) ? 1 : 0; |
okini3939 | 1:f7baa89f84bc | 37 | #elif defined(TARGET_LPC11U24) |
okini3939 | 1:f7baa89f84bc | 38 | return LPC_WWDT->MOD & (1<<2) ? 1 : 0; |
okini3939 | 1:f7baa89f84bc | 39 | #endif |
okini3939 | 1:f7baa89f84bc | 40 | } |