typedef enum
{
wd_disable = 0,
wd_1sec = (1 << WDP2) | (1 << WDP1),
wd_2sec = (1 << WDP2) | (1 << WDP1) | (1 << WDP0),
#ifdef WDP3
wd_4sec = (1 << WDP3),
wd_8sec = (1 << WDP3) | (1 << WDP0),
#endif
}Ewd_modes;
////////////////////////////////////////////////////////////////////////////////
#pragma optimize = none
void watchdog_cmd( Ewd_modes in_mode )
{
INTERRUPT_PUSH_AND_CLR;
WATCHDOG_RESET;
switch( in_mode )
{
case wd_disable:
{
MCU_REG &= ~(1 << WDRF);
u8 t = WDT_REG;
t |= (1 << WDCE) | (1 << WDE);
WDT_REG = t;
WDT_REG = 0;
}
break;
default:
{
u8 t1 = WDT_REG;
u8 t2 = t1;
t1 |= (1 << WDCE) | (1 << WDE);
t2 |= (1 << WDE) | (u8)in_mode;
WDT_REG = t1;
WDT_REG = t2;
}
break;
}
INTERRUPT_POP;
}