Обсуждаем контроллеры компании Atmel.
Ответить

Пн окт 27, 2008 21:08:01

Ни как не пойму !?!? Асм файл сгенерированный кодвижном содержит прерывания причем все они а симуляторе работают. НО вектора прерываний ни где не указаны ?!! конечно же скорее всего они указаны но я не пойму где.
Вот например прерывание по SPI:
Код:
_spi_isr:
тект программы ...
return


Раз написано _spi_isr: значит должно быть написано где то выше
Код:
.org 0x18
rjmp _spi_isr

но вот что то такого не видать.

Пн окт 27, 2008 21:37:43

там файлик есть типа .vec вот такого содержания к примеру


Код:
;INTERRUPT VECTORS
   RJMP __RESET
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP _adc_isr
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00


Это из примера C:\CVAVR\examples\ADC8535

Вт окт 28, 2008 11:14:02

Инкремент переменной integer (16 bit): Код:
MOVW R30,R4
ADIW R30,1
MOVW R4,R30


Как работает команда MOVW ? Есть ли жесткая привязка между R4 и R5 ? Могу ли я указать здесь R5 вместо R4 с целью использования пары R5 R6 ?

В описании команды: Rd+1:Rd = Rr+1:Rr, r,d even

Могу ли я использовать любой регистр и следующий за ним в качестве операнда этой команды?

Вт окт 28, 2008 19:50:57

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

наверно любой из 32-ух РОН

Вт окт 28, 2008 20:00:26

tych писал(а):наверно любой из 32-ух РОН
ошибаетесь. в MOVW можно использовать любые четные регистры в качестве указателя базы операндов.
MOVW R4, R6 - работает
MOVW R3, R6 - не работает

Вт окт 28, 2008 21:27:42

И, кстати, на это чётко указано в описании команд
Rd+1:Rd = Rr+1:Rr,r,d even

even - чётный...
Последний раз редактировалось YurkaM Вт окт 28, 2008 21:30:27, всего редактировалось 1 раз.

Вт окт 28, 2008 21:28:58

откуда вы это знаете ? поделитесь секретом где это написано.

Вт окт 28, 2008 21:35:43

В любом даташите на AVR. В книжках типа "Евстифеев А.В. Микроконтроллеры AVR" и т.д. А вообще в таких случаях достоверный на 99% ответ даст любой нормальный симулятор. Делов - на 1 минуту.

Вт окт 28, 2008 22:09:21

MegaRazoR писал(а):откуда вы это знаете ? поделитесь секретом где это написано.
я использую AVR Studio, в комплекте с которой идет отличный справочный файл по ассемблеру. по-моему, самый лучший из всех виденных мною.

Ср окт 29, 2008 16:44:47

как лучше всего организовать такую фунцию:
если в регистре R4 содержится число 0х11 то сбросить регистр R7
как реализуется сумма по модулю два ?
что такое сохранение ?

Ср окт 29, 2008 17:14:12

как лучше всего организовать такую фунцию:
если в регистре R4 содержится число 0х11 то сбросить регистр R7
как реализуется сумма по модулю два ?


Label:
ldi tmp, 0x11
cpse tmp, r4
ret
clr r7
ret

Ср окт 29, 2008 17:30:47

а для 16 битных то же самое ?
мне надо сбросить такой то регистр если в регистре Z (16 бит) заданное число.

Ср окт 29, 2008 19:59:30

MegaRazoR писал(а):а для 16 битных то же самое ?
мне надо сбросить такой то регистр если в регистре Z (16 бит) заданное число.

Написшите после каждой строчки примера - что она делает. РАЗБЕРИТЕСЬ !!! сами.

А потом - поняв - модифицируйте код под нужную вам задачу.

Пт окт 31, 2008 01:23:59

Ну, все-думаю., пора разобрацця с АВР. ПОлез в обучалку (кто её писал? где-то ещё видел на каком-то сайте). Скачал ассемблер, блокнот, что там ещё надо для "пробы пера"?
Написал по совету афтра батник (фу, какое слово) инифига не получилось с вот этимим ключами., которые советует афтар:
с:\Temp\avr\tavrasm\tavrasm.exe -i code.asm -e output\listfile.lst -o output\hexfile.hex
pause=null
Потому что пишет мне такое:
c:\Temp\AVR\AVR-projects\tutorial>ё:\Temp\avr\tavrasm\tavrasm.exe -i code.asm -e
output\listfile.lst -o output\hexfile.hex
Системе не удается найти указанный диск.

