Доброго времени суток!
Взял bootloadHID.2012-12-08 портировал на Atmel Studio, чуть поправив некоторые неточности (особенно убило, что ошибка с #include "usbdrv.с" встречается во многих сторонних проектах и никто не правит это на #include "usbdrv.h"), единственное что смущает - есть функции с обьявлением USB_PUBLIC - а дальше если посмотреть, то это просто #define USB_PUBLIC static (более того, в другом файле просто стоит #define USB_PUBLIC без переназначения) - так вот, со static не компилировалось - убрал, все отлично.
Закоментил эти строки, скомпилировал еще раз и ...
//GICR = (1 << IVCE); /* enable change of interrupt vectors */
// GICR = (1 << IVSEL); /* move interrupts to boot flash section */
Залил в Atmega168PA с фьюзами как на скрине - определяется без проблем, утилита тоже видит девайс и даже типа заливает прошивку (но понятное дело она не заливает, ибо у нас не загрузчик, а просто как обычная прошивка, т.к. адрес начинается с 0х0 и сам в себя он не пишет) окей, значит теперь надо просто переместить наш загрузчик в памяти и что б заливалось корректно.
Добавляю в линковщик следующую строку и откоментируем те 2 строки, что разрешают перенос прерываний в область загрузчика:
-Wl,--section-start=.text=0x1c00
компилируем, в прошивке теперь адрес начинается с 0х1с00:
:101C00000C94720E0C94AA0E0C948F0E0C948F0EE2
:101C10000C948F0E0C948F0E0C948F0E0C948F0ED0
:101C20000C948F0E0C948F0E0C948F0E0C948F0EC0
.....
все верно!
Прошиваем в МК и тут же читаем, смотрим в прочитанный хекс, начало:
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
...
ну и наша прошивка на верном месте с адреса 0х1с00.
НО, она не работает.
Если быть точным, она запускается (проверял методом что PD3 дергал) и далее на чем то застопоривается, вывод PD1 почему то постоянно в 0 выставляется и все. Я предположил что то с прерываниями на новой серии МК - PA в конце. Ну да ладно думаю протестирую ка на старой atmega32A (что нашлось в загашнике с USB схемой) - чуть подредактировал прошивку, сначала проверил что с 0го адреса она стартует и корректно работает, далее провел модификацию для режима бутлоадера (сменил адрес на соотв. бутлоадеру 32й меге), прошил и тоже самое......
Я уже не знаю что не так. Пробовал портировать разные проекты от других людей, все компилируется и не работает схожим образом. Я что то упустил ? я далеко не хороший программист, помогите, кто сталкивался...что тут не так ?
Проект прикладываю так же.