Wesley Schon
/
ECE4180Lab1Part2
Lab 1 Parts 1 and 2, and watchdog timer EC
main.cpp@0:38ede70f5c4d, 2016-01-23 (annotated)
- Committer:
- wschon
- Date:
- Sat Jan 23 20:15:24 2016 +0000
- Revision:
- 0:38ede70f5c4d
parts 1,2, and watchdog
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wschon | 0:38ede70f5c4d | 1 | #include "mbed.h" |
wschon | 0:38ede70f5c4d | 2 | |
wschon | 0:38ede70f5c4d | 3 | PwmOut myled(p21); |
wschon | 0:38ede70f5c4d | 4 | DigitalIn button1(p30); |
wschon | 0:38ede70f5c4d | 5 | DigitalIn button2(p29); |
wschon | 0:38ede70f5c4d | 6 | DigitalIn switch1(p8); |
wschon | 0:38ede70f5c4d | 7 | DigitalOut myled4(LED4); |
wschon | 0:38ede70f5c4d | 8 | DigitalOut myled3(LED3); |
wschon | 0:38ede70f5c4d | 9 | float intensity = 0.5f; |
wschon | 0:38ede70f5c4d | 10 | |
wschon | 0:38ede70f5c4d | 11 | |
wschon | 0:38ede70f5c4d | 12 | class Watchdog { |
wschon | 0:38ede70f5c4d | 13 | public: |
wschon | 0:38ede70f5c4d | 14 | // Load timeout value in watchdog timer and enable |
wschon | 0:38ede70f5c4d | 15 | void kick(float s) { |
wschon | 0:38ede70f5c4d | 16 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
wschon | 0:38ede70f5c4d | 17 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
wschon | 0:38ede70f5c4d | 18 | LPC_WDT->WDTC = s * (float)clk; |
wschon | 0:38ede70f5c4d | 19 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
wschon | 0:38ede70f5c4d | 20 | kick(); |
wschon | 0:38ede70f5c4d | 21 | } |
wschon | 0:38ede70f5c4d | 22 | // "kick" or "feed" the dog - reset the watchdog timer |
wschon | 0:38ede70f5c4d | 23 | // by writing this required bit pattern |
wschon | 0:38ede70f5c4d | 24 | void kick() { |
wschon | 0:38ede70f5c4d | 25 | LPC_WDT->WDFEED = 0xAA; |
wschon | 0:38ede70f5c4d | 26 | LPC_WDT->WDFEED = 0x55; |
wschon | 0:38ede70f5c4d | 27 | } |
wschon | 0:38ede70f5c4d | 28 | }; |
wschon | 0:38ede70f5c4d | 29 | |
wschon | 0:38ede70f5c4d | 30 | // Setup the watchdog timer |
wschon | 0:38ede70f5c4d | 31 | Watchdog wdt; |
wschon | 0:38ede70f5c4d | 32 | |
wschon | 0:38ede70f5c4d | 33 | |
wschon | 0:38ede70f5c4d | 34 | int main() { |
wschon | 0:38ede70f5c4d | 35 | |
wschon | 0:38ede70f5c4d | 36 | int count = 0; |
wschon | 0:38ede70f5c4d | 37 | wdt.kick(5.0); |
wschon | 0:38ede70f5c4d | 38 | if ((LPC_WDT->WDMOD >> 2) & 1) |
wschon | 0:38ede70f5c4d | 39 | myled4 = 1; else myled3 = 1; |
wschon | 0:38ede70f5c4d | 40 | wait(2); |
wschon | 0:38ede70f5c4d | 41 | myled4 = 0; |
wschon | 0:38ede70f5c4d | 42 | myled3 = 0; |
wschon | 0:38ede70f5c4d | 43 | |
wschon | 0:38ede70f5c4d | 44 | |
wschon | 0:38ede70f5c4d | 45 | |
wschon | 0:38ede70f5c4d | 46 | while(1) { |
wschon | 0:38ede70f5c4d | 47 | if (button1 == 0) { |
wschon | 0:38ede70f5c4d | 48 | if (intensity <= 1.0f) { |
wschon | 0:38ede70f5c4d | 49 | intensity += 0.07f; |
wschon | 0:38ede70f5c4d | 50 | } |
wschon | 0:38ede70f5c4d | 51 | } |
wschon | 0:38ede70f5c4d | 52 | if (button2 == 0) { |
wschon | 0:38ede70f5c4d | 53 | if (intensity >= 0.0f) { |
wschon | 0:38ede70f5c4d | 54 | intensity -= 0.07f; |
wschon | 0:38ede70f5c4d | 55 | } |
wschon | 0:38ede70f5c4d | 56 | } |
wschon | 0:38ede70f5c4d | 57 | if (switch1 == 0) { |
wschon | 0:38ede70f5c4d | 58 | myled = intensity; |
wschon | 0:38ede70f5c4d | 59 | } |
wschon | 0:38ede70f5c4d | 60 | else { |
wschon | 0:38ede70f5c4d | 61 | myled = 0.0f; |
wschon | 0:38ede70f5c4d | 62 | } |
wschon | 0:38ede70f5c4d | 63 | wait(0.1); |
wschon | 0:38ede70f5c4d | 64 | count++; |
wschon | 0:38ede70f5c4d | 65 | if (count == 70) { |
wschon | 0:38ede70f5c4d | 66 | wait(11); |
wschon | 0:38ede70f5c4d | 67 | } |
wschon | 0:38ede70f5c4d | 68 | wdt.kick(); //kick the watchdog timer |
wschon | 0:38ede70f5c4d | 69 | } |
wschon | 0:38ede70f5c4d | 70 | } |