|
|
  |
mega48 и INT0, Не пойму в чем дело! |
|
|
|
Jun 27 2006, 15:46
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(SpiritDance @ Jun 27 2006, 18:04)  Цитата(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). device codes ;* ;* DESCRIPTION ;* The following device codes must be used by the host computer. Note ;* that the device codes are arbitrary selected, they do not have any ;* thing in common with the signature bytes stored in the device. ;* This are the device Codes recognized by the AVRprog Software. Some ;* Devices may require special hardware or a different, not yet ;* implemented Protocol! Use at your own risk. Используется AVRProg и AVROSP Цитата(SpiritDance @ Jun 27 2006, 18:04)  Цитата(alux @ Jun 27 2006, 16:13)  У меня для 48 было такое решение. В начале прошивки находится прыжок на старт программы. Он подменялся на прыжок к старту загрузчика. Плюс в прошивке по определнному адресу, скажем 0080h размещается прыжок на старт основной программы. В этом случае контроллер при старте попадает на загрузчик. Загрузчик при необходимости старта основной программы делает абсолютный прыжок по адресу 0080h. Как-то закручено. Мой вариант проще. Цитата(SpiritDance @ Jun 27 2006, 18:04)  Цитата(alux @ Jun 27 2006, 16:13)  Ваша проблема наверняка в загрузчике. Пробовали прошивать программу без него? Попробую сегодня вечером. Думаю, Sergio66 прав.
|
|
|
|
|
Jun 29 2006, 07:09
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(SpiritDance @ Jun 27 2006, 20:15)  Цитата(alux @ Jun 27 2006, 19:46)  Как-то закручено. Мой вариант проще.
Вам конечно виднее. А я вот как раз не понял как ваш вариант прыгает на основную программу. Все! Нашел!!! Кратко объясню еще раз, в чем суть проблемы. Для меги48 написал бутлодер. Он размещен в последних 512байт памяти. Да, кстати метка boot_start действительно стояла перед директивой .org BOOTLOADER. Исправил.Но это не критично. По сбросу МК rjmp boot_start. Если во время сброса кнопка PINC, 5 была нажата, то переход в режим программирования. Если нет, то переход к инициализационной части основной программы (rjmp init). Вот здесь начинается интересное. Бутлодер запрограммировал при помощи avreal. Когда сравнил hex-файлы исходника и прочитанного через бутлодер, выяснилось, что бутлодер не правильно вычислил переход к метке init. AVROSP (host-программа для управлением бутлодером) использует расширенный формат hex-файла. А avreal отсекает все лишнее. Поэтому имеем смещение init -2 байта. Проблема решается довольно просто. Инициализацию разместил сразу за таблицей векторов прерываний. И метку init закрепить конкретным адресом директивой .org $01a . Все!!! Всем спасибо . Отдельное человеческое спасибо Sergio66 и SpiritDance.
|
|
|
|
|
Jul 3 2006, 13:04
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(defunct @ Jun 29 2006, 22:29)  Действительно. Ничего не понятно.
Откуда взялось прерывание. И зачем оно там вообще нужно? Прерывание использует бутлоадер? Если да то работать не будет, в M48 нет режима Read-While-Write.
ps: когда кажется, что проблема решена, так это только кажется ;> Что не понятно? Бутлодер не использует никаких прерываний. Это же видно из приводимого кода. Во время программирования прерывания запрещены (см. код) Цитата(defunct @ Jun 29 2006, 22:29)  Тип бутлоадера M8 может не подойти, по указанной выше причине (M48 - не поддерживает Read-While-Write и вектора прерываний у него всегда в нижней области Flash, не забывайте у чипа всего 4k флеша). Тип бутлодера прекрасно подошел. И я не вижу никаких проблем. Читаю, стираю, пишу, обратно читаю. И главное - все работает как задумано!  Какие еще нужны доказательства?
|
|
|
|
|
Jul 10 2006, 15:21
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

|
Цитата(IgorKossak @ Jun 27 2006, 13:29)  Цитата(GeorgyBey @ Jun 27 2006, 13:26)  Сталкивался с тем, что RJMP-у не хватает адресных возможностей перескочить доступную память Команде "jmp" (она дальше "прыгает") тоже может возможностей не хватить. Однозначно хватит возможностей rjmp. Речь идёт об ATmega48. А как объяснить?!: D:\...asm(531): error: Relative branch out of reach
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Jul 11 2006, 12:34
|

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

|
Цитата(GeorgyBey @ Jul 10 2006, 18:21)  А как объяснить?!: D:\...asm(531): error: Relative branch out of reach Приведите здесь эту самую строку (531) и посмотрите внимательно на размер флеши в настройках (*.h, *.inc, *.xcl в зависимости от среды). Судя по исходным данным: 1. Device ATmega48 Flash 4K Bytes 2. RJMP - Relative Jump Description: Relative jump to a address within PC - 2K + 1 and PC + 2K (words). For AVR microcontrollers with Program memory not exceeding 4K words (8K bytes) this instruction can address the entire memory from every address location. Т. е. возможности RJMP перекрывают пространство кода ATmega48 вдвое.
|
|
|
|
|
Jul 12 2006, 10:46
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

|
Цитата(IgorKossak @ Jul 11 2006, 15:34)  Цитата(GeorgyBey @ Jul 10 2006, 18:21)  А как объяснить?!: D:\...asm(531): error: Relative branch out of reach
Приведите здесь эту самую строку ... Вообще-то я немного слукавил НО, начиная работать с Тини26 сначала наткнулся на то что УСЛОВНЫЕ переходы очень недалеко "скачут", и приходится прыгать на метку с rjmp, а оттуда куда надо А когда из прерывания rjmp-нул в конец программы (всего-то 53% памяти) на обработчик этого прерывания то и не допрыгнул! Сделал за два прыжка - нет проблем, за один - фигвам! Перенес обработчик в начало, о подпрограммы поближе к вызовам и проблемы исчезли А пишу в АСМе
--------------------
На "нет" и "нах" :)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|