Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте, есть у кого-нибудь примеры на stm32 написанные на ассемблере(понимаю конечно, что не в тему малость ARM, а на AVR все таки, но может есть у когнить)? И посоветуйте пожалуйста литературу по Keil и ассемблеру(обучалка которая здесь на сайте не катит, какой-то другой там асм).
- Реклама
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
http://stm32asm.ru/
http://we.easyelectronics.ru/STM32/asm- ... chalo.html
http://forum.easyelectronics.ru/viewtop ... 35&t=11743
http://forum.easyelectronics.ru/viewtop ... =35&t=6508
http://forum.easyelectronics.ru/viewtop ... 35&t=10983
http://we.easyelectronics.ru/sasha85ru/ ... -keil.html
http://pygmy.utoh.org/riscy/cortex/led-stm32.html
и это все первая страница google
http://we.easyelectronics.ru/STM32/asm- ... chalo.html
http://forum.easyelectronics.ru/viewtop ... 35&t=11743
http://forum.easyelectronics.ru/viewtop ... =35&t=6508
http://forum.easyelectronics.ru/viewtop ... 35&t=10983
http://we.easyelectronics.ru/sasha85ru/ ... -keil.html
http://pygmy.utoh.org/riscy/cortex/led-stm32.html
и это все первая страница google
Ставим плюсы: )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Достаточно байты обрабатывать в обратном порядке.Gudd-Head писал(а):Думаю, если заполнять маску наоборот единицами, то получим нужный порядок. Но можно и этим обойтись.
Тут как раз так и показано viewtopic.php?p=1589625#p1589625
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
zero648 писал(а):afz писал(а):А как принято делать двухбайтовые счетчики? Вот мне понадобилось в таймерном прерывании 2400 Гц отсчитать секунду. Я, как на нормальных системах, загрузил в пару регистров 2400 (hi , low), но что-то мне подсказало заглянуть в описание команды DEC. Ага, так и ждал подляны: DEC не взводит бит C. Ну и как прикажете считать? Нет, конечно, мне не составило труда посчитать в одном регистре 100 и во втором 24, но это удобный частный случай, а понадобись посчитать простое число, не влезающее в один регистр, хотя бы 2437 и как тогда принято делать?
Тогда принято первый младший брать с остатком, а старший так и останется, в вашем случае превый младший брать 137, старший 24, остальные младшие грузить по 100, итого 137*1+100*23=2437
О! А вот это - хорошее решение. Я же чувствовал, что что-то такое должно быть - так вот оно! Спасибо!
Kavka писал(а):В данном случае (проверка на равенство нулю) никакой разницы:
cpi r1,0
tst r1
or r1,r1
Ой! CPI R1,0 ? Я же не зря в прошлый раз поправил...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Kavka писал(а):Достаточно байты обрабатывать в обратном порядке.
Кстати, если кому интересно зачем нужен такой код: viewtopic.php?f=20&t=85804
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Только что наткнулся, в отладчике, студия 4.19,8-я Мега. Разрешил ADC, - в ADSRA взвел биты ADEN, ADIE и прескалер 127, в ADMUX выбрал канал 0, "левое" представление и опорник 2.56, ADSC не взводил, иду отладчиком по программе, выполняю команду SLEEP, сам собой взводится бит ADSC и запускается преобразование. Это баг, или фича? Сходу что-то не нашел...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
afz писал(а):выполняю команду SLEEP
Какой конкретно SLEEP? Есть специальный режим для снижения шумов АЦП:
ДАТАШИТ писал(а):22.6 ADC Noise Canceler
The ADC features a noise canceler that enables conversion during sleep mode to reduce noise induced from the CPU core and other I/O peripherals. The noise canceler can be used with ADC Noise Reduction and Idle mode. To make use of this feature, the following procedure should be used:
1. Make sure that the ADC is enabled and is not busy converting. Single Conversion mode must be selected and the ADC conversion complete interrupt must be enabled.
2. Enter ADC Noise Reduction mode (or Idle mode). The ADC will start a conversion once the CPU has been halted.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Уже нашел. Idle, в нем тоже делается запуск. Блин, теперь изобретай, как оцифровать сигнал по таймеру - с одной стороны говорят, что у первого преобразования плохая точность, и 25 тактов вместо 13, то есть включить ADC надо заранее, а с другой стороны как прикажете ждать таймер до запуска АЦП? Вероятно, придется в цикле...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
уберите условие "ADC conversion complete interrupt must be enabled." прерывание разрешить уже по таймеру непосредственно перед запуском преобразования.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Увы, отладчик утверждает, что ADC ввсе равно запускается. Это значит, что "вздремнув" до таймерного прерывания, я буду вынужден или принять результат ADC, полученный в момент засыпания для ожидания таймера, или очищать ADC вручную, и потом уже запускать его. То есть, конечно, как вариант, пойдет: обработали таймер - засыпаем, АЦП стартует, но прерывания по концу преобразования не дает, новое таймерное прерывание, обрабатываем таймер, снимаем данные АЦП, очищаем его вручную, снова спим + запуск АЦП. Если заниматься только этим - пойдет, а вот развитой многозадачности, увы, не выйдет. Да, фича не совсем приятная и, увы, неотключаемая.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Known issues на стимулятор и ваш камень читали? Вполне возможно это его глюк.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
На камень читал, но давно, на симулятор не читал, но подозреваю, что все правильно, это не баг, это фича!
Собственно, с первой задачей я справился, таймерная оцифровка вполне идет - прерывания от АЦП запрещены, SLEEP, выданный по завершении таймерной задачи, запускает АЦП, по следующему таймерному прерыванию снимаю данные и очищаю бит ADIF, далее новый SLEEP и вперед! Проверил в железе, всё ОК! А вот что делать со второй задачей, пока думаю. Надо измерить напряжение в сети 220, в попугаях, я планировал взять переменку с трансформатора (с моста), через резисторы, один конец завести на аналоговый компаратор, ловить уровень возле нуля, в этот момент на втором конце будет максимум, его через делитель на АЦП, и вперед. Но увы, таймер клокает асинхронно от сети, поэтому возможны накладки. Придется, скорее всего, делать таймер высокочастотным (сначала я планировал 150 Гц), чтобы по прерыванию от АК отметиться, а в следующем таймерном прерывании запустить АЦП. То есть, конечно, можно еще приостановить таймер (Sleep Mode ADC Noise Canceler), но тогда таймер будет врать...
Собственно, с первой задачей я справился, таймерная оцифровка вполне идет - прерывания от АЦП запрещены, SLEEP, выданный по завершении таймерной задачи, запускает АЦП, по следующему таймерному прерыванию снимаю данные и очищаю бит ADIF, далее новый SLEEP и вперед! Проверил в железе, всё ОК! А вот что делать со второй задачей, пока думаю. Надо измерить напряжение в сети 220, в попугаях, я планировал взять переменку с трансформатора (с моста), через резисторы, один конец завести на аналоговый компаратор, ловить уровень возле нуля, в этот момент на втором конце будет максимум, его через делитель на АЦП, и вперед. Но увы, таймер клокает асинхронно от сети, поэтому возможны накладки. Придется, скорее всего, делать таймер высокочастотным (сначала я планировал 150 Гц), чтобы по прерыванию от АК отметиться, а в следующем таймерном прерывании запустить АЦП. То есть, конечно, можно еще приостановить таймер (Sleep Mode ADC Noise Canceler), но тогда таймер будет врать...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Выпрями переменку... одним диодом достаточно. Либо реализовать УВХ аппаратно - детектор нуля, аналоговый ключ, конденсатор. После ключа на конденсаторе будет всегда последний максимум, причем уже не переменное а постоянное напряжение.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Выпрямлял, даже двумя. Делитель для АЦП 30к / 3к или что-то в этом духе, точно уже не помню, 1 мкФ емкость, пульсация 15%. Можно, конечно, поставить 100 мкФ, но будет долго разряжаться при реальном падении. Вот и думаю... В принципе, если частота таймерных прерываний будет несколько кГц (у меня легко получилось 2.4 кГц), берем с моста оба конца переменки, один, через резистор с 4.7-В стабилитроном заводим на компаратор, сравниваем с нулём, второй, через делитель, на АЦП. Получив прерывание от компаратора (это значит, что на этом проводе сейчас мгновенный минимум) взводим флажок, получив таймерное прерывание (это, максимум, через 417 мкс, сетевой синус за это время почти не изменися), при стоящем флажке запускаем АЦП, и вот он максимум в этом периоде сети. Делитель для АЦП все равно нужен, дополнительных деталей - один резистор и один стабилитрон, а не огород с УВХ на 50 Гц.
Добавлено через 2 часа
По дороге домой поразмыслил и решил попробовать вообще обойтись без дополнительной аппаратуры: если цифровать 50-Гц синус с частотой 2400 Гц, то можно банально отследить максимум и этого должно хватить.
Добавлено через 2 часа
По дороге домой поразмыслил и решил попробовать вообще обойтись без дополнительной аппаратуры: если цифровать 50-Гц синус с частотой 2400 Гц, то можно банально отследить максимум и этого должно хватить.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Подскажите, пожалуйста:
Как лучше оформлять программу на ассемблере для AVR, для лучшей читаемости? Самые простые вопросы: Большими буквами писать или маленькими? Делать отступы, для оформления, или нет, табуляцией или пробелами?
Может, есть какие-то средства, помогающие в оформлении? Нет ли такого в AVR-studio 5 или 6?
Как лучше оформлять программу на ассемблере для AVR, для лучшей читаемости? Самые простые вопросы: Большими буквами писать или маленькими? Делать отступы, для оформления, или нет, табуляцией или пробелами?
Может, есть какие-то средства, помогающие в оформлении? Нет ли такого в AVR-studio 5 или 6?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я делаю так
Т.е. спец.регистры и их биты большими буквами, остальное маленькими. Ну, ещё метки большими.
Отсупы делаю где небольшие циклы крутятся. Все отступы табуляцией.
Код: Выделить всё
sbi PORTB, 2; подтягиваем порт с кнопкой питания
ldi tmp, 0b00001111; PC0...PC3 на вывод — шина данных
out DDRC, tmp; Т.е. спец.регистры и их биты большими буквами, остальное маленькими. Ну, ещё метки большими.
Отсупы делаю где небольшие циклы крутятся. Все отступы табуляцией.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Ассемблер (ASM) для AVR в вопросах и ответах
главное чтобы команды имели равный отступ слева(идин или 2 табулятора) можно и больше, если label не помещается в этот промежуток, а начинать писать команды с новой строки не хочется
заглавными ли прописными - дело вкуса
отступы проще делать табуляцией, меньше нажатий клавиш, да и код ровнее будет
обычно в текстовых редакторах для программистов имеется функция "autoindent" которая при переходе на новую строку делает нужный отступ
парсер немного корявит - комментарии тоже находятся на одной линии
заглавными ли прописными - дело вкуса
отступы проще делать табуляцией, меньше нажатий клавиш, да и код ровнее будет
обычно в текстовых редакторах для программистов имеется функция "autoindent" которая при переходе на новую строку делает нужный отступ
Код: Выделить всё
putc_USART1:
push r19 ;Save r19
lds r19, UCSR1A ;Load UCSR1A
sbrs r19, UDRE1 ;Check transmit buffer
rjmp putc_USART1 ;if empty -> loop
sts UDR1, r24 ;else -> send data from r24
pop r19 ;restore r19
ret
getc_USART1:
push r20 ;Save r20
lds r20, UCSR1A ;Load UCSR1A
sbrs r20, RXC1 ;Check receive buffer
rjmp getc_USART1 ;if empty -> loop
lds r24, UDR1 ;else -> save data to r24
pop r20 ;Restore r20
retпарсер немного корявит - комментарии тоже находятся на одной линии
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
отступы проще делать табуляцией, меньше нажатий клавиш, да и код ровнее будет
Но сохранять в файл пробелами. Надо смотреть настройки редактора, чтобы умел табы пробелами заменять.
Я пользуюсь Sublime Text 2 с плагином подсветки синтаксиса AVR ASM
парсер немного корявит - комментарии тоже находятся на одной линии
Вот это пример использования настоящих табов вместо пробелов. На форум вставить уже проблемы
Gudd-Head писал(а):Я делаю такКод: Выделить всё
sbi PORTB, 2; подтягиваем порт с кнопкой питания
ldi tmp, 0b00001111; PC0...PC3 на вывод — шина данных
out DDRC, tmp;
Т.е. спец.регистры и их биты большими буквами, остальное маленькими. Ну, ещё метки большими.
Отсупы делаю где небольшие циклы крутятся. Все отступы табуляцией.
Аналогично.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я первым делом перестраиваю Студию на табуляцию в 8 пробелов (в 3-й - 4-й Студии - Tools - Options - Editor, Tab Width).
Комментарии стараюсь писать погуще, через один или несколько табов, причем точку с запятой ставлю уже после табов. Комментарий влезает, обычно, в одну-две строки, а действие бывает длиннее, так я продолжаю колонку точек с запятыми до окончания действия. Следующее действие комментирую на один таб правее или левее. Подобный стиль позволяет вспомнить подробности даже через несколько лет.
Комментарии стараюсь писать погуще, через один или несколько табов, причем точку с запятой ставлю уже после табов. Комментарий влезает, обычно, в одну-две строки, а действие бывает длиннее, так я продолжаю колонку точек с запятыми до окончания действия. Следующее действие комментирую на один таб правее или левее. Подобный стиль позволяет вспомнить подробности даже через несколько лет.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо большое. Буду думать и пробовать.
А в AVR Studio версий 4, 5 или 6 есть ли какая-то встроенная помощь в оформлении? Или лучше писать в чем-то другом, может, в "Sublime Text 2 с плагином подсветки синтаксиса AVR ASM"
А в AVR Studio версий 4, 5 или 6 есть ли какая-то встроенная помощь в оформлении? Или лучше писать в чем-то другом, может, в "Sublime Text 2 с плагином подсветки синтаксиса AVR ASM"


