Trick to reset wdt on new AVR core.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 2 Dec 2008 13:44:13 +0000 (13:44 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 2 Dec 2008 13:44:13 +0000 (13:44 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1955 38d2e660-2303-0410-9eaa-f027e97ec537

examples/triface/boot/main.c

index f4f05c436ad82ad49d6302502b8cb74d13753828..1382ab9e55ca2867d4c17c9508c01925d9ab0b34 100644 (file)
 
 #include <string.h>
 
+#include <avr/wdt.h>
+
+/*
+ * Watchdog disable.
+ *
+ * This function disable the watchdog timer, after a reset.
+ * We should do it after the software reset (do with watchdog),
+ * because in new AVR core do not reset the watchdog after
+ * a cpu reset, so the watchdog timer remain enable resetting
+ * every timeout time the cpu. This is necessary only with new
+ * AVR core, for the other core this no have effect.
+ *
+ * \{
+ */
+// Function prototype of watchdog reset.
+void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
+// Function implementation of watchdog reset.
+void wdt_init(void)
+{
+    MCUSR = 0;
+    wdt_disable();
+
+    return;
+}
+/* \} */
+
 int main(void)
 {
        FlashAvr flash;