WatchDog Timer library, support for LPC1768 and LPC11U24
Dependents: ECGAFE_copy WatchDog
Fork of WatchDog by
WatchDog.cpp
- Committer:
- Lerche
- Date:
- 2012-07-01
- Revision:
- 0:bbc789f8d849
- Child:
- 2:a6661a79bf7b
File content as of revision 0:bbc789f8d849:
/* * Source code is free to use and distribute. * Software originally written by Simon Ford, * altered by Lerche. * * 02-07-2012 - Added LPC11U24 Watchdog functions. Lerche * */ #include "mbed.h" #include "WatchDog.h" WatchDog::WatchDog(float s) { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDCLKSEL = 0x1; // 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; // Load WD Timer Constant with value determined by float s LPC_WDT->WDMOD = 0x3; // Enabled and Reset feed(); #elif defined(TARGET_LPC11U24) LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; LPC_SYSCON->PDRUNCFG &= 0xFFBF; LPC_SYSCON->WDTOSCCTRL = 0x40; uint32_t clk = 100000; LPC_WWDT->TC = s * (float)clk; LPC_WWDT->CLKSEL = 0x1; LPC_WWDT->MOD = 0x3; feed(); #endif } WatchDog_ms::WatchDog_ms(int ms) { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 LPC_WDT->WDTC = ((float)ms * (float)clk) /1000; // Load WD Timer Constant with value determined by int ms LPC_WDT->WDMOD = 0x3; // Enabled and Reset feed(); #elif defined(TARGET_LPC11U24) LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; LPC_SYSCON->PDRUNCFG &= 0xFFBF; LPC_SYSCON->WDTOSCCTRL = 0x40; uint32_t clk = 100000; LPC_WWDT->TC = ((float)ms * (float)clk) / 1000; LPC_WWDT->CLKSEL = 0x1; LPC_WWDT->MOD = 0x3; feed(); #endif } WatchDog_us::WatchDog_us(int us) { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 LPC_WDT->WDTC = ((float)us * (float)clk) /1000000; // Load WD Timer Constant with value determined by int us LPC_WDT->WDMOD = 0x3; // Enabled and Reset feed(); #elif defined(TARGET_LPC11U24) LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; LPC_SYSCON->PDRUNCFG &= 0xFFBF; LPC_SYSCON->WDTOSCCTRL = 0x40; uint32_t clk = 100000; LPC_WWDT->TC = ((float)us * (float)clk) / 1000000; LPC_WWDT->CLKSEL = 0x1; LPC_WWDT->MOD = 0x3; feed(); #endif } void WatchDog::feed() { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog LPC_WDT->WDFEED = 0x55; // according to user manual #elif defined(TARGET_LPC11U24) LPC_WWDT->FEED = 0xAA; LPC_WWDT->FEED = 0x55; #endif } void WatchDog_ms::feed() { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog LPC_WDT->WDFEED = 0x55; // according to user manual #elif defined(TARGET_LPC11U24) LPC_WWDT->FEED = 0xAA; LPC_WWDT->FEED = 0x55; #endif } void WatchDog_us::feed() { #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog LPC_WDT->WDFEED = 0x55; // according to user manual #elif defined(TARGET_LPC11U24) LPC_WWDT->FEED = 0xAA; LPC_WWDT->FEED = 0x55; #endif }