Jeroen Lodder / Mbed 2 deprecated SteppermotorBoard

Dependencies:   USBDevice mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers watchdog.cpp Source File

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