Откуда тут появился диск e:\
А?

Афтар пишет "Таким образом, мы создали:
D:\AVR-projects\
D:\AVR-projects\tutorial\
D:\AVR-projects\tutorial\output"

А на скриншоте совсем другое:
http://radiokot.ru/start/mcu_fpga/avr/02/02.gif
D:\Project\tutorial\ ...
Я понимаю, что афтар в последний момент передумал и вместо AVR-project, как обещал мне, создал, не предупредив? Projeсt, но ведь простите, это обучалка для начинающих, и такая небрежность настораживает.

Короче, у меня ничего не вышло с ключами и этим допотопным ассемблером. Да и, мне кажется, руками писать в наше время разные ключи-архаизм. Это как пользоваться досовским архиватором, указывая ему разными ключами, что мы от него хотим.

Пт окт 31, 2008 07:09:12

Zanzib писал(а): ведь простите, это обучалка для начинающих, и такая небрежность настораживает.

Да уж 1.5 года примерно пишем тут про ошибки и не меняют ни фига.

Пт окт 31, 2008 11:46:53

tych писал(а):
Zanzib писал(а): ведь простите, это обучалка для начинающих, и такая небрежность настораживает.

Да уж 1.5 года примерно пишем тут про ошибки и не меняют ни фига.


На этом сайте все скопировано слово в слово и с теми же ашипками.
http://radlub.sk6.ru/index.php?name=pages&op=view&id=67

Может это специально так, чтобы установить некий порог пролезания?

Вт ноя 04, 2008 23:33:37

Zanzib, смотрите, как у меня:
C:\AVR\AVR-Projects\tutorial

Здесь лежат и батник, и асм код.
В батнике compile.bat прописано:
Код:
C:\AVR\tavrasm\tavrasm.exe -i code.asm -e output\listfile.lst -o output\hexfile.hex
pause=null


Эту прогу (tavrasm.exe) я положил сюда:
C:\AVR\tavrasm
avrasm, соответственно:
C:\AVR\avrasm

В асм коде, как советуется в первом примере, написал:
Код:
.include "C:\AVR\avrasm\APPNOTES\2313def.inc"   ;В данном случае, мы пишем для
;AT90s2313. Соответственно, и файл – 2313.

ldi R16,5     ;загрузка констант в регистры
ldi R17,7
and R16,R17   ;логическое «И» двух регистров
nop

;**********************************************************

; Всё прекрасно компилится и hex файл сбрасывается в папочку
; C:\AVR\AVR-Projects\tutorial\output

Пт ноя 07, 2008 01:42:22

Подскажите, пожалуйста.

В результате инкремента 1 регистр был полностью заполнен, произошёл перенос на следующий. Инкремент вызывался прерываниями от порта INT1.
Нужно посчитать кол-во поступивших на этот порт импульсов и вывести это число также импульсами на порт B.
Как это осуществить?
Декрементом, начиная со второго регистра, каждый раз сравнивая его с 0 и выводя 1 на порт B при отрицательном результате сравнения, а при положительном перескочить на первый регистр, и продолжить его декремент?

Код:
start:
cmp R17,0
breq qwe
out PortB,0b0000001
out PortB,0b0000000
dec R17
cmp R17,0
brec qwe
out PortB,0b0000001
out PortB,0b0000000
rjmp start

qwe:
cmp R16,0
breq konec
out PortB,0b0000001
out PortB,0b0000000
dec R16
rjmp qwe

konec:
.............

Пт ноя 07, 2008 19:25:40

Собрал утилитку что бы ассемблер было полегче учить (памяти вобще нет а от монитора в книгу от книги к монитору задолбало блин нырять), но в принципе таким образом можно и для других языков сделать подобный (если у кого есть полное описание флагов в (*.тхт) по всей линейке МК скинте куда нибудь пожалуйста) пожалуй и флаги надо будет включить.

AVR_assemler_mini_help.zip http://radiokot.ru/forum/download.php?id=8437

если есть какие неточности просьба сообщить

Ср ноя 12, 2008 22:10:50

Здравствуйте, если ответ на мой вопрос уже есть на форуме, не пинайте сильно, искала как могла, но не нашла.
Мне нужен код прошивки для AVR для общения с жёстким диском.
Если у кого-то есть, поделитесь, пожалуйста. Или подскажите, где можно поискать.
Заранее спасибо.
Ответить