реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> mega48 и INT0, Не пойму в чем дело!
alux
сообщение Jun 27 2006, 08:08
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Ситуация тупая до безобразия... Сделал проект на меге48 с бутлодером. Так как у м48 нет отдельного загрузчика, сделал так. По сбросу делаю rjmp boot_start в последние 512 байт памяти. Там по нажатию на кнопку определяю, что делать: запускать пользовательскую программу или ждать команд от компьютера. Все работает с песней. Пишу, стираю, читаю. Теперь надо добавить обработчик внешнего прерывания. Все сделал как положено. Настроил внешнее прерывание INT0 по фронту. Разрешил его. Указал вектор .org INT0addr rjmp metka . Программа перестала работать(или работать не так как надо) Кстати, в симуляторе (AVRStudio) все работает как положено. Не могу понять в чем дело. В обработчике ничего не делаю! Исчерпал все варианты. Помогите, пожалуйста.
java script:emoticon(':help:', 'smid_14')
help.gif
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 27 2006, 08:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Проверять железо, дребезг, подтяжка итп.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Shurmas
сообщение Jun 27 2006, 08:20
Сообщение #3


Местный
***

Группа: Новичок
Сообщений: 232
Регистрация: 24-06-06
Пользователь №: 18 332



Цитата(alux @ Jun 27 2006, 12:08) *
в симуляторе (AVRStudio) все работает как положено. Не могу понять в чем дело. В обработчике ничего не делаю! Исчерпал все варианты. Помогите, пожалуйста.


проверьте в симуляторе VMLAB.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 27 2006, 09:06
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Проверять железо, дребезг, подтяжка итп.


Вывод INT0 настроен на вход, пулап подключен. К выводу ничего не подключено. Как может вставка вектора прерывания ИНТ0 повлиять на программу?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 27 2006, 09:18
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Как может вставка вектора прерывания ИНТ0 повлиять на программу?

При определенных условиях, но это маловероятно.
На чем пишите? И плз критичные места кода в студию( в т.ч. инит и обработчик прерывания).


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 27 2006, 09:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Появилась версия...
В бутлодере я использовал в качестве DEV_CODE = 0x77 (Mega8 boot) Может в этом проблема?
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 27 2006, 09:46
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(beer_warrior @ Jun 27 2006, 12:18) *
Цитата
Как может вставка вектора прерывания ИНТ0 повлиять на программу?

При определенных условиях, но это маловероятно.
На чем пишите? И плз критичные места кода в студию( в т.ч. инит и обработчик прерывания).



Прилагаю код
Прикрепленные файлы
Прикрепленный файл  boot48.txt ( 19.01 килобайт ) Кол-во скачиваний: 163
 
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Jun 27 2006, 10:26
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Цитата(alux @ Jun 27 2006, 11:08) *
... Указал вектор .org INT0addr rjmp metka .


Сталкивался с тем, что RJMP-у не хватает адресных возможностей перескочить доступную память sad.gif
Команде "jmp" (она дальше "прыгает") тоже может возможностей не хватить.

"Развесьте" метки по пространству адресов через малые промежутки, вместо "rjmp metka" сделайте
"rjmp m1", оттуда "rjmp m2"..."rjmp metka" и посмотрите - не заработает ли.
Или вспоминайте команду перехода на физический конкретный адрес в начало, а оттуда "rjmp",
но в любом случает почитайте в ПОЛНОМ даташите про команды переходов smile.gif

Удачи cheers.gif


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 27 2006, 10:29
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(GeorgyBey @ Jun 27 2006, 13:26) *
Сталкивался с тем, что RJMP-у не хватает адресных возможностей перескочить доступную память sad.gif
Команде "jmp" (она дальше "прыгает") тоже может возможностей не хватить.

Однозначно хватит возможностей rjmp.
Речь идёт об ATmega48.
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jun 27 2006, 10:30
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Была аналогичная проблема. Дело оказалось в том, что случайно переключил формат выходного hex файлв в Intel Exdended вместо Intel Standard. Разница в том, что в перы=вом случае в начале файла присутствуют доп. 2 байта. А загрузчик этого не учитывал. Вот все вектора и сдвигались. Проверьте формат выходного файла.
Go to the top of the page
 
+Quote Post
serg_am
сообщение Jun 27 2006, 11:53
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 17-12-04
Из: С.-Петербург
Пользователь №: 1 516



Может быть у тебя происходит вызов прерывания во время чтения/записи в еепром?
попробуй разрешать прерывания после завершения цикла чтения/записи...
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 27 2006, 11:55
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Sergio66 @ Jun 27 2006, 13:30) *
Была аналогичная проблема. Дело оказалось в том, что случайно переключил формат выходного hex файлв в Intel Exdended вместо Intel Standard. Разница в том, что в перы=вом случае в начале файла присутствуют доп. 2 байта. А загрузчик этого не учитывал. Вот все вектора и сдвигались. Проверьте формат выходного файла.


Интересная мысль! Но почему тогда обработчик по совпадению таймера работает без проблем?
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 27 2006, 12:13
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Повторяю. Может ли быть проблема в том , что в бутлодере я использовал в качестве Device_Type = 0x77 (Mega8 boot) для меги48? И кстати, какой родной DT для mega48? Для загрузки пользуюсь AVROSP (avr911)
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jun 27 2006, 12:41
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(alux @ Jun 27 2006, 15:55) *
Цитата(Sergio66 @ Jun 27 2006, 13:30) *

Была аналогичная проблема. Дело оказалось в том, что случайно переключил формат выходного hex файлв в Intel Exdended вместо Intel Standard. Разница в том, что в перы=вом случае в начале файла присутствуют доп. 2 байта. А загрузчик этого не учитывал. Вот все вектора и сдвигались. Проверьте формат выходного файла.


Интересная мысль! Но почему тогда обработчик по совпадению таймера работает без проблем?

Обработчик таймера (точнее JAMP) может попадать на пространство, заполненное 0 (NOP) и "добегать" по ним до нужного кода.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jun 27 2006, 15:04
Сообщение #15


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(alux @ Jun 27 2006, 16:13) *
И кстати, какой родной DT для mega48?

ATmega48 Signature Bytes
1. 0x000: 0x1E (indicates manufactured by Atmel).
2. 0x001: 0x92 (indicates 4KB Flash memory).
3. 0x002: 0x05 (indicates ATmega48 device when 0x001 is 0x92).

Что за девайс type такой 0x77? (я правда не знаю)
Ваша проблема наверняка в загрузчике. Пробовали прошивать программу без него?
Как-то Вы сумбурно описали алгоритм его работы. До конца не понятно что значит работает на ура. в пробовали считать флешку у контроллера с неработающей программой и сверить с тем что там должно находится на самом деле?

У меня для 48 было такое решение. В начале прошивки находится прыжок на старт программы. Он подменялся на прыжок к старту загрузчика. Плюс в прошивке по определнному адресу, скажем 0080h размещается прыжок на старт основной программы.
В этом случае контроллер при старте попадает на загрузчик. Загрузчик при необходимости старта основной программы делает абсолютный прыжок по адресу 0080h.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.02679 секунд с 7
ELECTRONIX ©2004-2016