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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15550
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Мндя...
С SBI "ляпсус" одначе... (поставил "по аналогии с sbr" по недосмотру)
:oops:
А "помечтать" было б неплохо...
:(
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

господа, кто-нибудь может дать текст обмена по USB для АТМега8, а то использовать преобразователь USB-СОМ не очень то хочется.
сам пробовал искать - не нашел.
для СОМ порта (USART) у меня есть наработки, но хотелось бы сделать прямо по USB.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Starichok51, поясните что Вы имеете ввиду во фразе "текст обмена по USB для АТМега8".
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

ну, я хочу свои устройства на АТМега8 связать с компьютером. то есть нужно написать какой-то протокол обмена по USB. вот текст этого протокола и нужен.
соответственно, потом нужен будет драйвер для компа, чтобы связываться со своими устройствами.
сейчас я начал писать обмен по СОМ порту, проверить я его смогу на стареньком компе с СОМ портом (пока у меня преобразователя USB-СОМ нет в наличии).
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Э неее, тут так просто не прокатит и я даже не про физический уровень. Если Вам очень хочется самому заморочиться, то читайте Агурова. Не очень книга, но на русском.

Самый простой вариант, наверное, будет V-USB.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15550
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Лучше уж енто китайско чудо поставить:
http://img.radiokot.ru/files/20529/x83zlfcbc.jpg
на базе PL2303
ds_pl2303HXD_v1_4_4.pdf
(1.11 МБ) 180 скачиваний

дык там и дрова приличные и выход сразу в ТТЛ уровнях и ежли приловчится можно полный набор линий СОМ порма с микрухи вытянуть...
а на компе - виртуальный СОМ порт появляется...
пользуюся аж мурмчу...
:hunger:
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Выходит это чудо из строя на раз-два. У меня из пяти три накрылись буквально после нескольких втыканий в компьютер. Похоже на то, что PL2303 очень капризны к статике или что-то вроде.

А вот такое чудо на CP2102 за сравнимые деньги работает как часы.

И для полного набора линий COM-порта и ловчить ничего не надо - уже всё есть.
Последний раз редактировалось WiseLord Ср окт 05, 2016 19:17:41, всего редактировалось 1 раз.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19045
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

у меня есть книга Агурова, но он там рассматривает МК с аппаратным модулем USB. мне это не годится.
почитал данную ссылку на википедию, там говорится про довольно большую тактовую частоту, 12 МГц и выше.
а я использую внутренний генератор на 1 МГц. наверное, у меня ничего не получится при такой низкой скорости.
и похоже, не потянуть мне это дело. буду делать через СОМ порт.
на алиэкспресс полно разных преобразователей USB-СОМ, куплю там не дорогой.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Программный USB, по мнению людей, его делавших - фуфло, тем боле на 1MHz, видимо, не заработает. USB-UART как отдельный преобразователь или встроенный на FT232 ( или аналогичн. ) - самое то. Недорого - и без геморра на свою ... голову.
Вариант - FT245 , там со стороны МК параллельный интерфейс, это если у МК свободных пинов много. Я делал, полет нормальный.
Изображение
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

Если будете делать через COM порт, то могу помочь. Только со стороны контроллера на ассемблере, а со стороны ПК на С++. Как-то так.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

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

Сообщение Alkul »

Неплоха также микросхема CH340G. Если интересно, то для этой микросхемы у меня есть схема принципиальная переходника USB<->TTL. Подключаете её к МК линиями TTL, а на линии USB припаиваете разъем USB-B.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

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

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

Сообщение ARV »

у AVR область регистров пересекается с областью ОЗУ, так что сделать это можно. но я уверен на 100500%, что грабельки вы такие при этом заимеете, что можно будет в граните отливать в назидание потомкам ваш опыт...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Тут относительно недавно какая-то тема была, в этом году наверное. Помню еще товарищ akl, какое-то очень полезное участие в ней проявил :beer: . Наверное, как всегда, испытал в железе.
Вот могу соврать, вроде как там была попытка очистить ОЗУ в цикле командой PUSH. Условие окончания цикла было равенство SP нулю. Цикл отрабатывался нормально, но ни область регистров В/В, ни общего назначения не менялись.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

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

Сообщение B@R5uk »

Z_h_e писал(а):Условие окончания цикла было равенство SP нулю. Цикл отрабатывался нормально...
Я не знаю что за МК проходил тестирование и какой именно был цикл (точнее реализация условия выхода), но регистр SP и регистр флагов находятся ближе всего к оперативке, так что не удивительно, что первый занулялся раньше, чем остальные регистры ввода-вывода.

Добавлено after 9 minutes 5 seconds:
trofim2 писал(а):Уважаемые коллеги.
Можно-ли расположить стек в регистрах АТмега48?
Памяти не хватает.
У этого микроконтроллера есть две штуки General purpose I/O register. Так что если вам нужен стек на один или два байта, то его наверное (надо проверять!) можно расположить в этих регистрах. С остальными регистрами будут следующие проблемы:

1) регистр не имеет прямого доступа (кешируется, например)
2) регистр имеет только однонаправленный доступ
3) регистр относится к управлению ядром МК, тактированием МК или к модулю который будет использоваться
4) в регистре реализованы не все биты
5) изменение содержимого регистра безоговорочно влияет на поведение портов МК
6) трудно найти непрерывную последовательность регистров не попадающих под случаи выше.
7) как уже выше сказали, стек может не иметь доступа к регистрам ввода-вывода (проверка на дурака зашита в железо)

