Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб июл 26, 2025 13:48:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 77, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 08:51:31 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ВитГо писал(а):
Еще один вопрос а можно ли организовать чтение из программной памяти при помощи индексной индексации ?
а как же! чтение флеш осуществляется командой LPM,
которая в том числе имеет и вариант LPM Rd, Z+. для адресации используется регистровая пара Z

внимание! не для любых МК сие верно! смотрите хелп к ассемблеру - там все расписано.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 10:02:00 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ARV писал(а):
ВитГо писал(а):
Еще один вопрос а можно ли организовать чтение из программной памяти при помощи индексной индексации ?
а как же! чтение флеш осуществляется командой LPM,
которая в том числе имеет и вариант LPM Rd, Z+. для адресации используется регистровая пара Z

внимание! не для любых МК сие верно! смотрите хелп к ассемблеру - там все расписано.

Cтоп !!
А разве LPM Rd , Z+ это не чтение с постинкрементом ? - это не то... :-( я сейчас как раз ее и пользую... но при этой операции Z инкрементируется..
а мне нужно без инкремента прочитать по адресу Z+10

p.s. блин, наверное мегу я буду долго осваивать - а разве у AVR MEGA настолько разный набор команд ?!! где можно найти команды именно для меги64 ? (а то может там и команды деления есть ?!)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 10:06:02 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
а мне нужно без инкремента прочитать по адресу Z+10

LPM Rd, Z читает без постинкремента. У вас нет даташита на контроллер?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 10:36:24 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ploop писал(а):
Цитата:
а мне нужно без инкремента прочитать по адресу Z+10

LPM Rd, Z читает без постинкремента. У вас нет даташита на контроллер?


гм.. господа коты :-) у меня всего 78 сообщений на форуме, но вопрос я задал достаточно четко..

мне нужно прочитать данные из программной памяти используя индексную адресацию
аналог LDD Rd , X + s
где s - смещение адреса для чтения... если правильно помню 6-ти битовое...

про чтение из программной памяти
LPM Rd , X - косвенная адресация
LPM Rd , X - косвенная адресация и постинкремент указателя
я в курсе, знаю, уже использую.. вопросов в них у меня не возникло..

объясню зачем мне это нужно..
есть набор данных, данные это структура..
в X (Z, Y) у меня адрес первого байта структуры..
мне нужно считать 10ый байт структуры.. потом в зависимости от его значения, например, 5 или еще какой нить... и так далее..
Для этого удобно применять именно индексную адресацию, а не инкрементировать\декрементировать каждый раз указатель (X, Y, Z)..

сейчас, за неимением (не знанием как организовать) индексной адресации делаю как раз с движением указателя..
LDI r16, 10
LDI r17, 0
ADD XL , r16
ADC XH , r17
; в X указатель на 10ый байт..
но такой способ не удобен если указатель приходиться двигать вперед назад...
раскидать структуру по регистрам тоже не выход (структура около 20 байт) - все займу.. да и не получиться все равно (уже продумывал это)


p.s. кто может показать работающий код самопрограммирования программной памяти ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 10:53:49 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
сейчас, за неимением (не знанием как организовать) индексной адресации делаю как раз с движением указателя..
<...>
но такой способ не удобен если указатель приходиться двигать вперед назад...

Я например другого способа не знаю, может у меги 64 есть и другие возможности, но читать даташит за вас желания нет.
Не удобен в каком плане?
Обычно делается так:
1. Под число 0 можно отвести один из нижних регистров (т.к. используется постоянно)
2. Сложение двухбайтных чисел или регистровых пар выполнить макросом или подпрограммой (в зависимости от того, какая оптимизация нужна, по скорости или коду)
После этого, для движения указателя можно использовать такие конструкции:
LDI r16, 10
rcall load_byte

или в случае с макросом
load_byte 10 Rd


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 11:09:25 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ploop писал(а):
Я например другого способа не знаю, может у меги 64 есть и другие возможности, но читать даташит за вас желания нет.

почему нет? есть !!
просто я ничего в нем по своему вопросу не нашел.. но учитывая что я еще не большой спец. в программировании мег на асме - спросил...
ploop писал(а):
Не удобен в каком плане?
Обычно делается так:
1. Под число 0 можно отвести один из нижних регистров (т.к. используется постоянно)
2. Сложение двухбайтных чисел или регистровых пар выполнить макросом или подпрограммой (в зависимости от того, какая оптимизация нужна, по скорости или коду)
После этого, для движения указателя можно использовать такие конструкции:
LDI r16, 10
rcall load_byte

