Всё очевидно…
Всё очевидно…
Код: Выделить всё
asm("wdr");
MCUSR &= ~(1<<WDRF); /* Clear WDRF in MCUSR */
WDTCSR |= (1<<WDCE) | (1<<WDE); /* Write logical one to WDCE and WDE */
WDTCSR = 0x00; /* Turn off WDT */
//WD Timer initialization---------------------------------------------------------------------------------------------
wdt_enable(WDTO_1S); // период 1 сек
WDTCSR |= (1<<WDCE) | (1<<WDE)| (1<<WDIE);//разрешить прерывания от WDTКод: Выделить всё
ISR(WDT_vect)
{
asm("wdr");
WDTCSR |= (1<<WDIF); // Clear WDIF
wdt_enable(WDTO_1S);
WDTCSR |= (1<<WDCE) | (1<<WDE)| (1<<WDIE);//разрешить прерывания от WDT
++seconds;
flag_CLOCK = _ON;
}Код: Выделить всё
### WDTCSR[WDE] Watchdog System Reset Enable
WDE is overridden by WDRF in MCUSR.
This means that WDE is always set when WDRF is set.
To clear WDE, WDRF must be cleared first.
This feature ensures multiple resets during conditions causing failure, and a safe start-up after the failure.
Код: Выделить всё
MCUSR - MCU Status Register
WDTCSR - Watchdog Timer Control Register
Код: Выделить всё
WDTCSR[WDE] - Watchdog Timer Control Register
MCUSR [WDRF] - Watchdog System Reset Flag
Код: Выделить всё
WDTCSR[WDE] = 1
Код: Выделить всё
MCUSR [WDRF] = 1
Код: Выделить всё
WDTCSR[WDE] = 1
Код: Выделить всё
WDTCSR[WDE] = 0
Код: Выделить всё
.macro wdt_inc
.set _WDT_v = _WDT_v + 1
lds AL,M_WDT_v
inc AL
sts M_WDT_v,AL
.endm
Возможно для автора вопроса моя информация припоздала, но может кому-то окажется полезной.Land писал(а):собственно в прерыании происходит сброс таймера командой wdr и перезапуск его