4180 lab 1

Dependencies:   mbed MCP23S17 PinDetect USBDevice

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?

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