Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ВитГо »

ploop писал(а):
(кто знает скажите !!)

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


Не хорошо издеваться над только что вставшим на ноги :-))

Ладно, продолжать уже нечего..
вечером попробую и если общественности будет интересно расскажу что получилось.. :-)

p.s. надеюсь мега в моей железке не умрет от моих неправильных действий... :-)
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

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


Точно! Видно, у нас одинаковые головы :)) Каждое слово порознь понимаешь, а пото'м - в балде туман.

Авось, достучимся до какого-нить гуру. Вот Саша ( avreal ) - большой дока, но что-то не появляется.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

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


Если x + S у Вас подразумевается, как неизменная константа, то проще так:

Код: Выделить всё

LPM Rd, Z
adiw Z, S ;Где S=Значение от 0x00 до 0xFF

К примеру:

Код: Выделить всё

LPM r16, Z
adiw Z, 0x0A ;Теперь содержимое пары увеличилось на Z+10


Если конечно я Вас понял.
I am DX168B and this is my favourite forum on internet!
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ВитГо »

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



Если конечно я Вас понял.


нет.. не правильно.. после выполнения операции чтения Z должен остаться прежним..

ладно, вопрос снят.. такой команды нет...
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Ну такого конечно нет. Для этого надо инициализировать пару на начало массива, потом к ней прикладывать число, сохранённое в регистре. После операции снова нужна инициализация пары. Я работал с двумя массивами, когда писал парсер для расшифровки символов CP1251, можно сказать одновременно. Положение по массиву сохранял в отдельных регистрах, которые потом складывал к паре при выполнении операций. Только так. :)
Ну ладно, раз вопрос снят, значит снят. На счёт программирования FLASH, я сам бы почитал, так как как-то пытался это реализовать, не понял до конца и забросил, в виду ненадобности.
ploop писал(а):Так как запускать программы из ОЗУ не позволяет архитектура, то это единственный способ сделать самомодифицирующийся вирус для AVR :))

:))) :))) :))) :))) :)))
Из восьмибитных не знаю, кто так умеет, но знаю, что старый ЗЫ80 это умеет, если вместе с ПЗУ ему подключить чип SRAM. Причём линию CS чипа посадить на линию MREQ процессора.
Когда я мало знал его инструкций, я сажал RAM через триггер с линиями IORQ и MREQ. :)))

P.S. Этот процессор никогда не умрёт среди контроллеров.
Даже самая мощная МЕГА не идёт с ним ни в какое сравнение, разве что, архитектура RISC.
I am DX168B and this is my favourite forum on internet!
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ВитГо »

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

думаю сегодня вечером добью... завтра выложу..

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

код кстати очень компактный.
orion777
Родился
Сообщения: 14
Зарегистрирован: Пн сен 29, 2008 23:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение orion777 »

Может подскажете новичку в чём дело. Нашел такую вот штуку:
http://elm-chan.org/works/vp/report.html
Снизу есть архив с прошивками (hex и asm). Установил winavr и AVR Studio 4.18. Захожу в студию - hex она открывает, а на asm ругается типо файл поврежден и т.п. Тогда я просто открыл asm в блокноте, скопировал код в Atmel AVR assembler. К примеру:

Код: Выделить всё

;----------;
; Wow moduration (+-25%, 10Hz)
;----------;
; Note1: ATtiny26 @16MHz

.include "tn26def.inc"   ; This file is contained in "AVR Family Assembler".
.include "avr.inc"
.include "vp_def.inc"


;----------;
; Program code

.cseg

   outi   SP, RAMEND
    rcall   init_io

   clrw   T2      ;Write ptr

   ldiw   Y, -10000   ;Read ptr
   clr   T0H      ;Fraction of read ptr

   ldiw   Z, sin*2   ;Moduration table (sin)
   clrw   D      ;/


;----------;
; Main loop (38.5kHz)

main:
   RFSH2
   XFER
   push   AL

   movew   X, Y      ;Read data from FIFO
    rcall   read_ram   ; BH = *rp; AH = *rp+1;
   mov   BL, AH      ;
   adiw   XL, 1      ;
    rcall   read_ram   ;/
   mov   AL, AH
    rcall   interpolation

   pop   AL      ;Store data into FIFO
   movew   X, T2      ; *wp = new sample;
    rcall   write_ram   ;/

   lpm   BL, Z      ;Get read-out frequency
   adiw   ZL, 1      ;
   lpm   BH, Z      ;
   sbiw   ZL, 1      ;
   subi   DL, 16      ;
   brcc   PC+6      ;
   adiw   ZL, 2      ;
   inc   DH      ;
   brne   PC+3      ;
   ldiw   Z, sin*2   ;/

   dec   BH   ;Mod +-50% --> +-25%
   asrw   B   ;
   inc   BH   ;/

   add   T0H, BL      ;Next read pointer
   adc   YL, BH      ; Y:T0L += B;
   adc   YH, _0      ;/

   sub   T2L, _255   ;Next write pointer
   sbc   T2H, _255   ;/ T2++;

   rjmp   main