Если не хватает памяти, то не лучше ли взять какие-нибудь ATmega88 или ATmeg168? Если планируется осуществлять поддержку проектируемого устройства, то лучше иметь запас по оперативке и ПЗУ, чтобы не пришлось потом перепаивать чип.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Команды sts и lds прекрасно работают со всеми регистрами.
Попытался настроить стек на r15.
В железе программа зависает.
В студии, при эмуляции, не пишется адрес возврата в регистры.

GPIOR0 удобно использовать для флагов, команды sbi и cbi не меняют SREG.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15550
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Можно конечно...
Ежли будет исполним, к примеру, трюк подобного вида:
clr xh
clr yh
ldi xl,2
ldi yl,0х1f ; подготовим адреса ячеек X=0х0002(r2) и Y=0х001f(r15)
st x,yl ; а теперь аналог mov r2,yl = в ячейку 2 (она же r2) загружено 0х1f
st y,r2 ; аналогия mov r15,r2 = в ячейку 0х1f (она же r15) загружено 2

в принципе... теоретически вроде проблем нет... работа с SP практически аналогична...
для каких-либо трюков вполне пойдет - стиль аналогии работы с регистровыми банками MCS51 (там даже изначально по умолчанию указатель стека на начало банка1 установлен /sp=0x07/).
:roll:
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Применение команд st -Y,reg и ld reg,Y+ решает задачу сохранения регистров в импровизированном стеке.
Также без проблем сохранить адрес возврата при использовании подпрограмм.
Но как организовать прерывание?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15550
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

В каком смысле
"Но как организовать прерывание?"...?
:shock:
Стандартные средства МК обычны для большинства случаев.
Обычно происходят вызовы автоматически по каким-либо соответствующим событиям.
Программно или симуляция события или прямая программная установка соответствующего флага.
Относительно собствеен обработки прерываний - это процесс личного творчества - пишем чего пожелается, но в рамках разумно-допустимого.
8)
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

BOB51 писал(а):ldi yl,0х1f ; подготовим адреса ячеек X=0х0002(r2) и Y=0х001f(r15)
st x,yl ; а теперь аналог mov r2,yl = в ячейку 2 (она же r2) загружено 0х1f
st y,r2 ; аналогия mov r15,r2 = в ячейку 0х1f (она же r15) загружено 2
Замечу, что адрес R15=0x0F, ну или просто 15.
Студия правильно отрабатывает код ниже, но... не отражает в R15 адрес возврата, в регистрах R14,R13 хотелось бы видеть результаты работы команд PUSH. Нужна проверка в железе. Правда у меня нет mega48, посмотрю на tiny2313
Спойлер

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

.include "m48def.inc"
.cseg
.org 0
   RJMP RESET
.org INT0addr   ; External Interrupt Request 0
   PUSH   R0
   IN   R0,SREG
   PUSH   R0
   LDI   R16,0xCC
   MOV   R0,R16
   NOP
   POP   R0
   OUT   SREG,R0
   POP   R0
   reti
;*********************************************
RESET:
   LDI   XH,HIGH(15)
   LDI   XL,LOW(15)
   OUT   SPH,XH
   OUT   SPL,XL

   SBI   DDRD,2
   SBI   PORTD,2
   NOP
   CBI   DDRD,2

   CLR   R0
   DEC   R0

   LDI   R16,1<<SE
   OUT   SMCR,R16

   LDI   R16,1<<ISC01
   STS   EICRA,R16

   LDI   R22,1<<INT0
   OUT   EIMSK,R22
   OUT   EIFR,R22

   SEI
WAIT:
   SLEEP
   NOP
   RJMP   WAIT
.EXIT
Ответить

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