Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вектора прерываний в области загрузчика
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
IEC
Прошу прощения за вопрос, но чего-то я не понимаю!
Пытаюсь на Mega128 переместить векторы прерываний в область загрузчика,
но никак не получается.
Есть программа, которая работает с прерываниями таймера, которые расположены в нормальном месте tongue.gif
Установка в регистре MCUCR битов IVCE IVSEL в требуемом порядке ни к чему не приводит cranky.gif
Т.Е. преывания как обрабатывались, так и обрабатываются!
По логике.камень должен был улететь. Или я не прав?
MALLOY2
а прога в прерывании работает или нет, я к тому что улетать он не улетает потомучто там может стоять команда RETI так многие компиеры далают.
IEC
По HEX-файлу нет там ничего. Да и прерывание обрабатывается правильно!
Значит попадает на старый вектор.
Olegovich
Цитата(IEC @ Jul 23 2005, 10:34)
Прошу прощения за вопрос, но чего-то я не понимаю!
Пытаюсь на Mega128  переместить векторы прерываний в область загрузчика,
но никак не получается.
Есть программа, которая работает с прерываниями таймера, которые расположены в нормальном месте  tongue.gif 
Установка в регистре MCUCR битов IVCE IVSEL в требуемом порядке ни к чему не приводит cranky.gif
Т.Е. преывания как обрабатывались, так и обрабатываются!
По логике.камень должен был улететь. Или я не прав?
*


Вопрос - а разве вектора прерываний должны работать в области загрузчика? Может, меня клинит, но по-моему, их там нет, только BootReset вектор.
AlexOr
Olegovich
Меня клинит аналогично.
IEC
УПС sad.gif
Тогда вопрос, а зачем нужны славные флаги IVCE IVSEL в регистре MCUCR?
IEC
Да ГОСПОДА!
Результат весьма и весьма интересен!!!
1. Народ не любит работать с прерываниями
2. Народ не хочет иметь дело с загрузчиками.
3. 1 и 2 совместно.

Как факт загрузчик я написал, но получилось криво.
Считаю, что обработка УАПП без прерываний - это плохо!!!

Если ответов нет, значит загрузчики пишут без обработки прерываний - это хреновато!!!
Olegovich
Цитата(IEC @ Aug 1 2005, 13:06)
Да ГОСПОДА!
Результат весьма и весьма интересен!!!
1. Народ не любит работать с прерываниями
2. Народ не хочет иметь дело с загрузчиками.
3. 1 и 2 совместно.

Как факт загрузчик я написал, но получилось криво.
Считаю, что обработка УАПП без прерываний - это плохо!!!

Если ответов нет, значит загрузчики пишут без обработки прерываний - это хреновато!!!
*


Лично я обожаю работать с прерываниями, когда писал на асме, иногда вообще основного тела программы не было... :-)
Но в загрузчике вполне можно обойтись без прерываний... И в нашей фирме загрузчики очень активно используются. Без прерываний.

2IEC:
Кстати, а что всё-таки с этим самым прерыванием, у него есть вектор в области загрузчика и только у этого прерывания есть вектор? Вы выяснили?
IEC
С прерываниями я не разобрался. Оставил проблему на потом!
А без прерываний написать можно, что и было сделано.
Просто я подумал, может кто-нибудь уже с этим сталкивался и все заработало.
Приятно осозновать, что у кого-то уже работает!
DiaS
А конфигурационные биты кристала BootRST шевелили?
IEC
Устанавливал!!
Есть мысль:
пишу программу на IAR, весь программный код заношу начиная с адреса 0f000h (кончигурация области загрузчика на 4кБ), записываю в м128 и считываю - программный код начинается с этого же адреса, но памяти в нем 1ffffh!!! Как я понимаю, что должен находиться в верхней области флеша. Тогда я установил адрес начала загрузчика на 1f000h. Все работает, кроме векторов прерываний. Сейчас уже возникла мысль: наверное неверно установл адрес начала загрузчика. По сбросу вектор прерывания передается верно, а потом пошагово доходит до моей программы и она начинает выполнение.
По этому поводу вопрос: Какой адрес начала загрузчика надо было поставить?
Если из всего объема флеша вычесть 4кБ, тогда получается адрес должен быть 1efffh! Почему-то не совпадает с описанием на камень.
IEC
"Докладаю: чуть заря, Федя отбыл за моря..." (классика)

Уф! Я его сделал (во всех смыслах)!
Результаты следующие(может кому будут интересны):
1. Все адреса в описании даются в кило-словах, а не кило-байтах. Соответственно надо загрузчик располагать с адреса *2. В моем случае 0F000h*2=1E000h!!!
2. Для тех кого клинит (см. выше) сообщаю, что перенос векторов обработки прерываний в область загрузчика есть (они не могут ни есть)! Для этого мне пришлось не идти по пути, предложенному разработчиками, а написать немного иначе:
MCUCR=0x01;
MCUCR=0x02;
3. Для того, чтобы запись флеша производилась в нижнюю область памяти пришлось принудительно установить флаг работы с ней (почему-то по умолчанию не захотел):
RAMPZ=0x00

Если результаты моих изысканий кому-нибудь помогут - очень рад!
Кто все это значет - жаль, что не помогли раньше! Время борого!!!
skopus
Цитата(IEC @ Aug 4 2005, 11:36) *
1. Все адреса в описании даются в кило-словах, а не кило-байтах. Соответственно надо загрузчик располагать с адреса *2. В моем случае 0F000h*2=1E000h!!!


очень ценное наблюдение! Всю голову сломал - пытался понять почему векторы прерываний из даташита меги128 не совпадают с векторами, которые генерит IAR MakeApp
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.