aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Phillips <david@yeah.nah.nz>2020-12-13 21:11:50 +1300
committerDavid Phillips <david@yeah.nah.nz>2020-12-13 21:12:25 +1300
commit5eaf06d25c23a33a4e921161e9f0786a88e2948f (patch)
treeceb6629c0ec6af77b0c12c57c2025ceabcbf7c45
parentf8be5f4eeea8364a0df8ef878d06a7ff8814d405 (diff)
downloadaltimeter-5eaf06d25c23a33a4e921161e9f0786a88e2948f.tar.xz
Set a 2 second watchdog timer
-rw-r--r--Makefile2
-rw-r--r--altimeter.c16
2 files changed, 16 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 879452f..400aeff 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ QEMU_AVR ?= qemu-system-avr
MCU ?= atmega32u4
SIM_MCU ?= atmega2560
CFLAGS += -DF_CPU=16000000UL -mmcu=$(MCU) -O3
-SIM_CFLAGS += -DF_CPU=16000000UL -mmcu=$(SIM_MCU) -g3 -gdwarf-2
+SIM_CFLAGS += -DF_CPU=16000000UL -mmcu=$(SIM_MCU) -g3 -gdwarf-2 -DWDT_DISABLE
$(shell mkdir -p build/{real,sim})
diff --git a/altimeter.c b/altimeter.c
index 3133d2a..429976c 100644
--- a/altimeter.c
+++ b/altimeter.c
@@ -5,11 +5,21 @@
#include <avr/sleep.h>
#include <avr/interrupt.h>
+#include <avr/wdt.h>
#include "barometer.h"
#include "display.h"
#include "util.h"
+#ifdef WDT_DISABLE
+# warning "WDT disabled in this build"
+# define WDT_SETUP_MAYBE(x)
+# define WDT_PAT_MAYBE()
+#else
+# define WDT_SETUP_MAYBE(x) do{wdt_enable(x);}while(0)
+# define WDT_PAT_MAYBE() do{wdt_reset();}while(0)
+#endif
+
/* ISR for collecting and displaying pressure, altitude data etc */
ISR(TIMER1_COMPA_vect)
{
@@ -69,7 +79,8 @@ ISR(TIMER1_COMPA_vect)
blank_to_eol(line, sizeof(line));
display_set_cursor(0, 3);
display_write(line);
- return;
+
+ WDT_PAT_MAYBE();
}
int main(void)
@@ -92,6 +103,9 @@ int main(void)
USBCON &= ~(1 << USBE);
#endif
+ /* main body should take no longer than 1 second to run */
+ WDT_SETUP_MAYBE(WDTO_2S);
+
sei();
while(1) {
set_sleep_mode(SLEEP_MODE_IDLE);