Приветствую!
Давно пользуюсь этим загрузчиком на Mega128.
http://www.atmel.com/Images/doc2541.pdf Работает чётко всем советую. Нужда заставила связаться с AT90CAN128. Решил сделать загрузчик для этого чипа. Этот загрузчик очень старый. На момент его выхода ещё не существовало AT90CAN128. Загрузчик был написан для IAR v2.28. Когда я его перенёс на IAR v6.4 транслятор выдал ощибку на ассемблеровскую инструкцию espm. И действительно не у AT90CAN128 не у Mega128 такой команды нет. Получается, что espm - это макрос, который знает IAR v2.28, но не знает IAR v6.4. В инклудах траслятора я этот макрос не нашёл. Ниже кусок кода, где этот макрос используется.
CODE
spmSPM:
movw r31:r30, r17:r16
rcall spmWait
in r20, SREG
cli
#ifdef __RAMPZ__
in r21, RAM_PZ
out RAM_PZ, r18
#endif
#ifdef __MEMSPM__
sts SPMREG, r22
#else
out SPMREG, r22
#endif
#ifdef __RAMPZ__
espm
#else
spm
#endif
У меня __MEMSPM__ включено, так как памяти больше, чем 64к. Ума не могу приложить что может делать этот макрос, помимо (вместо команды SPM). Единственно, чем он может отличать от spm - это выбором страницы, но это сделано выше out RAM_PZ, r18. Пробовал перехитрить судьбу. Решил взять проект Mega128 и забить адреса всех регистров AT90CAN128. Процесс загрузки идёт, но в память ничего не записывается. Значит заковырка именно в этом макросе. А именно обращение к какому-то регистру, ответственному за запись в память.
Заранее благодарен!
Сообщение отредактировал IgorKossak - Apr 27 2016, 19:16