00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _WDT_DRV_H_
00017 #define _WDT_DRV_H_
00018
00019
00020
00021 #ifdef AVRGCC
00022 #include <avr/io.h>
00023 #include <avr/wdt.h>
00024 #endif
00025
00026
00027
00028
00031
00032 #define Is_ext_reset() ((MCUSR&(1<<EXTRF)) ? TRUE:FALSE)
00033 #define Ack_ext_reset() (MCUSR= ~(1<<EXTRF))
00034 #define Is_POR_reset() ((MCUSR&(1<<(MCUSR= ~(1<<PORF)))) ? TRUE:FALSE)
00035 #define Ack_POR_reset() (MCUSR= ~(1<<PORF))
00036 #define Is_BOD_reset() ((MCUSR&(1<<BORF)) ? TRUE:FALSE)
00037 #define Ack_BOD_reset() (MCUSR= ~(1<<BORF))
00038 #define Is_wdt_reset() ((MCUSR&(1<<WDRF)) ? TRUE:FALSE)
00039 #define Ack_wdt_reset() (MCUSR= ~(1<<WDRF))
00040
00041 #ifdef AVRGCC
00042
00043 #define Wdt_reset_instruction() (wdt_reset())
00044 #else
00045 #define Wdt_reset_instruction() (__watchdog_reset())
00046 #endif
00047 #define Wdt_clear_flag() (Ack_wdt_reset())
00048 #define Wdt_change_enable() (WDTCSR |= (1<<WDCE) | (1<<WDE))
00049 #define Wdt_enable_16ms() (WDTCSR = (1<<WDE))
00050 #define Wdt_enable_32ms() (WDTCSR = (1<<WDE) | (1<<WDP0) )
00051 #define Wdt_enable_64ms() (WDTCSR = (1<<WDE) | (1<<WDP1) )
00052 #define Wdt_enable_125ms() (WDTCSR = (1<<WDE) | (1<<WDP1) | (1<<WDP0))
00053 #define Wdt_enable_250ms() (WDTCSR = (1<<WDE) | (1<<WDP2) )
00054 #define Wdt_enable_500ms() (WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0))
00055 #define Wdt_enable_1s() (WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP1))
00056 #define Wdt_enable_2s() (WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0))
00057 #define Wdt_enable_4s() (WDTCSR = (1<<WDE) | (1<<WDP3) | (1<<WDP0))
00058 #define Wdt_enable_8s() (WDTCSR = (1<<WDE) | (1<<WDP3) | (1<<WDP1))
00059
00060 #define Wdt_interrupt_16ms() (WDTCSR = (1<<WDIE))
00061 #define Wdt_interrupt_32ms() (WDTCSR = (1<<WDIE) | (1<<WDP0) )
00062 #define Wdt_interrupt_64ms() (WDTCSR = (1<<WDIE) | (1<<WDP1) )
00063 #define Wdt_interrupt_125ms() (WDTCSR = (1<<WDIE) | (1<<WDP1) | (1<<WDP0))
00064 #define Wdt_interrupt_250ms() (WDTCSR = (1<<WDIE) | (1<<WDP2) )
00065 #define Wdt_interrupt_500ms() (WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP0))
00066 #define Wdt_interrupt_1s() (WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP1))
00067 #define Wdt_interrupt_2s() (WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0))
00068 #define Wdt_interrupt_4s() (WDTCSR = (1<<WDIE) | (1<<WDP3) | (1<<WDP0))
00069 #define Wdt_interrupt_8s() (WDTCSR = (1<<WDIE) | (1<<WDP3) | (1<<WDP1))
00070
00071 #define Wdt_enable_reserved5() (WDTCSR = (1<<WDE) | (1<<WDP3) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0))
00072 #define Wdt_stop() (WDTCSR = 0x00)
00073
00074 #define Wdt_ack_interrupt() (WDTCSR = ~(1<<WDIF))
00075
00076
00088 #define Wdt_off() (Wdt_reset_instruction(), \
00089 Wdt_clear_flag(), \
00090 Wdt_change_enable(), \
00091 Wdt_stop())
00092
00093
00094
00095
00107 #define Wdt_change_16ms() (Wdt_reset_instruction(), \
00108 Wdt_change_enable(), \
00109 Wdt_enable_32ms() )
00110
00122 #define Wdt_change_32ms() (Wdt_reset_instruction(), \
00123 Wdt_change_enable(), \
00124 Wdt_enable_32ms() )
00125
00126
00138 #define Wdt_change_64ms() (Wdt_reset_instruction(), \
00139 Wdt_change_enable(), \
00140 Wdt_enable_64ms() )
00141
00142
00143
00144
00156 #define Wdt_change_125ms() (Wdt_reset_instruction(), \
00157 Wdt_change_enable(), \
00158 Wdt_enable_125ms() )
00159
00171 #define Wdt_change_250ms() (Wdt_reset_instruction(), \
00172 Wdt_change_enable(), \
00173 Wdt_enable_250ms() )
00174
00186 #define Wdt_change_500ms() (Wdt_reset_instruction(), \
00187 Wdt_change_enable(), \
00188 Wdt_enable_500ms() )
00189
00201 #define Wdt_change_1s() (Wdt_reset_instruction(), \
00202 Wdt_change_enable(), \
00203 Wdt_enable_1s() )
00204
00205
00217 #define Wdt_change_2s() (Wdt_reset_instruction(), \
00218 Wdt_change_enable(), \
00219 Wdt_enable_2s() )
00231 #define Wdt_change_4s() (Wdt_reset_instruction(), \
00232 Wdt_change_enable(), \
00233 Wdt_enable_4s() )
00234
00235
00247 #define Wdt_change_8s() (Wdt_reset_instruction(), \
00248 Wdt_change_enable(), \
00249 Wdt_enable_8s() )
00250
00251
00263 #define Wdt_change_interrupt_16ms() (Wdt_reset_instruction(), \
00264 Wdt_change_enable(), \
00265 Wdt_interrupt_16ms() )
00266
00278 #define Wdt_change_interrupt_32ms() (Wdt_reset_instruction(), \
00279 Wdt_change_enable(), \
00280 Wdt_interrupt_32ms() )
00281
00293 #define Wdt_change_interrupt_64ms() (Wdt_reset_instruction(), \
00294 Wdt_change_enable(), \
00295 Wdt_interrupt_64ms() )
00296
00308 #define Wdt_change_interrupt_125ms() (Wdt_reset_instruction(), \
00309 Wdt_change_enable(), \
00310 Wdt_interrupt_125ms() )
00311
00323 #define Wdt_change_interrupt_250ms() (Wdt_reset_instruction(), \
00324 Wdt_change_enable(), \
00325 Wdt_interrupt_250ms() )
00326
00338 #define Wdt_change_interrupt_500ms() (Wdt_reset_instruction(), \
00339 Wdt_change_enable(), \
00340 Wdt_interrupt_500ms() )
00341
00353 #define Wdt_change_interrupt_1s() (Wdt_reset_instruction(), \
00354 Wdt_change_enable(), \
00355 Wdt_interrupt_1s() )
00356
00368 #define Wdt_change_interrupt_2s() (Wdt_reset_instruction(), \
00369 Wdt_change_enable(), \
00370 Wdt_interrupt_2s() )
00371
00383 #define Wdt_change_interrupt_4s() (Wdt_reset_instruction(), \
00384 Wdt_change_enable(), \
00385 Wdt_interrupt_4s() )
00386
00398 #define Wdt_change_interrupt_8s() (Wdt_reset_instruction(), \
00399 Wdt_change_enable(), \
00400 Wdt_interrupt_8s() )
00401
00402 #define Wdt_change_reserved5() (Wdt_reset_instruction(), \
00403 Wdt_change_enable(), \
00404 Wdt_enable_reserved5() )
00405
00406 #define Soft_reset() {asm("jmp 0000");}
00407
00409
00410
00411
00412
00413 #endif // _WDT_DRV_H_
00414