1) Так вот .include "avr.inc" .include "vp_def.inc" он не находит, скачать в нете такие файлы тоже не получилось - не нашел!

2) Во всех програмках этого проекта есть такие строки:
outi SP, RAMEND

На outi SP он ругается что не знает что это такое, а я ему тоже помочь не могу т.к. такого сам не знаю.

Подскажете что это за ошибки такие!?
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Это команды-макросы.
orion777
Родился
Сообщения: 14
Зарегистрирован: Пн сен 29, 2008 23:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение orion777 »

akl писал(а):Это команды-макросы.

Порядок, vp_def тоже нашел
Вложения
VP_DEF.rar
(1.06 КБ) 215 скачиваний
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Самопрограммирование

Сообщение ВитГо »

Как обещал даю работающий код для самопрограммирования atmega64
запись возможна в область RWW
как настраивать фюзы - смотрите в моих сообщених позавчера.
я поставил BOOTSZ1=1 и BOOTSZ0=1 (в программе моего программатора это ПУСТЫЕ клеточки без галочки)..
так же фюз управляющий вектором RESET оставил прежним (старт с 0x0000)
в модуль самопрограммирования обращаюсь вызовом CALL

в файле все немного комментировал..

Настройки для меги 64 взяты из m64def.inc файла приведены ниже..

Код: Выделить всё

; ***** BOOTLOADER DECLARATIONS ******************************************
.equ   NRWW_START_ADDR   = 0x7000
.equ   NRWW_STOP_ADDR   = 0x7fff
.equ   RWW_START_ADDR   = 0x0        ;  область в которую можем записывать
.equ   RWW_STOP_ADDR   = 0x6fff     ;
.equ   PAGESIZE   = 128                        ; размер буфера в словах !!
.equ   FIRSTBOOTSTART   = 0x7e00   ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами
.equ   SECONDBOOTSTART   = 0x7c00
.equ   THIRDBOOTSTART   = 0x7800
.equ   FOURTHBOOTSTART   = 0x7000
.equ   SMALLBOOTSTART   = FIRSTBOOTSTART
.equ   LARGEBOOTSTART   = FOURTHBOOTSTART

; ***** BOOT_LOAD ********************
; SPMCSR - Store Program Memory Control Register
.equ   SPMCR   = SPMCSR   ; For compatibility
.equ   SPMEN   = 0   ; Store Program Memory Enable
.equ   PGERS   = 1   ; Page Erase
.equ   PGWRT   = 2   ; Page Write
.equ   BLBSET   = 3   ; Boot Lock Bit Set
.equ   RWWSRE   = 4   ; Read While Write section read enable
.equ   ASRE   = RWWSRE   ; For compatibility
.equ   RWWSB   = 6   ; Read While Write Section Busy
.equ   ASB   = RWWSB   ; For compatibility
.equ   SPMIE   = 7   ; SPM Interrupt Enable

Пример использования

Код: Выделить всё

;+----------+
;|   Примеры использования вызовов модуля  |
;+----------+
; Запишем буфер DEBUG_BUFF по адресу 0x6000 во Flash
         LDI      YL      , low(DEBUG_BUFF)      ; адрес буфера в RAM для записи
         LDI      YH      , High(DEBUG_BUFF)

         LDI      ZH   , 0x60            ; адрес для записи в FLASH
         LDI      ZL   , 0x00

         CALL   FIRSTBOOTSTART         ; переходим на программирование

Вложения
self_prog.zip
asm файлик в архиве
(1.13 КБ) 266 скачиваний
Последний раз редактировалось ВитГо Пт мар 18, 2011 07:56:41, всего редактировалось 2 раза.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

FIRSTBOOTSTART = 0x7e00 ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами

Понятно, и она вызывается.
А что она из себя представляет? Можно ли её выкинуть и писать ручками?
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ВитГо »

ploop писал(а):
FIRSTBOOTSTART = 0x7e00 ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами

Понятно, и она вызывается.
А что она из себя представляет? Можно ли её выкинуть и писать ручками?


Откройте вложенный архив..
там как раз код который по этому адресу и располагается :-)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Во, я его и не заметил. Спасибо.
orion777
Родился
Сообщения: 14
Зарегистрирован: Пн сен 29, 2008 23:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение orion777 »

Помогите, не могу понять что к чему!
Хотелось бы повторить в железе сей проект http://elm-chan.org/works/vp/report.html, а именно FIR (КИХ) фильтр.
Вот его описание, которое дано на сайте:
This is just like digital signal processing in these examples. For the fundamentals of digital filter, please refer to any textbooks on digital signal processing. Figure 8 shows the signal flow diagram of FIR filter. The filter response is determined by filter parameter witch is summing gain for each taps. Larger number of taps increase frequency resolution, however, number of multiply/accumulate operation will also increase proportional to the number of taps.

Since the ATtiny26 does not have multiplier, an unsigned multiply takes 34 clocks. Plus memory access, sign conversion and accumulation are required for each taps, so that number of taps will be very limited. I tried to replace the multiplication with table conversion, it could be take 14 clocks for each taps, 23 taps are secured at 38.5k sps. I have not heard about digital signal processor with no multiplier, however, such the cheap microcontroller seems able to be used as a digital signal processor. The ATmega series microcontroller which has signed unsigned multiplication will take 8 clocks for each taps.

Firmware for this process is VP_FIL.ASM, and multiplication table VP_FIL_M.HEX.

И не смотря на то, что он тут пишет про программу с и без матрицы умножений, програмка в asm даётся только одна. Вот я никак и не пойму что там к чему! Что это ФНЧ фильтр могу предположить только из осцилки, которую автор рядом выкладывает в качестве иллюстрации.
Изображение

Хотелось бы смочь влиять на его частоту среза и т.п., но не пойму даже где смотреть эту частоту!

В приложении все файлы:
Вложения
fil.rar
(4.57 КБ) 191 скачивание
Последний раз редактировалось orion777 Сб мар 19, 2011 17:09:01, всего редактировалось 2 раза.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

orion777 писал(а):В приложении все файлы

Ну так и не надо выкладывать простыни кода в текст сообщения.
orion777 писал(а):Хотелось бы повторить в железе сей проект

Зачем?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
orion777
Родился
Сообщения: 14
Зарегистрирован: Пн сен 29, 2008 23:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение orion777 »

Gudd-Head писал(а):
orion777 писал(а):Хотелось бы повторить в железе сей проект

Зачем?

Очень надо, честно- честно!! Либо что угодно, что можно было бы назвать именно цифровым фильтром или его элементом.. Я умею только на ОУ фильтры делать, а с МК я на Вы. А надо очень т.к. такой уж вот достался мне проект на бакалаврскую.. Если не сделаю хоть что то- порежут меня на ремни в июне :( Вот нашел код, который можно вшить - хотел попробовать. Может частоту среза подкорректировать под свои нужды..

Ещё подкинули ссылку на 8-полосный анализатор спектра http://arv.radioliga.com/content/view/98/44/ - подумываю на нём ПШ организовать может.. Дело в том что я в авиационном учусь и надо хоть как то к этой теме привязаться (т.е. фильтр может быть связан со связью, либо та же локация и другие приборы).
Вышкой был бы калман на gps+инерциалка, но при моих знаниях реализовать его в цифре ... искалка сигнала ниже уровня шума - тоже было бы очень круто. Может что посоветуете?
orion777
Родился
Сообщения: 14
Зарегистрирован: Пн сен 29, 2008 23:16:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение orion777 »

Либо что угодно, что можно было бы назвать именно цифровым фильтром или его элементом..

Может есть какие то идеи?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

orion777 писал(а):Может есть какие то идеи?

Есть: учиться нормально.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ВитГо »

еще небольшие правки для подпрограммы самопрограммирования...

просто замените прошлый файл новым...
Вложения
self_prog.zip
(1.11 КБ) 220 скачиваний
Аватара пользователя
Финский
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб авг 28, 2010 13:29:43
Откуда: Докучаевск, Донецк
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Финский »

Уважаемые Коты, помогите начинающему, кому не трудно. Можно ли в Асме при обращении к конкретной области оперативки указывать смещение в виде переменной? например, есть определение

Код: Выделить всё

.dseg 
   digits: .byte 6     ; создаем массив разрядов цифр в оперативной памяти

а в процедуре индикации есть переменная razr, (от 0 до 5) которая определяет, какой разряд вывести на индикатор.
Задача: сделать не

Код: Выделить всё

lds temp, digits+1      ; загружаем значение десятков секунд

а

Код: Выделить всё

lds temp, digits+переменная

Студия ругается на второй вариант, - error: syntax error, unexpected REGDEF
В описании команд Асма нашел LDD Rd, Z+q. Подозреваю, что это то что нужно, но как в Z подставить адрес digits?
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
Ответить

Вернуться в «AVR»