CODE
for(int i=0; i < 256; i+=2)
{
_FILL_TEMP_WORD(0x0000+i, 0xFFFF);
}
_PAGE_WRITE(0x0000);
_WAIT_FOR_SPM();
_ENABLE_RWW_SECTION();
{
_FILL_TEMP_WORD(0x0000+i, 0xFFFF);
}
_PAGE_WRITE(0x0000);
_WAIT_FOR_SPM();
_ENABLE_RWW_SECTION();
Ожидалось, что вся страница заполнится байтами 0xFF.
Результат - 0xFFFF начинают записываться только с адреса 0x00E4, а с нулевого адреса и до него пишется 0x9518, т.е. команда возвращения из прерывания RETI. Покурил даташит, предположил, что контроллер не позволяет изменять свои вектора, если они определены в секции Application, а программа стартует с секции Bootloader. Перенес таблицу векторов:
CODE
/* Enable change of Interrupt Vectors */
MCUCR = (1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = (1<<IVSEL);
MCUCR = (1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = (1<<IVSEL);
Никакой реакции, все осталось как и было. Помогите пожалуйста, я уже не знаю что и предположить(((