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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Эта среда рассчитана на однофайловые исходники? Если да, то это только для "поиграться".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Добрый день, Коты. Не так давно я задавался вопросом, почему у меня не работают прерывания INT0 и INT1 на Atmega48. Погуглив нашёл вот такое рассуждение: http://www.cyberforum.ru/microcontrolle ... 98879.html

Проверил сам, результат получился следующий:

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

;Настройка прерывания INT1
      ldi Temp, 0b00001100 ; Прерывание по возрастающему фронту INT1
      STS EICRA, Temp
      ldi Temp, 0b00000010 ; Разрешение прерывания на INT1
      STS EIMSK, Temp
;Этот вариант не работал. Это происходило из-за того, что при прерывании программа уходила не по тому адресу, то есть по той строке, где перечислены все прерывания:

.org 0
   rjmp reset
.org   INT0addr   ; External Interrupt Request 0
   rjmp INT0_IRQ
.org   INT1addr   ; External Interrupt Request 1
   rjmp INT1_IRQ
.org   PCI0addr   ; Pin Change Interrupt Request 0
   rjmp PCI0_IRQ
.org   PCI1addr   ; Pin Change Interrupt Request 0

; И т.д.

; Это я выяснил, когда все векторы прерывания отправил выполнять обработчик INT1.

;Но после того, как настройка прерывания приобретает следующий вид, всё начинает работать нормально:

ldi Temp, 0b00001100 ; Прерывание по возрастающему фронту INT1
      STS EICRA, Temp
      ldi Temp, 0b00000010 ; Разрешение прерывания на INT1
      out EIMSK, Temp
;Просто загружаем значение Temp в EIMSK не через STS, а через out.


Вопрос решён, всё хорошо, но я хочу для себя понять, чем таким отличается STS от out? В справке по ассемблеру out - это загрузка в порт, STS - прямая запись. Я думал, что они отличаются "радиусом действия".
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Надо лезть в m48def.inc смотреть какой там адрес присвоен регистру EIMSK.
Потому что для 8-й Меги у меня явно написано:

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

; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions

Но у 8-ки все регистры достреливаются через IN/OUT. А вот как они объявлены у 128-й:
Спойлер

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

;*****************************************************************************
; I/O Register Definitions
;*****************************************************************************

;**** Memory Mapped I/O Register Definitions ($FF-$60) ****
.equ   UCSR1C   = $9D
.equ   UDR1   = $9C
.equ   UCSR1A   = $9B
.equ   UCSR1B   = $9A
.equ   UBRR1L   = $99
.equ   UBRR1H   = $98
.equ   UCSR0C   = $95
.equ   UBRR0H   = $90
.equ   TCCR3C   = $8C
.equ   TCCR3A   = $8B
.equ   TCCR3B   = $8A
.equ   TCNT3H   = $89
.equ   TCNT3L   = $88
.equ   OCR3AH   = $87
.equ   OCR3AL   = $86
.equ   OCR3BH   = $85
.equ   OCR3BL   = $84
.equ   OCR3CH   = $83
.equ   OCR3CL   = $82
.equ   ICR3H   = $81
.equ   ICR3L   = $80
.equ   ETIMSK   = $7D
.equ   ETIFR   = $7C
.equ   TCCR1C   = $7A
.equ   OCR1CH   = $79
.equ   OCR1CL   = $78
.equ   TWCR   = $74
.equ   TWDR   = $73
.equ   TWAR   = $72
.equ   TWSR   = $71
.equ   TWBR   = $70
.equ   OSCCAL   = $6F
.equ   XMCRA   = $6D
.equ   XMCRB   = $6C
.equ   EICRA   = $6A
.equ   SPMCSR   = $68
.equ   SPMCR   = $68      ; old name for SPMCSR
.equ   PORTG   = $65
.equ   DDRG   = $64
.equ   PING   = $63
.equ   PORTF   = $62
.equ   DDRF   = $61

;**** I/O Register Definitions ($3F-$00) ****
.equ   SREG   = $3F
.equ   SPH      = $3E
.equ   SPL      = $3D
.equ   XDIV   = $3C
.equ   RAMPZ   = $3B
.equ   EICRB   = $3A
.equ   EIMSK   = $39
.equ   GIMSK   = $39      ; old name for EIMSK
.equ   GICR   = $39      ; old name for EIMSK
.equ   EIFR   = $38
.equ   GIFR   = $38      ; old name for EIFR
.equ   TIMSK   = $37
.equ   TIFR   = $36
.equ   MCUCR   = $35
.equ   MCUCSR   = $34
.equ   TCCR0   = $33
.equ   TCNT0   = $32
.equ   OCR0   = $31
.equ   ASSR   = $30
.equ   TCCR1A   = $2F
.equ   TCCR1B   = $2E
.equ   TCNT1H   = $2D
.equ   TCNT1L   = $2C
.equ   OCR1AH   = $2B
.equ   OCR1AL   = $2A
.equ   OCR1BH   = $29
.equ   OCR1BL   = $28
.equ   ICR1H   = $27
.equ   ICR1L   = $26
.equ   TCCR2   = $25
.equ   TCNT2   = $24
.equ   OCR2   = $23
.equ   OCDR   = $22      ; New
.equ   WDTCR   = $21
.equ   SFIOR   = $20      ; New
.equ   EEARH   = $1F
.equ   EEARL   = $1E
.equ   EEDR   = $1D
.equ   EECR   = $1C
.equ   PORTA   = $1B
.equ   DDRA   = $1A
.equ   PINA   = $19
.equ   PORTB   = $18
.equ   DDRB   = $17
.equ   PINB   = $16
.equ   PORTC   = $15
.equ   DDRC   = $14      ; New
.equ   PINC   = $13      ; New
.equ   PORTD   = $12
.equ   DDRD   = $11
.equ   PIND   = $10
.equ   SPDR   = $0F
.equ   SPSR   = $0E
.equ   SPCR   = $0D
.equ   UDR0   = $0C
.equ   UCSR0A   = $0B
.equ   UCSR0B   = $0A
.equ   UBRR0L   = $09
.equ   ACSR   = $08
.equ   ADMUX   = $07
.equ   ADCSR   = $06
.equ   ADCH   = $05
.equ   ADCL   = $04
.equ   PORTE   = $03
.equ   DDRE   = $02
.equ   PINE   = $01
.equ   PINF   = $00

Вроде в железе они идут подряд, но в описаниях есть скачок $3F — $60.
Это связано с тем, что РВВ идут после РОН, и если абсолютный адрес у младшего РВВ по-настоящему $20 (для команды STS/LDS), то относительный (с которым работают команды IN/OUT) — $00.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Не могу сказать что понял всё (в силу своего не знания), но в целом понятно в чём дело, спасибо :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

В двух словах: для разных команд должен быть разный адрес регистра.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

Драсте радиохвостатые! У меня трабла - сварганил я самодельную плату, на фото (ну отладочной ее никак не назвеш, из-за ее аскетичности), прошиваю ATmega8A програматором USBASP 2.0 , дык все прошивки, написанные на Си, работают на ура, все мигает тыры-пыры, а когда асемблерные прошивки запихаю, то ничерта не работает. Прошивка осуществляется через ProgISP, там в Low-программировании вообще не распознается МК, а на High-программировании распознается и проги норм работают тока сишные. В чем проблема? Может дело в том, што у меня светодиод, што висит на SCK, без резистора прям на землю, и давит сигнал?
Изображение
Betelgeuse
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

светодиоды - да, нужно через резисторы подключать. А вот то, что прошивка не работает - так это не правильно написанная прошивка.
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4965
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

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

Сообщение Seriyvolk »

