ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
434433
svstn (20.08.2013 16:57, просмотров: 1532)
Имеется уже рабочая написанная прошивка для ATmega640. Хотелось бы, чтобы ее можно было прошить в память контроллера дистанционно по UARTу. Перенастроил память, выделив область для bootloader-a. Написал в IAR простейшую программу, принимающую байты прошивки по UART и записывающую их с нулевого адреса и до момента, пока они не закончатся. И везде все прекрасно работает кроме самой 1-ой страницы, где записаны вектора прерываний. Там записывается всякая белиберда. Изменил код на такой: for(int i=0; i < 256; i+=2) { _FILL_TEMP_WORD(0x0000+i, 0xFFFF); } _PAGE_WRITE(0x0000); _WAIT_FOR_SPM(); _ENABLE_RWW_SECTION(); Ожидалось, что вся страница заполнится байтами 0xFF. Результат - 0xFFFF начинают записываться только с адреса 0x00E4, а с нулевого адреса и до него пишется 0x9518, т.е. команда возвращения из прерывания RETI. Покурил даташит, предположил, что контроллер не позволяет изменять свои вектора, если они определены в секции Application, а программа стартует с секции Bootloader. Перенес таблицу векторов: /* Enable change of Interrupt Vectors */ MCUCR = (1<<IVCE); /* Move interrupts to Boot Flash section */ MCUCR = (1<<IVSEL); Никакой реакции, все осталось как и было. Помогите пожалуйста, я уже не знаю что и предположить(((