4180 lab 1
Dependencies: mbed MCP23S17 PinDetect USBDevice
watchdog_ec.h@12:cc5bda248946, 2020-01-22 (annotated)
- Committer:
- emilywilson
- Date:
- Wed Jan 22 13:08:48 2020 +0000
- Revision:
- 12:cc5bda248946
- Parent:
- 10:0886afdfb170
mouse extra credit and power management extra credit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilywilson | 7:b7720a8623b5 | 1 | #include "mbed.h" |
emilywilson | 7:b7720a8623b5 | 2 | |
emilywilson | 7:b7720a8623b5 | 3 | class Watchdog { |
emilywilson | 7:b7720a8623b5 | 4 | public: |
emilywilson | 7:b7720a8623b5 | 5 | // Load timeout value in watchdog timer and enable |
emilywilson | 7:b7720a8623b5 | 6 | void kick(float s) { |
emilywilson | 7:b7720a8623b5 | 7 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
emilywilson | 7:b7720a8623b5 | 8 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
emilywilson | 7:b7720a8623b5 | 9 | LPC_WDT->WDTC = s * (float)clk; |
emilywilson | 7:b7720a8623b5 | 10 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
emilywilson | 7:b7720a8623b5 | 11 | kick(); |
emilywilson | 7:b7720a8623b5 | 12 | } |
emilywilson | 7:b7720a8623b5 | 13 | // "kick" or "feed" the dog - reset the watchdog timer |
emilywilson | 7:b7720a8623b5 | 14 | // by writing this required bit pattern |
emilywilson | 7:b7720a8623b5 | 15 | void kick() { |
emilywilson | 7:b7720a8623b5 | 16 | LPC_WDT->WDFEED = 0xAA; |
emilywilson | 7:b7720a8623b5 | 17 | LPC_WDT->WDFEED = 0x55; |
emilywilson | 7:b7720a8623b5 | 18 | } |
emilywilson | 7:b7720a8623b5 | 19 | }; |
emilywilson | 7:b7720a8623b5 | 20 | |
emilywilson | 7:b7720a8623b5 | 21 | // Setup the watchdog timer |
emilywilson | 7:b7720a8623b5 | 22 | Watchdog wdt; |
emilywilson | 7:b7720a8623b5 | 23 | |
emilywilson | 7:b7720a8623b5 | 24 | DigitalIn pb(p22); |
emilywilson | 7:b7720a8623b5 | 25 | DigitalOut myled(p26); |
emilywilson | 7:b7720a8623b5 | 26 | |
emilywilson | 7:b7720a8623b5 | 27 | int prev; |
emilywilson | 7:b7720a8623b5 | 28 | |
emilywilson | 7:b7720a8623b5 | 29 | int run_watchdogEC() { |
emilywilson | 7:b7720a8623b5 | 30 | wdt.kick(10.0); |
emilywilson | 7:b7720a8623b5 | 31 | |
emilywilson | 7:b7720a8623b5 | 32 | prev = pb; |
emilywilson | 7:b7720a8623b5 | 33 | |
emilywilson | 10:0886afdfb170 | 34 | int count = 0; |
emilywilson | 10:0886afdfb170 | 35 | |
emilywilson | 7:b7720a8623b5 | 36 | while(1) { |
emilywilson | 7:b7720a8623b5 | 37 | if (prev != pb) { |
emilywilson | 7:b7720a8623b5 | 38 | count++; |
emilywilson | 7:b7720a8623b5 | 39 | } |
emilywilson | 10:0886afdfb170 | 40 | prev = pb; |
emilywilson | 7:b7720a8623b5 | 41 | myled = !pb; |
emilywilson | 7:b7720a8623b5 | 42 | |
emilywilson | 7:b7720a8623b5 | 43 | if (count == 2) { |
emilywilson | 7:b7720a8623b5 | 44 | while (1) { |
emilywilson | 7:b7720a8623b5 | 45 | ; |
emilywilson | 7:b7720a8623b5 | 46 | } |
emilywilson | 7:b7720a8623b5 | 47 | } |
emilywilson | 7:b7720a8623b5 | 48 | |
emilywilson | 7:b7720a8623b5 | 49 | wdt.kick(); |
emilywilson | 7:b7720a8623b5 | 50 | } |
emilywilson | 7:b7720a8623b5 | 51 | } |