или в случае с макросом
load_byte 10 Rd


я именно так и делаю.. только процедура по другому называется.. но сути это не меняет..

указатель приходиться постоянно двигать.. да и время теряем (а оно нужно для вычислений)

просто когда то очень давно еще на Z80 была возможность индексной адресации - это было очень удобно при программировании работы с массивами или структурами...
в меге для RAM такие команды есть (LDD)... а вот для FLASH - с учетом того что никто ничего не подсказал - значит нет... (я это и сам увидел, просто надеялся что все таки не дочитал чего нить и меня общественность обрадует по этому вопросу)


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 12:04:31 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
к сожалению в АVRках есть только LPM LPM Rb,Z и LPM Rb,Z+ все...

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 12:14:27 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
GP1 писал(а):
к сожалению в АVRках есть только LPM LPM Rb,Z и LPM Rb,Z+ все...


угу :-(

а с самопрограммированием поможете ?

хочу некоторые переменные хранить где нить в программной памяти.. чтобы не расходовать еепром (эта память у меня все наперечет!)....

уже столько всего почитал про самопрограммирование но как то не складывается у меня "домик" :-(
есть работающий код ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:15:27 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6039
Откуда: Minsk
Рейтинг сообщения: 0
ВитГо писал(а):

а с самопрограммированием поможете ?


Во-во, и мне будет интересно почитать, а то как-то брался, сразу не получилось - бросил . Не очень-то тогда нужно было.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:26:53 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я так понимаю, это возможно только на МК с поддержкой бутлоадера? Тогда тоже интересно посмотреть...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:30:21 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
Jack_A писал(а):
Во-во, и мне будет интересно почитать, а то как-то брался, сразу не получилось - бросил . Не очень-то тогда нужно было.
ю ?

А вас на какой меге интересует ?
а то может быть соберем все что есть ?

я никак с областями RWW и NRWW не разберусь... :(
что где находиться и как задается (если задается вообще, а то может быть это жестко заданные области)

аа, и еще: внутри меги получается есть специальный буфер для самопрограммирования ? (его заполняют при помощи SPM) или этот буфер нужно выделять в RAM (или он сам выделяется?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:35:56 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ресурс программной flash ограничен всего 10000 записей, причем запись возможна только страницами с предварительным стиранием всей страницы. гораздо правильнее поставить внешнюю EEPROM (i2c или spi), чем маяться с заведомо неразумной идеей хранения промежуточных данных в программной flash.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:38:05 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
Вот табличка по размерам областей..
Тип меги Размер страницы (слов) размер NRWW (страниц)

Device Include file name Page size (words) NRWW section size (pages) Total memory (pages) SPM Control register
ATmega8 iom8.h 32 32 128 SPMCR
ATmega8515 iom8515.h 32 32 128 SPMCR
ATmega8535 iom8535.h 32 32 128 SPMCR
ATmega88 iom88.h 32 32 128 SPMCSR
ATmega16 iom16.h 64 16 128 SPMCR
ATmega162 iom162.h 64 16 128 SPMCR
ATmega163 iom163.h 64 16 128 SPMCR
ATmega165 iom165.h 64 16 128 SPMCSR
ATmega168 iom168.h 64 16 128 SPMCSR
ATmega169 iom169.h 64 16 128 SPMCSR
ATmega32 iom32.h 64 32 256 SPMCR
ATmega323 iom323.h 64 16 256 SPMCR
ATmega329 iom329.h 64 32 256 SPMCSR
ATmega3290 iom3290.h 64 32 256 SPMCSR
ATmega64 iom64.h 128 32 256 SPMCR
ATmega649 iom649.h 128 32 256 SPMCSR
ATmega6490 iom6490.h 128 32 256 SPMCSR
ATmega128 iom128.h 128 32 512 SPMCSR
ATmega128_1 iom128.h 128 32 512 SPMCSR


Для 64ой меги - 128 байт в одной странице
размер области NRWW 32 страницы
всего размер памяти 256 страниц..

теперь вопрос - а как задается конкретно адрес начала области NRWW ? (я правильно понимаю что код производящий запись в программную память должен находиться в этой области?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:41:11 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ARV писал(а):
ресурс программной flash ограничен всего 10000 записей, причем запись возможна только страницами с предварительным стиранием всей страницы. гораздо правильнее поставить внешнюю EEPROM (i2c или spi), чем маяться с заведомо неразумной идеей хранения промежуточных данных в программной flash.


а мы не будем там хранить промежуточные данные !
только итоговые :))

10000 раз это настолько много ! :-)) мне хватит !!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 13:58:34 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Так как запускать программы из ОЗУ не позволяет архитектура, то это единственный способ сделать самомодифицирующийся вирус для AVR :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 14:18:27 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
оо!! вот что еще нашел.. может быть чтото не совсем правильно, но пишу как понял

в общем у меги обычно действия по прошивке могут делать только из специальной области - области загрузчика (ну или Boot Loader Section)

далее, если нам нужен старт прошивки через загрузчик то мы должны поставить фюз BOOTRST в ноль.. если же там единица то старт будет с нуля..

для меня старт нужен обычный (без функций загрузчика), управление в область загрузчика я передам когда мне это будет нужно через CALL или JMP (это допустимо)

далее, размер секции загрузчика может быть измененем
для этого используются фюзы BOOTSZ1 и BOOTSZ0
для моей 64ой меги
Код:
BOOTSZ1 и BOOTSZ0  Размер Страниц память программ память загрузчика
1                 1                512         4      0000-7ВАА             7E00-7FFF
1                 0               1024        8      0000-7BFF              7C00-7FFF
0                 1               2048       16     0000-77FF              7800-7FFF
0                 0               4096       32     0000-6FFF              7000-7FFFF

Вроде тоже понятно.. пока размер кода не знаю, но предполагаю что килобайта хватит скорее всего BOOTSZ1=1 и BOOTSZ0=0 <- это фюзы !

есть еще определение областей RWW и NRWW - но там как то не очень укладывается все в голове...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 14:27:26 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
идем дальше..

у меги есть команда SPM - описание чтото вроде запись в память программ...
но на деле эта команда работает немного по другому..
по тем докам что я нашел SPM помещает данные в какой то буфер (внутри меги ?)

очень важен регистр SPMCR - он фактически является и флаговым (результат выполнения операций) и командным для операций программирования

Процесс самопрограммирования осуществляется постранично..
1. Заполняем временный буфер (внутри меги?) содержимым для программирования
2. Очищаем страницу
3. программируем буфером страницу..

P.s. блин, чую что сейчас я во всем разбирусь :-))) если кто знает о процессе и видит ошибки-я надеюсь укажите.. чтобы я экспериментами голову себе не сломал...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 14:57:29 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
1. Заполнение буфера..


