50 #ifndef WATCHDOG_CONF_TIMEOUT
51 #define WATCHDOG_CONF_TIMEOUT WDTO_2S
59 #ifndef WATCHDOG_CONF_BALANCE
60 #define WATCHDOG_CONF_BALANCE 0
65 #include <avr/interrupt.h>
66 #include <dev/watchdog.h>
71 #define wdt_disable() \
73 WDT.CTRL = (WDT.CTRL & ~WDT_ENABLE_bm) | WDT_CEN_bm;
79 void *watchdog_return_addr
__attribute__ ((section (
".noinit")));
83 #if !defined (MCUSR) && defined (MCUCSR)
84 #warning *** MCUSR not defined, using MCUCSR instead ***
88 #if WATCHDOG_CONF_BALANCE && WATCHDOG_CONF_TIMEOUT >= 0
89 static int stopped = 0;
99 void get_mcusr(
void) \
100 __attribute__((naked)) \
101 __attribute__((section(
".init3")));
104 mcusr_mirror = MCUSR;
105 MCUSR &= ~(1 << WDRF);
113 watchdog_return_addr = 0;
115 #if WATCHDOG_CONF_BALANCE && WATCHDOG_CONF_TIMEOUT >= 0
123 #if WATCHDOG_CONF_TIMEOUT >= 0
124 #if WATCHDOG_CONF_BALANCE
132 WDT.CTRL = WATCHDOG_CONF_TIMEOUT | WDT_CEN_bm | WDT_ENABLE_bm;
134 wdt_enable(WATCHDOG_CONF_TIMEOUT);
138 #if defined (__AVR_ATmega1284P__)
148 #if WATCHDOG_CONF_TIMEOUT >= 0
149 #if WATCHDOG_CONF_BALANCE
156 WDT.CTRL = (
RST.CTRL & ~WDT_ENABLE_bm) | WDT_CEN_bm;
158 WDT.CTRL = WATCHDOG_CONF_TIMEOUT | WDT_CEN_bm | WDT_ENABLE_bm;
169 #if WATCHDOG_CONF_TIMEOUT >= 0
170 #if WATCHDOG_CONF_BALANCE
175 #if defined (__AVR_ATmega1284P__)
176 WDTCSR &= ~_BV(WDIE);
185 wdt_enable(WDTO_15MS);
190 #if defined (__AVR_ATmega1284P__)
195 watchdog_return_addr = (
void *)((
unsigned int)__builtin_return_address(0)<<1);