Extra problem 1 for HW 1

Dependencies:   mbed

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?

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