в регистре Z адрес куда заслать пару. в регистровой паре R1:R0 два байта.. - в общем запись идет пословно.. вообще об этом нужно не забывать что адресация у нас пословная в программной памяти (я забываю иногда.. потом по 3-5 минут ищу откуда пошли глюки)

вот в этом месте непонятка.. вроде как адрес в Z нужно вносить байтный.. с нулевым значением младшего бита
Код:
ZL:
7 6 5 4 3 2 1 0
| | | | | | | +----- всегда ноль !
+-+-+-+-+-+-+---- адрес во временном (внутреннем) буфере


ZH как я понял в этот момент равен нулю (либо может быть его значение игнорируется?

наверное заполнение буфера будет выглядеть так
LDI YL , low (BUFF_TO_WRITE)
LDI YH , High(BUFF_TO_WRITE)
LDI ZL , 0 ;- cчетчик цикла и по совместительству адресный регистр
LDI ZH , 0 ;- кстати а что лучше LDI ZH, 0 или CLR ZH ?

Loop: ; цикл
LD r0, Y+
LD r1, Y+
SPM - заносим данные в буфер
INC ZL
INC ZL
CPI ZL , 0
BRNE Loop


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 15:27:24 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
2. Очистка страницы

в регистр Z записываем адрес страницы для стирания

я так понимаю что это будет регистр ZH (ZL=0)
LDI ZH , 0xA0
LDI ZL , 0

LDI SPMCR , 00000011
SPM

чтото вроде такого... (кто знает скажите !!)

3. Запись страницы
LDI ZH , 0xA0
LDI ZL , 0

LDI SPMCR , 00000101
SPM


наверное чтото такое :)
осталось вечером дома проверить..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср мар 16, 2011 15:32:48 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
(кто знает скажите !!)

Все наблюдают за увлекательным квестом. Продолжайте :)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 77, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y