Сейчас я для этого использую WDT:
Код
case UPDATE_FIRMWARE:
__delay_cycles(10000000); //ждем FBOOT
__watchdog_reset();
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = (1<<WDE) | (0<<WDP2) | (0<<WDP1)| (1<<WDP0);
while(1){__no_operation();} // ждем сброса по WDT
...
__delay_cycles(10000000); //ждем FBOOT
__watchdog_reset();
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = (1<<WDE) | (0<<WDP2) | (0<<WDP1)| (1<<WDP0);
while(1){__no_operation();} // ждем сброса по WDT
...
Собственно вопрос: есть ли другие способы сделать программный reset (передать управление bootloader)?
Кто как вообще это делает?
P.S.: использую AVR Bootloader FastBoot von Peter Dannegger
P.P.S.: MK - tiny2313