/* This is from http://www.mtcnet.net/~henryvm/wdt/ */ #ifndef _AVR_WD_H_ #define _AVR_WD_H_ #include /* Copyright (c) 2009, Curt Van Maanen Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. include usage- #include "wd.h" //if in same directory as project #include //if wd.h is in avr directory set watchdog modes and prescale usage- WD_SET(mode,[timeout]); //prescale always set modes- WD_OFF disabled WD_RST normal reset mode WD_IRQ interrupt only mode (if supported) WD_RST_IRQ interrupt+reset mode (if supported) timeout- WDTO_15MS default if no timeout provided WDTO_30MS WDTO_60MS WDTO_120MS WDTO_250MS WDTO_500MS WDTO_1S WDTO_2S WDTO_4S (if supported) WDTO_8S (if supported) examples- WD_SET(WD_RST,WDTO_1S); //reset mode, 1s timeout WD_SET(WD_OFF); //watchdog disabled (if not fused on) WD_SET(WD_RST); //reset mode, 15ms (default timeout) WD_SET(WD_IRQ,WDTO_120MS); //interrupt only mode, 120ms timeout WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout for enhanced watchdogs, if the watchdog is not being used WDRF should be cleared on every power up or reset, along with disabling the watchdog- WD_DISABLE(); //clear WDRF, then turn off watchdog */ //reset registers to the same name (MCUCSR) #if !defined(MCUCSR) #define MCUCSR MCUSR #endif //watchdog registers to the same name (WDTCSR) #if !defined(WDTCSR) #define WDTCSR WDTCR #endif //if enhanced watchdog, define irq values, create disable macro #if defined(WDIF) #define WD_IRQ 0xC0 #define WD_RST_IRQ 0xC8 #define WD_DISABLE() do{ \ MCUCSR &= ~(1<