mike20 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба При работе с Atmega128L cтолкнулся с такой проблемой: 1. При BOOTRST=0 Atmega128L стартует с адреса 0000, а не с 0f000 - как хотелось бы. Если делаю JMP 0f000 (команда находится по адресу 0000) на код размещенный с адреса 0f000 , то программа стартует и выполняется (если прерывания запрещены) 2. Если вектра прерывания и код размещаю с адреса 0f000 (в BootLoader-е), то при первом же прерывании Atmega128L уходит на Reset и начинает выволняться с адреса 0000, (IVSEL=1). 3. Если вектра прерывания размещаю с адреса 0000, а код размещаю с адреса 0f000 (в BootLoader-е) то прерывания обрабатываются нормально (IVSEL=0). Использую компилятор IAR C/C++ Compiler for AVR 4.10B/W32 [Evaluation] (4.10.2.3) Программирую Atmega128 программой AvReal ver1.25rev3 (через Xilinx-Parallel Cable III). Fuse биты следующие: CKOPT=0,CKSEL=F,SUT=3,BOOTRST=0,BOOTSZ=0,WDTON=0,M103C=1,BODEN=0,BODLEVEL=1, BLB0=3, BLB1=3,OCDEN=1,JTAGEN=0,EESAVE=1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleks17 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Как-бы читайте даташиты, что ещё сказать. Чтобы перенести вектора прерываний в область загрузчика надо в программе (загрузчике то бишь) выполнить последовательсность MCUCR=1, MCUCR=2. По поводу старта с нулевого адреса: где-то видимо ошибка. Убедитесь что BOOTRST = 0 (прошит) и размер бута верно задан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться