Страница 78 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср мар 16, 2011 15:34:27
ВитГо
ploop писал(а): (кто знает скажите !!)
Все наблюдают за увлекательным квестом. Продолжайте

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

)
Ладно, продолжать уже нечего..
вечером попробую и если общественности будет интересно расскажу что получилось..
p.s. надеюсь мега в моей железке не умрет от моих неправильных действий...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср мар 16, 2011 15:37:39
Jack_A
ВитГо писал(а):
есть еще определение областей RWW и NRWW - но там как то не очень укладывается все в голове...
Точно! Видно, у нас одинаковые головы

Каждое слово порознь понимаешь, а пото'м - в балде туман.
Авось, достучимся до какого-нить гуру. Вот Саша ( avreal ) - большой дока, но что-то не появляется.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 00:25:06
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
Если конечно я Вас понял.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 06:32:08
ВитГо
DX168B писал(а):ВитГо писал(а):
мне нужно прочитать данные из программной памяти используя индексную адресацию
аналог LDD Rd , X + s
где s - смещение адреса для чтения... если правильно помню 6-ти битовое...
Если конечно я Вас понял.
нет.. не правильно.. после выполнения операции чтения Z должен остаться прежним..
ладно, вопрос снят.. такой команды нет...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 10:24:46
DX168B
Ну такого конечно нет. Для этого надо инициализировать пару на начало массива, потом к ней прикладывать число, сохранённое в регистре. После операции снова нужна инициализация пары. Я работал с двумя массивами, когда писал парсер для расшифровки символов CP1251, можно сказать одновременно. Положение по массиву сохранял в отдельных регистрах, которые потом складывал к паре при выполнении операций. Только так.
Ну ладно, раз вопрос снят, значит снят. На счёт программирования FLASH, я сам бы почитал, так как как-то пытался это реализовать, не понял до конца и забросил, в виду ненадобности.
ploop писал(а):Так как запускать программы из ОЗУ не позволяет архитектура, то это единственный способ сделать самомодифицирующийся вирус для AVR

Из восьмибитных не знаю, кто так умеет, но знаю, что старый ЗЫ80 это умеет, если вместе с ПЗУ ему подключить чип SRAM. Причём линию CS чипа посадить на линию MREQ процессора.
Когда я мало знал его инструкций, я сажал RAM через триггер с линиями IORQ и MREQ.
P.S. Этот процессор никогда не умрёт среди контроллеров.
Даже самая мощная МЕГА не идёт с ним ни в какое сравнение, разве что, архитектура RISC.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 14:30:02
ВитГо
Я вчера почти добил по самопрограммированию код.. программирование проходит только после этого мега виснет (ну или еще чтото делает - я так и не понял что с ней происходит, но после повторного включения вижу что байты записались)
думаю сегодня вечером добью... завтра выложу..
пока все лишь немного видоизменилось относительно того что я написал выше (там SPMCR нужно заполнять для каждого действия еще (заполнение буфера, стирание, запись)
код кстати очень компактный.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 15:33:10
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 он ругается что не знает что это такое, а я ему тоже помочь не могу т.к. такого сам не знаю.
Подскажете что это за ошибки такие!?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 15:53:10
akl
Это команды-макросы.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт мар 17, 2011 21:40:13
orion777
akl писал(а):Это команды-макросы.
Порядок, vp_def тоже нашел
Самопрограммирование
Добавлено: Пт мар 18, 2011 06:58:26
ВитГо
Как обещал даю работающий код для самопрограммирования 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 ; переходим на программирование
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт мар 18, 2011 07:40:50
ploop
FIRSTBOOTSTART = 0x7e00 ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами
Понятно, и она вызывается.
А что она из себя представляет? Можно ли её выкинуть и писать ручками?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт мар 18, 2011 08:23:26
ВитГо
ploop писал(а):FIRSTBOOTSTART = 0x7e00 ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами
Понятно, и она вызывается.
А что она из себя представляет? Можно ли её выкинуть и писать ручками?
Откройте вложенный архив..
там как раз код который по этому адресу и располагается

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт мар 18, 2011 08:36:14
ploop
Во, я его и не заметил. Спасибо.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 19, 2011 00:09:10
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 даётся только одна. Вот я никак и не пойму что там к чему! Что это ФНЧ фильтр могу предположить только из осцилки, которую автор рядом выкладывает в качестве иллюстрации.
Хотелось бы смочь влиять на его частоту среза и т.п., но не пойму даже где смотреть эту частоту!
В приложении все файлы:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 19, 2011 11:03:20
Gudd-Head
orion777 писал(а):В приложении все файлы
Ну так и не надо выкладывать простыни кода в текст сообщения.
orion777 писал(а):Хотелось бы повторить в железе сей проект
Зачем?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб мар 19, 2011 17:07:31
orion777
Gudd-Head писал(а):
orion777 писал(а):Хотелось бы повторить в железе сей проект
Зачем?
Очень надо, честно- честно!! Либо что угодно, что можно было бы назвать именно цифровым фильтром или его элементом.. Я умею только на ОУ фильтры делать, а с МК я на Вы. А надо очень т.к. такой уж вот достался мне проект на бакалаврскую.. Если не сделаю хоть что то- порежут меня на ремни в июне

Вот нашел код, который можно вшить - хотел попробовать. Может частоту среза подкорректировать под свои нужды..
Ещё подкинули ссылку на 8-полосный анализатор спектра
http://arv.radioliga.com/content/view/98/44/ - подумываю на нём ПШ организовать может.. Дело в том что я в авиационном учусь и надо хоть как то к этой теме привязаться (т.е. фильтр может быть связан со связью, либо та же локация и другие приборы).
Вышкой был бы калман на gps+инерциалка, но при моих знаниях реализовать его в цифре ... искалка сигнала ниже уровня шума - тоже было бы очень круто. Может что посоветуете?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс мар 20, 2011 20:00:37
orion777
Либо что угодно, что можно было бы назвать именно цифровым фильтром или его элементом..
Может есть какие то идеи?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс мар 20, 2011 20:28:25
Gudd-Head
orion777 писал(а):Может есть какие то идеи?
Есть: учиться нормально.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 21, 2011 06:58:23
ВитГо
еще небольшие правки для подпрограммы самопрограммирования...
просто замените прошлый файл новым...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 21, 2011 12:59:20
Финский
Уважаемые Коты, помогите начинающему, кому не трудно. Можно ли в Асме при обращении к конкретной области оперативки указывать смещение в виде переменной? например, есть определение
Код: Выделить всё
.dseg
digits: .byte 6 ; создаем массив разрядов цифр в оперативной памяти
а в процедуре индикации есть переменная razr, (от 0 до 5) которая определяет, какой разряд вывести на индикатор.
Задача: сделать не
Код: Выделить всё
lds temp, digits+1 ; загружаем значение десятков секунд
а
Студия ругается на второй вариант, - error: syntax error, unexpected REGDEF
В описании команд Асма нашел LDD Rd, Z+q. Подозреваю, что это то что нужно, но как в Z подставить адрес digits?