Zhen Liu
/
HW1_extraA
Extra problem 1 for HW 1
main.cpp@0:d1018730bb52, 2015-02-18 (annotated)
- Committer:
- lzzcd001
- Date:
- Wed Feb 18 14:47:35 2015 +0000
- Revision:
- 0:d1018730bb52
Extra problem 1 for HW 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lzzcd001 | 0:d1018730bb52 | 1 | #include "mbed.h" |
lzzcd001 | 0:d1018730bb52 | 2 | |
lzzcd001 | 0:d1018730bb52 | 3 | DigitalIn sw(p5); |
lzzcd001 | 0:d1018730bb52 | 4 | DigitalOut led(p10); |
lzzcd001 | 0:d1018730bb52 | 5 | DigitalOut myled1(LED1); |
lzzcd001 | 0:d1018730bb52 | 6 | DigitalOut myled2(LED2); |
lzzcd001 | 0:d1018730bb52 | 7 | DigitalOut myled3(LED3); |
lzzcd001 | 0:d1018730bb52 | 8 | DigitalOut myled4(LED4); |
lzzcd001 | 0:d1018730bb52 | 9 | |
lzzcd001 | 0:d1018730bb52 | 10 | class Watchdog { |
lzzcd001 | 0:d1018730bb52 | 11 | public: |
lzzcd001 | 0:d1018730bb52 | 12 | // Load timeout value in watchdog timer and enable |
lzzcd001 | 0:d1018730bb52 | 13 | void kick(float s) { |
lzzcd001 | 0:d1018730bb52 | 14 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
lzzcd001 | 0:d1018730bb52 | 15 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
lzzcd001 | 0:d1018730bb52 | 16 | LPC_WDT->WDTC = s * (float)clk; |
lzzcd001 | 0:d1018730bb52 | 17 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
lzzcd001 | 0:d1018730bb52 | 18 | kick(); |
lzzcd001 | 0:d1018730bb52 | 19 | } |
lzzcd001 | 0:d1018730bb52 | 20 | // "kick" or "feed" the dog - reset the watchdog timer |
lzzcd001 | 0:d1018730bb52 | 21 | // by writing this required bit pattern |
lzzcd001 | 0:d1018730bb52 | 22 | void kick() { |
lzzcd001 | 0:d1018730bb52 | 23 | LPC_WDT->WDFEED = 0xAA; |
lzzcd001 | 0:d1018730bb52 | 24 | LPC_WDT->WDFEED = 0x55; |
lzzcd001 | 0:d1018730bb52 | 25 | } |
lzzcd001 | 0:d1018730bb52 | 26 | }; |
lzzcd001 | 0:d1018730bb52 | 27 | |
lzzcd001 | 0:d1018730bb52 | 28 | // Setup the watchdog timer |
lzzcd001 | 0:d1018730bb52 | 29 | Watchdog wdt; |
lzzcd001 | 0:d1018730bb52 | 30 | |
lzzcd001 | 0:d1018730bb52 | 31 | int main() { |
lzzcd001 | 0:d1018730bb52 | 32 | int count = 0; |
lzzcd001 | 0:d1018730bb52 | 33 | if ((LPC_WDT->WDMOD >> 2) & 1) |
lzzcd001 | 0:d1018730bb52 | 34 | myled4 = 1; else myled3 = 1; |
lzzcd001 | 0:d1018730bb52 | 35 | |
lzzcd001 | 0:d1018730bb52 | 36 | wdt.kick(10.0); |
lzzcd001 | 0:d1018730bb52 | 37 | |
lzzcd001 | 0:d1018730bb52 | 38 | while(1) { |
lzzcd001 | 0:d1018730bb52 | 39 | if (sw == 1) { |
lzzcd001 | 0:d1018730bb52 | 40 | led = 1; |
lzzcd001 | 0:d1018730bb52 | 41 | myled1 = 1; |
lzzcd001 | 0:d1018730bb52 | 42 | wait(0.2); |
lzzcd001 | 0:d1018730bb52 | 43 | } else { |
lzzcd001 | 0:d1018730bb52 | 44 | if (count >= 20) while(1) {}; |
lzzcd001 | 0:d1018730bb52 | 45 | led = 0; |
lzzcd001 | 0:d1018730bb52 | 46 | myled1 = 0; |
lzzcd001 | 0:d1018730bb52 | 47 | wait(0.2); |
lzzcd001 | 0:d1018730bb52 | 48 | } |
lzzcd001 | 0:d1018730bb52 | 49 | count++; |
lzzcd001 | 0:d1018730bb52 | 50 | wdt.kick(); |
lzzcd001 | 0:d1018730bb52 | 51 | } |
lzzcd001 | 0:d1018730bb52 | 52 | |
lzzcd001 | 0:d1018730bb52 | 53 | } |