LPC1768 and LPC11U24 watchdog timer

Dependents:   GSwifi_tsutenkaku barometer-m0 BMAGThrRev

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?

UserRevisionLine numberNew 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 }