LPC1768 and LPC11U24 watchdog timer

Dependents:   GSwifi_tsutenkaku barometer-m0 BMAGThrRev

WDT.cpp

Committer:
okini3939
Date:
2012-08-04
Revision:
1:f7baa89f84bc
Parent:
0:f28de891b0d3
Child:
2:f6f05e2eafd0

File content as of revision 1:f7baa89f84bc:

#include "mbed.h"
#include "WDT.h"

// Simon's Watchdog code from
// http://mbed.org/forum/mbed/topic/508/
void Watchdog::init(float s) {
#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
    LPC_WDT->WDCLKSEL = 0x01;               // 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 = 0x03;                   // Enabled and Reset
#elif defined(TARGET_LPC11U24)
    LPC_WWDT->CLKSEL = 0x01;               // Set CLK src to PCLK
    uint32_t clk = SystemCoreClock / 16;    // WD has a fixed /4 prescaler, PCLK default is /4
    LPC_WWDT->TC = s * (float)clk;
    LPC_WWDT->MOD = 0x03;                   // Enabled and Reset
#endif
    kick();
}
// "kick" or "feed" the dog - reset the watchdog timer
// by writing this required bit pattern
void Watchdog::kick() {
    __disable_irq();
#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
    LPC_WDT->WDFEED = 0xAA;
    LPC_WDT->WDFEED = 0x55;
#elif defined(TARGET_LPC11U24)
    LPC_WWDT->FEED = 0xAA;
    LPC_WWDT->FEED = 0x55;
#endif
    __enable_irq();
}

int Watchdog::getFlg () {
#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
    return LPC_WDT->WDMOD & (1<<2) ? 1 : 0;
#elif defined(TARGET_LPC11U24)
    return LPC_WWDT->MOD & (1<<2) ? 1 : 0;
#endif
}