КотЭ Мужчина писал(а): прошиваю ATmega8A програматором USBASP 2.0
Скачай себе eXtreme Burner AVR и не мучайся.
http://extreme-burner-avr.software.info ... d/?ca73472
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

Асмовая прошивка правильно составлена, в Протеусе работает, работала и в МК, зашитая Програматором Громова +Uniprof. Но так как у меня китаянский USBASP, то с нима работает тока ProgISP. Пишу в AVR Studio 4, 5, Atmel Studio 6 - результат один и тот же. Сишные прошивки работают, а асмовые - нет.
Betelgeuse
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

Забыл еще сказать - асмовые прошивки, у которых нет задержек типо
Delay:
out PortC,r16;
ldi r17,0;
ldi r18, 1;
ldi r19,3;
Loop:;.... и тд и тп
Из задержками не хотят работать мигалки - первый светоидиот загорается и все, ступор.
Betelgeuse
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

мля, ну, как может программатор залить вам кривую прошивку? что вы тут сказки рассказываете? либо он вообще ее не зальет, либо зальет полностью. Есть вариант залить с ошибкой, если скорость очень большая, но для этого есть галочка "верификация" записи и кнопка "сравнить".
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

В шпротеусе говоришь работает? А кто биты конфигурации будет задавать правильно? Задержки дял какой частоты рассчитываются, а на какой частоте работает контроллер?(реально работает, а не то что вы думаете что он работает).

"загорелся и все..." а может, он вместо секунды горит 30 секунд, вы просто не дожидаетесь когда задержка отработает. Проверьте все что влияет на выполнение программы, каждый бит и каждую особенность.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

А может наоборот, из-за маленькой задержки мигает с такой большой частотой, то Вам кажется, что он горит постоянно
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Мikа писал(а):я хочу для себя понять, чем таким отличается STS от out?


Чтобы не путаться, можно сделать макросы, которые будут сами подставлять in/lds или out/sts там, где нужно:

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

.macro input
  .if @1 < 0x40
   in   @0, @1
  .else
     lds   @0, @1
  .endif
.endm

.macro output
  .if @0 < 0x40
   out   @0, @1
  .else
     sts   @0, @1
  .endif
.endm
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

КотЭ Мужчина писал(а):у меня китаянский USBASP, то с нима работает тока ProgISP

У меня с нима работает AVRDUDEPROG.
Docendo discimus
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

ТАк как у меня мк пашет без внешнего кварца, то частота стандартная - 1 МГц. Ждал пол часа, думал может мигнет - нифига. Посмотрите, я ж выложил исходник задержки, именно эту хрень я и заливал в мк. Пробовал совместить из AVRDUDEPROG - нет, китаец за 6$ понимает тока ProgISP. Но надеюсь программатор тут ни при чем. Например в Си я постоянно задаю #define F_CPU 1000000UL, то работает. А блин асмовые чмошники...Кстати, не работают те проги, у которых нету задержек - если прото на биты регистра кинуть единички, штоб светы загорелись - все работает. Дальше мигалок я еще не лазил :-(
Betelgeuse
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

исходник моей последней прошивки
.include "m8adef.inc"
.cseg
.org 0x00;
;===
Init:
ldi r16,0xFF;
out DDRB,r16;
out DDRC,r16;
;----------
Start:
sbi PortB,1;
sbi PortB,5;
rcall Delay;
cbi PortB,1;
cbi PortB,5;
rcall Delay;
rjmp Start;
;===
Delay:
ldi r17,0;
ldi r18,2;
ldi r19,2;
Loop:
dec r17
brne Loop
dec r18
brne Loop;
dec r19
brne Loop;
ret;
Betelgeuse
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

хм. А что ты хотел получить? твоя задержка даёт 4 милисекунды... как ты собирался увидеть мигание?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

У него стек не инициализирован.
Ставим плюсы: )
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

ibiza11 писал(а):У него стек не инициализирован.

ВО, уважаю, братишка!
Помогло, Спасиба!
Betelgeuse
Ответить

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