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

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


Знающий
****

Группа: Свой
Сообщений: 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 прав.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jun 27 2006, 17:15
Сообщение #17


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

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



Цитата(alux @ Jun 27 2006, 19:46) *
Как-то закручено. Мой вариант проще.

Вам конечно виднее. А я вот как раз не понял как ваш вариант прыгает на основную программу.


--------------------
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
singlskv
сообщение Jun 27 2006, 17:22
Сообщение #18


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(alux @ Jun 27 2006, 19:46) *
.cseg
boot_start:

.equ DT = 0x77 ; Device Type = 0x77 (ATmega8boot)
.........

.equ BOOTSIZE = 256 ; Note: Word address
.equ BOOTLOADER = (FLASHEND+1)-BOOTSIZE ; $0800-$0100=$0700

.org BOOTLOADER ; ($0700)BootStart. Block size is 512B

sbic PINC, 1 ;Если кнопка PROG нажата во время сброса, то
rjmp init ;Переход к программе пользователя


А это нормально что "boot_start:" идет до ".org BOOTLOADER" ?
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 29 2006, 07:09
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 29 2006, 19:29
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Действительно. Ничего не понятно.

Откуда взялось прерывание. И зачем оно там вообще нужно?
Прерывание использует бутлоадер? Если да то работать не будет, в M48 нет режима Read-While-Write.

Опишите задачу более точно. К чему именно относится прерывание к бутлоадеру или к основной программе. Запрещены ли прерывания в момент записи. Тип бутлоадера M8 может не подойти, по указанной выше причине (M48 - не поддерживает Read-While-Write и вектора прерываний у него всегда в нижней области Flash, не забывайте у чипа всего 4k флеша).

ps: когда кажется, что проблема решена, так это только кажется ;>
Go to the top of the page
 
+Quote Post
alux
сообщение Jul 3 2006, 13:04
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 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 флеша).


Тип бутлодера прекрасно подошел. И я не вижу никаких проблем. Читаю, стираю, пишу, обратно читаю. И главное - все работает как задумано! smile.gif Какие еще нужны доказательства?
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 3 2006, 14:17
Сообщение #22


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

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



Цитата(alux @ Jul 3 2006, 17:04) *
Какие еще нужны доказательства?

Напишите программу на С и попробуйте загрузить вашим бутлоадером. smile.gif


--------------------
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
alux
сообщение Jul 5 2006, 07:02
Сообщение #23


Знающий
****

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



Цитата(SpiritDance @ Jul 3 2006, 17:17) *
Цитата(alux @ Jul 3 2006, 17:04) *

Какие еще нужны доказательства?

Напишите программу на С и попробуйте загрузить вашим бутлоадером. smile.gif


А смысл? Я наоборот перевел с Си на Асм. И все работает. Проверено на трех устройствах. Кстати тини2313 тоже программируется с небольшими изменениями через этот же будлодер. Вопрос считаю закрытым.
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Jul 10 2006, 15:21
Сообщение #24


Местный
***

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



Цитата(IgorKossak @ Jun 27 2006, 13:29) *
Цитата(GeorgyBey @ Jun 27 2006, 13:26) *

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

Однозначно хватит возможностей rjmp.
Речь идёт об ATmega48.


А как объяснить?!:
D:\...asm(531): error: Relative branch out of reach


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 11 2006, 12:34
Сообщение #25


Шаман
******

Группа: Модераторы
Сообщений: 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 вдвое.
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Jul 12 2006, 10:46
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 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

Приведите здесь эту самую строку ...


Вообще-то я немного слукавил wink.gif wub.gif
НО, начиная работать с Тини26 сначала наткнулся на то что УСЛОВНЫЕ переходы очень недалеко "скачут", и приходится прыгать на метку с rjmp, а оттуда куда надо angry.gif
А когда из прерывания rjmp-нул в конец программы (всего-то 53% памяти) на обработчик этого прерывания то и не допрыгнул! Сделал за два прыжка - нет проблем, за один - фигвам! Перенес обработчик в начало, о подпрограммы поближе к вызовам и проблемы исчезли smile.gif
А пишу в АСМе cheers.gif


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 12 2006, 11:31
Сообщение #27


Шаман
******

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



Цитата(GeorgyBey @ Jul 12 2006, 13:46) *
А пишу в АСМе cheers.gif

Если пишете под AVRStudio, то там в опциях ассемблера Project\Assembler options есть такая фича - Wrap Relative Jumps.
Попробуйте поэкспериментировать.
Go to the top of the page
 
+Quote Post

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

 


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


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