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

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

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

ploop писал(а):
(кто знает скажите !!)
Все наблюдают за увлекательным квестом. Продолжайте :)
Не хорошо издеваться над только что вставшим на ноги :-))

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

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

Сообщение Jack_A »

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

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

Сообщение 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

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

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

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

Сообщение 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

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

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

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

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

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

Сообщение 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
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

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

Сообщение 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 КБ) 268 скачиваний
Последний раз редактировалось ВитГо Пт мар 18, 2011 07:56:41, всего редактировалось 2 раза.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

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

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

ploop писал(а):
FIRSTBOOTSTART = 0x7e00 ; по этому адресу располагается подпрограмма самопрограммирования, сюда же настроен загрузчик фюзами
Понятно, и она вызывается.
А что она из себя представляет? Можно ли её выкинуть и писать ручками?
Откройте вложенный архив..
там как раз код который по этому адресу и располагается :-)
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

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

Сообщение 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 КБ) 193 скачивания
Последний раз редактировалось orion777 Сб мар 19, 2011 17:09:01, всего редактировалось 2 раза.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Сообщение orion777 »

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

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

Сообщение orion777 »

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

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

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

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

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

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

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

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

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

.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»