j

Dependencies:   mbed

Committer:
aallaire3
Date:
Thu Jan 18 20:08:29 2018 +0000
Revision:
0:947209d21c35
Child:
1:f37bf2328d79
h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aallaire3 0:947209d21c35 1 #include "mbed.h"
aallaire3 0:947209d21c35 2
aallaire3 0:947209d21c35 3 DigitalOut redLed(p21);
aallaire3 0:947209d21c35 4 DigitalIn pb(p8); // Pushbutton for redLed
aallaire3 0:947209d21c35 5 DigitalOut led1(LED1);
aallaire3 0:947209d21c35 6 DigitalOut led2(LED2);
aallaire3 0:947209d21c35 7 DigitalOut led3(LED3);
aallaire3 0:947209d21c35 8
aallaire3 0:947209d21c35 9 void kick() {
aallaire3 0:947209d21c35 10 LPC_WDT->WDFEED = 0xAA;
aallaire3 0:947209d21c35 11 LPC_WDT->WDFEED = 0x55;
aallaire3 0:947209d21c35 12 }
aallaire3 0:947209d21c35 13
aallaire3 0:947209d21c35 14 void kick(float s) {
aallaire3 0:947209d21c35 15 LPC_WDT -> WDCLKSEL = 0x1;
aallaire3 0:947209d21c35 16 uint32_t clk = SystemCoreClock/16;
aallaire3 0:947209d21c35 17 LPC_WDT->WDTC = s * (float)clk;
aallaire3 0:947209d21c35 18 LPC_WDT->WDMOD = 0x3;
aallaire3 0:947209d21c35 19 kick();
aallaire3 0:947209d21c35 20 }
aallaire3 0:947209d21c35 21
aallaire3 0:947209d21c35 22
aallaire3 0:947209d21c35 23
aallaire3 0:947209d21c35 24 int main() {
aallaire3 0:947209d21c35 25 int count = 0;
aallaire3 0:947209d21c35 26 // Use internal pullup for pushbutton
aallaire3 0:947209d21c35 27 pb.mode(PullUp);
aallaire3 0:947209d21c35 28
aallaire3 0:947209d21c35 29 // Delay for initial pullup to take effect
aallaire3 0:947209d21c35 30 wait(.001);
aallaire3 0:947209d21c35 31
aallaire3 0:947209d21c35 32 // Indicate watchdog timer reset or pushbutton reset
aallaire3 0:947209d21c35 33 if((LPC_WDT->WDMOD >> 2) & 1) {
aallaire3 0:947209d21c35 34 led1 = 1;
aallaire3 0:947209d21c35 35 } else {
aallaire3 0:947209d21c35 36 led2 = 1;
aallaire3 0:947209d21c35 37 }
aallaire3 0:947209d21c35 38
aallaire3 0:947209d21c35 39 kick(5); // 5 second timeout
aallaire3 0:947209d21c35 40 while(1) {
aallaire3 0:947209d21c35 41 redLed = !pb;
aallaire3 0:947209d21c35 42 led3 = 1;
aallaire3 0:947209d21c35 43 // Simulate a fault lockup with infinite loop after 10 iterations
aallaire3 0:947209d21c35 44 if (count == 1000000) {
aallaire3 0:947209d21c35 45 while(1){
aallaire3 0:947209d21c35 46
aallaire3 0:947209d21c35 47 }
aallaire3 0:947209d21c35 48 }
aallaire3 0:947209d21c35 49 led3 = 0; // led will stay on during fault
aallaire3 0:947209d21c35 50 count++;
aallaire3 0:947209d21c35 51 kick();
aallaire3 0:947209d21c35 52 }
aallaire3 0:947209d21c35 53 }