Страница 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      ; загружаем значение десятков секунд

а

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

lds temp, digits+переменная
Студия ругается на второй вариант, - error: syntax error, unexpected REGDEF
В описании команд Асма нашел LDD Rd, Z+q. Подозреваю, что это то что нужно, но как в Z подставить адрес digits?