Design-in of LPC11U24 (lqfp48) of mbed as Steppermotor controller with USB control.
Mbed repository of Stepper Motor Control board. Using mbed LPC11U24 chip with HID USB.
Hardware in copy repo on bitbucket https://bitbucket.org/jeroen3/stepper-motor-board
watchdog.cpp@0:d0306c0cbee6, 2013-10-28 (annotated)
- Committer:
- jeroen3
- Date:
- Mon Oct 28 18:26:28 2013 +0000
- Revision:
- 0:d0306c0cbee6
Initial mbed upload
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jeroen3 | 0:d0306c0cbee6 | 1 | /* |
jeroen3 | 0:d0306c0cbee6 | 2 | * Source code is free to use and distribute. |
jeroen3 | 0:d0306c0cbee6 | 3 | * Software originally written by Simon Ford, |
jeroen3 | 0:d0306c0cbee6 | 4 | * altered by Lerche. |
jeroen3 | 0:d0306c0cbee6 | 5 | * |
jeroen3 | 0:d0306c0cbee6 | 6 | * 02-07-2012 - Added LPC11U24 Watchdog functions. Lerche |
jeroen3 | 0:d0306c0cbee6 | 7 | * 23-10-2012 - Trying to publish the library which seems VERY difficult |
jeroen3 | 0:d0306c0cbee6 | 8 | */ |
jeroen3 | 0:d0306c0cbee6 | 9 | |
jeroen3 | 0:d0306c0cbee6 | 10 | #include "mbed.h" |
jeroen3 | 0:d0306c0cbee6 | 11 | #include "watchdog.h" |
jeroen3 | 0:d0306c0cbee6 | 12 | |
jeroen3 | 0:d0306c0cbee6 | 13 | |
jeroen3 | 0:d0306c0cbee6 | 14 | WatchDog::WatchDog(float s) { |
jeroen3 | 0:d0306c0cbee6 | 15 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 16 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
jeroen3 | 0:d0306c0cbee6 | 17 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
jeroen3 | 0:d0306c0cbee6 | 18 | LPC_WDT->WDTC = s * (float)clk; // Load WD Timer Constant with value determined by float s |
jeroen3 | 0:d0306c0cbee6 | 19 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
jeroen3 | 0:d0306c0cbee6 | 20 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 21 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 22 | LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; |
jeroen3 | 0:d0306c0cbee6 | 23 | LPC_SYSCON->PDRUNCFG &= 0xFFBF; |
jeroen3 | 0:d0306c0cbee6 | 24 | LPC_SYSCON->WDTOSCCTRL = 0x40; |
jeroen3 | 0:d0306c0cbee6 | 25 | uint32_t clk = 100000; |
jeroen3 | 0:d0306c0cbee6 | 26 | LPC_WWDT->TC = s * (float)clk; |
jeroen3 | 0:d0306c0cbee6 | 27 | LPC_WWDT->CLKSEL = 0x1; |
jeroen3 | 0:d0306c0cbee6 | 28 | LPC_WWDT->MOD = 0x3; |
jeroen3 | 0:d0306c0cbee6 | 29 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 30 | #endif |
jeroen3 | 0:d0306c0cbee6 | 31 | } |
jeroen3 | 0:d0306c0cbee6 | 32 | |
jeroen3 | 0:d0306c0cbee6 | 33 | WatchDog_ms::WatchDog_ms(int ms) { |
jeroen3 | 0:d0306c0cbee6 | 34 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 35 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
jeroen3 | 0:d0306c0cbee6 | 36 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
jeroen3 | 0:d0306c0cbee6 | 37 | LPC_WDT->WDTC = ((float)ms * (float)clk) /1000; // Load WD Timer Constant with value determined by int ms |
jeroen3 | 0:d0306c0cbee6 | 38 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
jeroen3 | 0:d0306c0cbee6 | 39 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 40 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 41 | LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; |
jeroen3 | 0:d0306c0cbee6 | 42 | LPC_SYSCON->PDRUNCFG &= 0xFFBF; |
jeroen3 | 0:d0306c0cbee6 | 43 | LPC_SYSCON->WDTOSCCTRL = 0x40; |
jeroen3 | 0:d0306c0cbee6 | 44 | uint32_t clk = 100000; |
jeroen3 | 0:d0306c0cbee6 | 45 | LPC_WWDT->TC = ((float)ms * (float)clk) / 1000; |
jeroen3 | 0:d0306c0cbee6 | 46 | LPC_WWDT->CLKSEL = 0x1; |
jeroen3 | 0:d0306c0cbee6 | 47 | LPC_WWDT->MOD = 0x3; |
jeroen3 | 0:d0306c0cbee6 | 48 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 49 | #endif |
jeroen3 | 0:d0306c0cbee6 | 50 | } |
jeroen3 | 0:d0306c0cbee6 | 51 | |
jeroen3 | 0:d0306c0cbee6 | 52 | WatchDog_us::WatchDog_us(int us) { |
jeroen3 | 0:d0306c0cbee6 | 53 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 54 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
jeroen3 | 0:d0306c0cbee6 | 55 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
jeroen3 | 0:d0306c0cbee6 | 56 | LPC_WDT->WDTC = ((float)us * (float)clk) /1000000; // Load WD Timer Constant with value determined by int us |
jeroen3 | 0:d0306c0cbee6 | 57 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
jeroen3 | 0:d0306c0cbee6 | 58 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 59 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 60 | LPC_SYSCON->SYSAHBCLKCTRL |= 0x8000; |
jeroen3 | 0:d0306c0cbee6 | 61 | LPC_SYSCON->PDRUNCFG &= 0xFFBF; |
jeroen3 | 0:d0306c0cbee6 | 62 | LPC_SYSCON->WDTOSCCTRL = 0x40; |
jeroen3 | 0:d0306c0cbee6 | 63 | uint32_t clk = 100000; |
jeroen3 | 0:d0306c0cbee6 | 64 | LPC_WWDT->TC = ((float)us * (float)clk) / 1000000; |
jeroen3 | 0:d0306c0cbee6 | 65 | LPC_WWDT->CLKSEL = 0x1; |
jeroen3 | 0:d0306c0cbee6 | 66 | LPC_WWDT->MOD = 0x3; |
jeroen3 | 0:d0306c0cbee6 | 67 | feed(); |
jeroen3 | 0:d0306c0cbee6 | 68 | #endif |
jeroen3 | 0:d0306c0cbee6 | 69 | } |
jeroen3 | 0:d0306c0cbee6 | 70 | |
jeroen3 | 0:d0306c0cbee6 | 71 | void WatchDog::feed() { |
jeroen3 | 0:d0306c0cbee6 | 72 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 73 | LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog |
jeroen3 | 0:d0306c0cbee6 | 74 | LPC_WDT->WDFEED = 0x55; // according to user manual |
jeroen3 | 0:d0306c0cbee6 | 75 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 76 | LPC_WWDT->FEED = 0xAA; |
jeroen3 | 0:d0306c0cbee6 | 77 | LPC_WWDT->FEED = 0x55; |
jeroen3 | 0:d0306c0cbee6 | 78 | #endif |
jeroen3 | 0:d0306c0cbee6 | 79 | } |
jeroen3 | 0:d0306c0cbee6 | 80 | void WatchDog_ms::feed() { |
jeroen3 | 0:d0306c0cbee6 | 81 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 82 | LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog |
jeroen3 | 0:d0306c0cbee6 | 83 | LPC_WDT->WDFEED = 0x55; // according to user manual |
jeroen3 | 0:d0306c0cbee6 | 84 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 85 | LPC_WWDT->FEED = 0xAA; |
jeroen3 | 0:d0306c0cbee6 | 86 | LPC_WWDT->FEED = 0x55; |
jeroen3 | 0:d0306c0cbee6 | 87 | #endif |
jeroen3 | 0:d0306c0cbee6 | 88 | } |
jeroen3 | 0:d0306c0cbee6 | 89 | void WatchDog_us::feed() { |
jeroen3 | 0:d0306c0cbee6 | 90 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) |
jeroen3 | 0:d0306c0cbee6 | 91 | LPC_WDT->WDFEED = 0xAA; // Routine to feed the WatchDog |
jeroen3 | 0:d0306c0cbee6 | 92 | LPC_WDT->WDFEED = 0x55; // according to user manual |
jeroen3 | 0:d0306c0cbee6 | 93 | #elif defined(TARGET_LPC11U24) |
jeroen3 | 0:d0306c0cbee6 | 94 | LPC_WWDT->FEED = 0xAA; |
jeroen3 | 0:d0306c0cbee6 | 95 | LPC_WWDT->FEED = 0x55; |
jeroen3 | 0:d0306c0cbee6 | 96 | #endif |
jeroen3 | 0:d0306c0cbee6 | 97 | } |
jeroen3 | 0:d0306c0cbee6 | 98 |