Design-in of LPC11U24 (lqfp48) of mbed as Steppermotor controller with USB control.

Dependencies:   USBDevice mbed

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

Committer:
jeroen3
Date:
Wed Oct 30 21:59:32 2013 +0000
Revision:
2:ddae311a4533
Parent:
0:d0306c0cbee6
fix led blink after soft reset

Who changed what in which revision?

UserRevisionLine numberNew 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