summaryrefslogtreecommitdiff
path: root/wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'wdt.c')
-rw-r--r--wdt.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/wdt.c b/wdt.c
new file mode 100644
index 0000000..f815b71
--- /dev/null
+++ b/wdt.c
@@ -0,0 +1,25 @@
+
+static uint8_t wdt_generation __attribute__((section (".noinit")));
+
+static void wdt_init(void)
+{
+ uint8_t temp;
+ /* timed sequence. bit 4: WDCE, bit 3: WDE,
+ * 0x07 = WDP2 | WDP1 | WDP0 = 2s */
+ asm volatile ("\n\
+WDTCSR = 0x60\n\
+WDCE = 4\n\
+WDE = 3\n\
+ wdr \n\
+ \n\
+ ldi %[temp], (1 << WDCE) | (1 << WDE) \n\
+ sts WDTCSR, %[temp] \n\
+ \n\
+ ldi %[temp], (1 << WDE) | 0x07 \n\
+ sts WDTCSR, %[temp] \n\
+ " : [temp] "=r" (temp) : : "memory");
+
+ if (MCUSR & (1 << WDRF))
+ wdt_generation++;
+}
+