Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
watchdog.cpp
00001 /* 00002 * Source code is free to use and distribute. 00003 * Software originally written by Simon Ford, 00004 * altered by Lerche. 00005 * 00006 * 02-07-2012 - Added LPC11U24 Watchdog functions. Lerche 00007 * 23-10-2012 - Trying to publish the library which seems VERY difficult 00008 */ 00009 00010 #include "mbed.h" 00011 #include "watchdog.h" 00012 00013 00014 WatchDog::WatchDog(float s) { 00015 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00016 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK 00017 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 00018 LPC_WDT->WDTC = s * (float)clk; // Load WD Timer Constant with value determined by float s 00019 LPC_WDT->WDMOD = 0x3; // Enabled and Reset 00020 feed(); 00021 #elif defined(TARGET_LPC11U24) 00022 LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; 00023 LPC_SYSCON->PDRUNCFG &= 0xFFBF; 00024 LPC_SYSCON->WDTOSCCTRL = 0x40; 00025 uint32_t clk = 100000; 00026 LPC_WWDT->TC = s * (float)clk; 00027 LPC_WWDT->CLKSEL = 0x1; 00028 LPC_WWDT->MOD = 0x3; 00029 feed(); 00030 #endif 00031 } 00032 00033 WatchDog_ms::WatchDog_ms(int ms) { 00034 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00035 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK 00036 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 00037 LPC_WDT->WDTC = ((float)ms * (float)clk) /1000; // Load WD Timer Constant with value determined by int ms 00038 LPC_WDT->WDMOD = 0x3; // Enabled and Reset 00039 feed(); 00040 #elif defined(TARGET_LPC11U24) 00041 LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; 00042 LPC_SYSCON->PDRUNCFG &= 0xFFBF; 00043 LPC_SYSCON->WDTOSCCTRL = 0x40; 00044 uint32_t clk = 100000; 00045 LPC_WWDT->TC = ((float)ms * (float)clk) / 1000; 00046 LPC_WWDT->CLKSEL = 0x1; 00047 LPC_WWDT->MOD = 0x3; 00048 feed(); 00049 #endif 00050 } 00051 00052 WatchDog_us::WatchDog_us(int us) { 00053 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00054 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK 00055 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 00056 LPC_WDT->WDTC = ((float)us * (float)clk) /1000000; // Load WD Timer Constant with value determined by int us 00057 LPC_WDT->WDMOD = 0x3; // Enabled and Reset 00058 feed(); 00059 #elif defined(TARGET_LPC11U24) 00060 LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; 00061 LPC_SYSCON->PDRUNCFG &= 0xFFBF; 00062 LPC_SYSCON->WDTOSCCTRL = 0x40; 00063 uint32_t clk = 100000; 00064 LPC_WWDT->TC = ((float)us * (float)clk) / 1000000; 00065 LPC_WWDT->CLKSEL = 0x1; 00066 LPC_WWDT->MOD = 0x3; 00067 feed(); 00068 #endif 00069 } 00070 00071 void WatchDog::feed() { 00072 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00073 LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog 00074 LPC_WDT->WDFEED = 0x55; // according to user manual 00075 #elif defined(TARGET_LPC11U24) 00076 LPC_WWDT->FEED = 0xAA; 00077 LPC_WWDT->FEED = 0x55; 00078 #endif 00079 } 00080 void WatchDog_ms::feed() { 00081 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00082 LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog 00083 LPC_WDT->WDFEED = 0x55; // according to user manual 00084 #elif defined(TARGET_LPC11U24) 00085 LPC_WWDT->FEED = 0xAA; 00086 LPC_WWDT->FEED = 0x55; 00087 #endif 00088 } 00089 void WatchDog_us::feed() { 00090 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) 00091 LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog 00092 LPC_WDT->WDFEED = 0x55; // according to user manual 00093 #elif defined(TARGET_LPC11U24) 00094 LPC_WWDT->FEED = 0xAA; 00095 LPC_WWDT->FEED = 0x55; 00096 #endif 00097 } 00098
Generated on Mon Jul 18 2022 01:28:39 by
1.7.2