Lab 1 Parts 1 and 2, and watchdog timer EC

Dependencies:   mbed

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?

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