Avr система команд: Справочник по командам ассемблера AVR

Справочник по командам ассемблера AVR

Справочник по системе команд микроконтроллеров AVR основан на переводе документации от Atmel. Помимо этого сюда добавлено больше примеров из практики, в частности, примеры для ассемблера AVR GCC.

Чтобы быстро перейти к нужной команде достаточно ввести её имя. Также можно выбрать команду из списка внизу.

Справочник будет дополняться по мере появления вопросов.

Логические операции
Арифметические операции
Битовые операции
Операции сравнения
Операции сдвига
Операции пересылки данных
Безусловные переходы
Условные переходы
Управление устройством

Команда:

Введите имя команды в поле выше

Логические операции

Мнемоника Описание Операция Флаги
AND Rd, Rr Логическое «И» двух регистров Rd ← Rd and Rr Z, N, V
ANDI Rd, K Логическое «И регистра и константы Rd ← Rd and K Z, N, V
EOR Rd, Rr Исключающее «ИЛИ» двух регистров Rd ← Rd xor Rr Z, N, V
OR Rd, Rr Логическое «ИЛИ» двух регистров Rd ← Rd or Rr Z, N, V
ORI Rd, K Логическое «ИЛИ» регистра и константы Rd ← Rd or K Z, N, V
COM Rd Перевод в обратный код Rd ← 0xFF — Rd Z, C, N, V
NEG Rd Перевод в дополнительный код Rd ← 0 — Rd Z, C, N, V, H
CLR Rd Очистка регистра Rd ← Rd xor Rd Z, N, V
SER Rd Установка всех разрядов регистра Rd ← 0xFF
TST Rd Проверка регистра на отрицательное (нулевое) значение Rd ← Rd and Rd Z, N, V

Арифметические операции

Мнемоника Описание Операция Флаги
ADD Rd, Rr Сложение двух регистров Rd ← Rd + Rr Z, C, N, V, H
ADC Rd, Rr Сложение двух регистров с переносом Rd ← Rd + Rr + С Z, C, N, V, H
SUB Rd, Rr Вычитание двух регистров Rd ← Rd — Rr Z, C, N, V, H
SBC Rd, Rr Вычитание двух регистров с заёмом Rd ← Rd — Rr — С Z, C, N, V, H
ADIW Rd, K Сложение регистровой пары с константой R(d+1):Rd ← R(d+1):Rd + K Z, C, N, V, S
SBIW Rd, K Вычитание константы из регистровой пары R(d+1):Rdl ← R(d+1):Rd — K Z, C, N, V, S
SUBI Rd, K Вычитание константы из регистра Rd ← Rd — K Z, C, N, V, H
SBCI Rd, K Вычитание константы из регистра с заёмом Rd ← Rd — K — С Z, C, N, V, H
INC Rd Инкремент регистра Rd ← Rd + 1 Z, N, V
DEC Rd Декремент регистра Rd ← Rd – 1 Z, N, V
MUL Rd, Rr Умножение чисел без знака R1:R0 ← Rd * Rr Z, C
MULS Rd, Rr Умножение чисел со знаком R1:R0 ← Rd * Rr Z, C
MULSU Rd, Rr Умножение числа со знаком с числом без знака R1:R0 ← Rd * Rr Z, C
FMUL Rd, Rr Умножение дробных чисел без знака R1:R0 ← (Rd * Rr) << 1 Z, C
FMULS Rd, Rr Умножение дробных чисел со знаком R1:R0 ← (Rd * Rr) << 1 Z, C
FMULSU Rd, Rr Умножение дробного числа со знаком с числом без знака R1:R0 ← (Rd * Rr) << 1 Z, C

Битовые операции

Мнемоника Описание Операция Флаги
CBR Rd, K Очистка разрядов регистра Rd ← Rd and (0FFH – K) Z, N, V
SBR Rd, K Установка разрядов регистра Rd ← Rd or K Z, N, V
CBI P, b Сброс разряда I/O-регистра P. b ← 0
SBI P, b Установка разряда I/O-регистра P.b ← 1
BCLR s Сброс флага SREG SREG.s ← 0 SREG.s
BSET s Установка флага SREG SREG.s ← 1 SREG.s
BLD Rd, b Загрузка разряда регистра из флага T Rd.b ← T
BST Rr, b Запись разряда регистра во флаг T T ← Rd.b T
CLC Сброс флага переноса C ← 0 C
SEC Установка флага переноса C ← 1 C
CLN Сброс флага отрицательного числа N ← 0 N
SEN Установка флага отрицательного числа N ← 1 N
CLZ Сброс флага нуля Z ← 0 Z
SEZ Установка флага нуля Z ← 1 Z
CLI Общий запрет прерываний I ← 0 I
SEI Общее разрешение прерываний I ← 1 I
CLS Сброс флага знака S ← 0 S
SES Установка флага знака S ← 1 S
CLV Сброс флага переполнения дополнительного кода V ← 0 V
SEV Установка флага переполнения дополнительного кода V ← 1 V
CLT Сброс пользовательского флага T T ← 0 T
SET Установка пользовательского флага T T ← 1 T
CLH Сброс флага половинного переноса H ← 0 H
SEH Установка флага половинного переноса H ← 1 H

Операции сравнения

Мнемоника
Описание
Операция Флаги
CP Rd, Rr Сравнение двух регистров Если (Rd – Rr) Z, N, V, C, H
CPC Rd, Rr Сравнение регистров с учётом переноса Если (Rd – Rr — C) Z, N, V, C, H
CPI Rd, K Сравнение регистра с константой Если (Rd – K) Z, N, V, C, H
CPSE Rd, Rr Сравнение регистров и пропуск следующей команды если они равны Если (Rd = Rr) PC ← PC + 2 (или 3)

Операции сдвига

Мнемоника Описание Операция Флаги
ASR Rd Арифметический сдвиг вправо Rd(i) ← Rd(i+1) (n=0. .6), C ← Rd(0)
Z, C, N, V
LSL Rd Логический сдвиг влево Rd(i+1) ← Rd(i), Rd(0) ← 0, C ← Rd(7) Z, C, N, V
LSR Rd Логический сдвиг вправо Rd(i) ← Rd(i+1), Rd(7) ← 0, C ← Rd(0) Z, C, N, V
ROL Rd Сдвиг влево через перенос Rd(i+1) ← Rd(i), Rd(0) ← C, C ← Rd(7) Z, C, N, V
ROR Rd Сдвиг вправо через перенос Rd(i) ← Rd(i+1), Rd(7) ← C, C ← Rd(0) Z, C, N, V
SWAP Rd Обмен местами тетрад Rd(3..0) ↔ Rd(7..4)

Операции пересылки данных

Мнемоника Описание Операция Флаги
MOV Rd, Rr Пересылка между регистрами Rd ← Rr
MOVW Rd, Rr Пересылка между парами регистров R(d +1):Rd ← R(r+1):Rr
LDI Rd, K Загрузка константы в регистр Rd ← K
LD Rd, X Косвенное чтение Rd ← [X]
LD Rd, X+ Косвенное чтение с пост-инкрементом Rd ← [X], X ← X + 1
LD Rd, -X Косвенное чтение с пред-декрементом X ← X — 1, Rd ← [X]
LD Rd, Y Косвенное чтение Rd ← [Y]
LD Rd, Y+ Косвенное чтение с пост-инкрементом Rd ← [Y], Y ← Y + 1
LD Rd, -Y Косвенное чтение с пред-декрементом Y ← Y — 1, Rd ← [Y]
LDD Rd, Y+q Косвенное чтение со смещением Rd ← [Y+q]
LD Rd, Z
Косвенное чтение
Rd ← [Z]
LD Rd, Z+ Косвенное чтение с пост-инкрементом Rd ← [Z], Z ← Z + 1
LD Rd, -Z Косвенное чтение с пред-декрементом Z ← Z — 1, Rd ← [Z]
LDD Rd, Z+q Косвенное чтение со смещением Rd ← [Z+q]
LDS Rd, A Непосредственное чтение из ОЗУ Rd ← [A]
ST X, Rr Косвенная запись [X] ← Rr
ST X+, Rr Косвенная запись с пост-инкрементом [X] ← Rr, X ← X + 1
ST -X, Rr Косвенная запись с пред-декрементом X ← X — 1, [X] ← Rr
ST Y, Rr Косвенная запись [Y] ← Rr
ST Y+, Rr Косвенная запись с пост-инкрементом [Y] ← Rr, Y ← Y + 1
ST -Y, Rr Косвенная запись с пред-декрементом Y ← Y — 1, [Y] ← Rr
STD Y+q, Rr Косвенная запись со смещением [Y+q] ← Rr
ST Z, Rr Косвенная запись [Z] ← Rr
ST Z+, Rr Косвенная запись с пост-инкрементом [Z] ← Rr, Z ← Z + 1
ST -Z, Rr Косвенная запись с пред-декрементом Z ← Z — 1, [Z] ← Rr
STD Z+q, Rr Косвенная запись со смещением [Z+q] ← Rr
STS A, Rr Непосредственная запись в ОЗУ [A] ← Rr
LPM Загрузка данных из памяти программы R0 ← {Z}
LPM Rd, Z Загрузка данных из памяти программы в регистр Rd ← {Z}
LPM Rd, Z+ Загрузка данных из памяти программы с пост-инкрементом Z Rd ← {Z}, Z ← Z + 1
ELPM Расширенная загрузка данных из памяти программы R0 ← {RAMPZ:Z}
ELPM Rd, Z Расширенная загрузка данных из памяти программы в регистр Rd ← {RAMPZ:Z}
ELPM Rd, Z+ Расширенная загрузка данных из памяти программы с пост-инкрементом Z Rd ← {RAMPZ:Z}, Z ← Z + 1
SPM Запись в программную память {Z} ← R1:R0
IN Rd, P Пересылка из I/O-регистра в регистр Rd ← P
OUT P, Rr Пересылка из регистра в I/O-регистр P ← Rr
PUSH Rr Сохранение регистра в стеке STACK ← Rr
POP Rd Извлечение регистра из стека Rd ← STACK

Безусловные переходы

Мнемоника Описание Операция Флаги
RJMP A Относительный безусловный переход PC ← PC + A + 1
JMP A Длинный безусловный переход PC ← A
IJMP Непрямой безусловный переход PC ← Z
EIJMP Расширенный непрямой безусловный переход PC ← Z:EIND
RCALL A Относительный вызов подпрограммы PC ← PC + A + 1
CALL A Длинный вызов подпрограммы PC ← A
ICALL Непрямой вызов подпрограммы PC ← Z
EICALL Расширенный непрямой вызов подпрограммы PC ← Z:EIND
RET Возврат из подпрограммы PC ← STACK
RETI Возврат из подпрограммы обработки прерываний PC ← STACK I

Условные переходы

Все команды этой группы выполняют переход (PC ← PC + A + 1) при разных условиях.

Мнемоника Описание Условие Флаги
BRBC s, A Переход если флаг S сброшен Если SREG(S) = 0
BRBS s, A Переход если флаг S установлен Если SREG(S) = 1
BRCS A Переход по переносу Если C = 1
BRCC A Переход если нет переноса Если C = 0
BREQ A Переход если равно Если Z = 1
BRNE A Переход если не равно Если Z = 0
BRSH A Переход если больше или равно Если C = 0
BRLO A Переход если меньше Если C = 1
BRMI A Переход если отрицательное значение Если N = 1
BRPL A Переход если положительное значение Если N = 0
BRGE A Переход если больше или равно (со знаком) Если (N и V) = 0
BRLT A Переход если меньше (со знаком) Если (N или V) = 1
BRHS A Переход по половинному переносу Если H = 1
BRHC A Переход если нет половинного переноса Если H = 0
BRTS A Переход если флаг T установлен Если T = 1
BRTC A Переход если флаг T сброшен Если T = 0
BRVS A Переход по переполнению дополнительного кода Если V = 1
BRVC A Переход если нет переполнения дополнительного кода Если V = 0
BRID A Переход если прерывания запрещены Если I = 0
BRIE A Переход если прерывания разрешены Если I = 1
SBRC Rd, K Пропустить следующую команду если бит в регистре очищен Если Rd[K] = 0
SBRS Rd, K Пропустить следующую команду если бит в регистре установлен Если Rd[K] = 1
SBIC A, b Пропустить следующую команду если бит в регистре ввода/вывода очищен Если I/O(A, b) = 0
SBIS A, b Пропустить следующую команду если бит в регистре ввода/вывода установлен Если I/O(A, b) = 1

Управление устройством

Мнемоника Описание Операция Флаги
NOP Нет операции
SLEEP Переход в «спящий» режим
WDR Сброс сторожевого таймера
BREAK Приостановка программы (используется отладчиком)

Питание, система команд и архитектура МК AVR (Лекция) | МК


МК

 

ПЛАН ЛЕКЦИИ

1. Режимы пониженного энергопотребления

2. Система команд AVR

3. Архитектура микроконтроллеров AVR

 

1. Режимы пониженного энергопотребления

AVR  микроконтроллеры могут быть переведены программным путем в один из шести режимов пониженного энергопотребления.

  • Режим холостого хода (IDLE), в котором прекращает работу только процессор и фиксируется содержимое памяти данных, а внутренний генератор синхросигналов, таймеры, система прерываний и WATCHDOG-таймер продолжают функционировать.
  • Режим микропотребления (Power Down), в котором сохраняется содержимое регистрового файла, но останавливается внутренний генератор синхросигналов. Выход из Power Down возможен либо по общему сбросу микроконтроллера, либо по сигналу (уровень) от внешнего источника прерывания. При включенном WATCHDOG-таймере ток потребления в этом режиме составляет около 60. ..80 мкА, а при выключенном — менее 1 мкА для всех типов AVR. Вышеприведенные значения справедливы для величины питающего напряжения 5 В.
  • Режим сохранения энергии (Power Save), который реализован только у тех AVR, которые имеют в своем составе систему реального времени. В основном, режим Power Save идентичен Power Down, но здесь допускается независимая работа дополнительного таймера/счетчика RTC. Выход из режима Power Save возможен по прерыванию, вызванному или переполнением таймера/счетчика RTC, или срабатыванием блока сравнения этого счетчика. Ток потребления в этом режиме составляет 6…10 мкА при напряжении питания 5 В на частоте 32,768 кГц.
  • Режим подавления шума при работе аналого-цифрового преобразователя (ADC Noise Reduction). Как уже отмечалось, в этом режиме останавливается процессорное ядро, но разрешена работа АЦП, двухпроводного интерфейса I2C и сторожевого таймера.
  • Основной режим ожидания (Standby). Идентичен режиму Power Down, но здесь работа тактового генератора не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.
  • Дополнительный режим ожидания (Extended Standby). Идентичен режиму Power Save, но здесь работа тактового генератора тоже не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.

Микроконтроллеры AVR mega64, mega103 и mega128 имеют еще одну примечательную архитектурную особенность, позволяющую значительно снизить энергопотребление всего кристалла в целом, когда в процессе работы возникают вынужденные паузы ожидания. В этом случае целесообразно уменьшить ток потребления центрального процессора и периферийных устройств как в активном режиме, так и в режиме холостого хода, понизив основную тактовую частоту микроконтроллера. Для этой цели на кристалле размещен специальный предделитель, позволяющий делить основную тактовую частоту на целое число в диапазоне от 2 до 129. Включение/выключение данной функции осуществляется одной короткой командой в программе.

AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 Вольт. Температурные диапазоны работы микроконтроллеров AVR — коммерческий (0С…70С) и индустриальный (-40С…+85С). К сожалению, корпорация Atmel не выпускает и не планирует выпускать AVR для работы в автомобильном (-40С…+125С) и военном (-55С…+125С) температурных диапазонах.


Рис. 2.  Структурная схема AVR

 

            С точки зрения программиста AVR представляет собой 8-разрядный RISC микроконтроллер, имеющий быстрый Гарвардский процессор, память программ, память данных, порты ввода/вывода и различные интерфейсные схемы. Структурная схема микроконтроллера приведена на рис. 2. Гарвардская архитектура AVR реализует полное логическое и физическое разделение не только адресных пространств, но и информационных шин для обращения к памяти программ и к памяти данных, причем способы адресации и доступа к этим массивам памяти также различны. Подобное построение уже ближе к структуре цифровых сигнальных процессоров и обеспечивает существенное повышение производительности. Центральный процессор работает одновременно как с памятью программ, так и с памятью данных; разрядность шины памяти программ расширена до 16 бит.    Следующим шагом на пути увеличения быстродействия AVR является использование технологии конвейеризации, вследствие чего цикл «выборка — исполнение» команды заметно сокращен. Например, у микроконтроллеров семейства MCS51 короткая команда выполняется за 12 тактов генератора (1 машинный цикл), в течение которого процессор последовательно считывает код операции и исполняет ее. В PIC-контроллерах фирмы Microchip, где уже реализован конвейер, короткая команда выполняется в течение 8 периодов тактовой частоты (2 машинных цикла). За это время последовательно дешифрируется и считывается код операции, исполняется команда, фиксируется результат и одновременно считывается код следующей операции (одноуровневый конвейер). Поэтому в общем потоке команд одна короткая команда реализуется за 4 периода тактовой частоты или за один машинный цикл.

            В микроконтроллерах AVR тоже используется одноуровневый конвейер при обращении к памяти программ и короткая команда в общем потоке выполняется, как и в PIC-контроллерах, за один машинный цикл. Главное же отличие состоит в том, что этот цикл у AVR составляет всего один период тактовой частоты. Для сравнения, на рис. 3 приведены временные диаграммы при выполнении типовой команды для различных микроконтроллерных платформ.

 

2. Система команд AVR

Система команд AVR весьма развита и насчитывает до 133 различных инструкций. Почти все команды имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве случаев объединять в одной команде и код операции, и операнд(ы). Лишь немногие команды имеют размер в 2 слова (32 бит) и относятся к группе команд вызова процедуры CALL, длинных переходов в пределах всего адресного пространства JMP, возврата из подпрограмм RET и команд работы с памятью программ LPM.

Различают пять групп команд AVR: условного ветвления, безусловного ветвления, арифметические и логические операции, команды пересылки данных, команды работы с битами. В последних версиях кристаллов AVR семейства «mega» реализована функция аппаратного умножения, что придает новым микроконтроллерам еще больше привлекательности с точки зрения разработчика.

 

3. Архитектура микроконтроллеров AVR

Файл регистров быстрого доступа, содержит 32 8-разрядных рабочих регистра общего назначения связанных непосредственно с ALU. За один тактовый цикл из файла регистров выбираются два операнда, выполняется операция и результат вновь возвращается в файл регистров.

Шесть из 32 регистров могут быть использованы как три 16-разрядных регистра указателя косвенной адресации адресного пространства данных, обеспечивающие эффективное вычисление адресов. Один из этих указателей адреса используется, также, как указатель адреса для функции непрерывного просмотра таблиц. Эти 16-разрядные дополнительные регистры обозначаются X-регистр, Y-регистр и Z-регистр.

ALU поддерживает арифметические и логические операции между регистрами или между константой и регистром. Выполняются в ALU и операции с отдельными регистрами.

На рисунке показана AVR расширенная RISC архитектура микроконтроллеров ATmega603/103.

 

 

Рис. 5. Расширенная RISC архитектура микроконтроллеров ATmega603/103

 

В дополнение к операциям с регистрами, регистровый файл может использоваться и для обычной адресации памяти. Это объясняется тем, что файл регистров располагается по 32 самыми младшими адресами пространства данных, и к ним можно обращаться как к обычным ячейкам памяти.

Пространство памяти I/O содержит 64 адреса периферийных функций CPU таких как: регистры управления, таймеры/счетчики, аналого-цифровые преобразователи и другие I/O функции. К памяти I/O можно обращаться непосредственно или как к ячейкам пространства памяти соответствующим адресам регистра файлов $20 — $5F.

В микроконтроллерах AVR использованы принципы Гарвардской архитектуры — отдельные память и шины для программ и данных. При работе с памятью программ используется одноуровневый конвейер — в то время, как одна команда выполняется, следующая команда выбирается из памяти программ, Такой прием позволяет выполнять команду в каждом тактовом цикле. Памятью программ является внутрисистемно программируемая Flash память. За малым исключением AVR команды имеют формат одного 16-разрядного слова, в связи с чем каждый адрес памяти программ содержит одну 16-разрядную команду.        

В процессе обработки прерываний и вызовов подпрограмм адрес возврата счетчика команд (PC) сохраняется в стеке. Стек размещается в SRAM данных и, следовательно размер стека ограничен только общим размером SRAM и уровнем ее использования. Все пользовательские программы в подпрограммах возврата (прежде, чем подпрограммы или прерывания будут выполняться) должны инициализировать указатель стека (SP). 16-разрядный указатель стека, с возможностью чтения/записи располагается в пространстве I/O.

AVR архитектура поддерживает пять различных режимов адресации 4000 байт SRAM данных. Гибкий модуль обработки прерываний имеет в пространстве I/O свой управляющий регистр с дополнительным битом разрешения глобального прерывания в регистре статуса. Все прерывания имеют свои векторы прерывания в таблице векторов прерывания, располагаемой в начале памяти программ. Приоритеты прерываний соответствуют положению векторов прерываний — прерывание с наименьшим адресом вектора имеет наивысший приоритет.  

По разнообразию и количеству реализованных инструкций AVR больше похожи на CISC, чем на RISC процессоры. Например, у PIC-контроллеров система команд насчитывает до 75 различных инструкций, а у MCS51 она составляет 111. В целом, прогрессивная RISC архитектура AVR в сочетании с наличием регистрового файла и расширенной системы команд позволяет в короткие сроки создавать работоспособные программы с эффективным кодом как по компактности реализации, так и по скорости выполнения.

 

3.1. Регистровый файл быстрого доступа

Следующая отличительная черта архитектуры микроконтроллеров AVR — регистровый файл быстрого доступа, структурная схема которого показана на рис. 4. Каждый из 32-х регистров общего назначения длиной 1 байт непосредственно связан с арифметико-логическим устройством (ALU) процессора. Другими словами, в AVR существует 32 регистра — аккумулятора (сравните, например, с MCS51). Это обстоятельство позволяет в сочетании с конвейерной обработкой выполнять одну операцию в ALU за один машинный цикл. Так, два операнда извлекаются из регистрового файла, выполняется команда и результат записывается обратно в регистровый файл в течение только одного машинного цикла.

Рис. 3. Сравнительная характеристика некоторых микропроцессорных платформ

 

Шесть из 32-х регистров файла могут использоваться как три 16-разрядных указателя адреса при косвенной адресации данных. Один из этих указателей (Z Pointer) применяется также для доступа к данным, записанным в памяти программ микроконтроллера. Использование трех 16-битных указателей (X, Y и Z Pointers) существенно повышает скорость пересылки данных при работе прикладной программы.

 


Рис. 4.  Регистровый файл

 

Регистровый файл занимает младшие 32 байта в общем адресном пространстве SRAM AVR. Такое архитектурное решение позволяет получать доступ к быстрой «регистровой» оперативной памяти микроконтроллера двумя путями - непосредственной адресацией в коде команды к любой ячейке и другими способами адресации ячеек SRAM.

В технической документации фирмы Atmel это полезное свойство носит название «быстрое контекстное переключение» и является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность. Особенно заметно данное преимущество при реализации процедур целочисленной 16-битной арифметики, когда исключаются многократные пересылки между различными ячейками памяти данных при обработке арифметических операндов в ALU.

 


Руководство по подключению программатора Pocket AVR

Авторы: Джимблом, Бибойхо

Избранное Любимый 10

Если вам нужен больший контроль над вашим карманным программатором AVR и AVR, к которому он подключен, следуйте приведенным ниже инструкциям. Мы продемонстрируем, как использовать AVRDUDE, чудо-утилиту командной строки с открытым исходным кодом для чтения, записи и управления AVR.

Если у вас есть Arduino, то у вас уже установлен AVRDUDE — это внутренний инструмент, который Arduino использует для загрузки скетчей. Если вам нужно установить AVRDUDE отдельно, ознакомьтесь с документацией в разделе загрузок AVRDUDE. 9Файлы 0009 avrdude-doc-X.XX.pdf (например, avrdude-doc-6.3.pdf ) особенно полезны при установке AVRDUDE для вашей операционной системы, если у вас есть проблемы с использованием команд AVRDUDE в любом каталоге через командную строку.

AVRDUDE: Downloads

Sanity Check — AVRDUDE Paths

AVRDUDE — это инструмент командной строки , поэтому для его использования вам потребуется открыть «Командную строку» (Windows) или « Терминал» (Mac/Linux). Чтобы убедиться, что AVRDUDE работает, рекомендуется сначала провести небольшую проверку работоспособности. Откройте командную строку и введите следующую команду.

 язык: bash
авродуде
 

Вы должны увидеть вывод, подобный изображенному ниже.

Проверка работоспособности — Проверка подписи устройства

Примечание: В следующем примере предполагается, что к другому концу вашего программатора подключен ATmega328P . Если у вас другой тип микроконтроллера, вам нужно сформулировать немного другую команду, см. раздел «Указание программатора и устройства AVR» ниже.

Чтобы убедиться, что AVRDUDE работает, а ваш программатор AVR Pocket Programmer подключен правильно, рекомендуется выполнить еще одну небольшую проверку работоспособности. Введите это в командную строку:

 язык: bash
avrdude -c usbtiny -p atmega328p
 

Если все подключено правильно, вы должны получить такой ответ:

Эта базовая команда определяет тип используемого программатора и AVR, с которым он взаимодействует. AVRDUDE попытается прочитать сигнатуру устройства из вашего AVR, которая отличается для каждого типа AVR. Каждый ATmega328P должен иметь подпись устройства 0x1E950F .

Программирование флэш-памяти

Внимание! В этом примере предполагается, что фьюз-биты (т. е. младший, высокий и расширенный) уже установлены до прошивки файла .hex. Поскольку мы используем RedBoard, запрограммированную с помощью Arduino, мы можем записать на плату файл .hex.

Теперь, когда вы убедились, что все в рабочем состоянии, вы можете выполнять любые операции чтения и записи памяти с помощью AVRDUDE. Основная часть памяти, которую вы, вероятно, захотите записать, — это флэш-память — энергонезависимая память, в которой хранятся программы.

Внимание! Записав следующий файл blink.hex на микроконтроллер AVR, он перезапишет то, что находится в памяти. В файле нет загрузчика Arduino, поэтому вы не сможете загружать через последовательный порт с помощью Arduino IDE, пока не переустановите загрузчик с соответствующим микроконтроллером. Если вы используете RedBoard, запрограммированную с помощью Arduino, вы все равно можете переустановить загрузчик, чтобы снова загрузить его через последовательный порт. На плате используется optiboot_atmega328.hex . Вы можете найти это в папке программы Arduino по пути …\arduino-1.8.5\hardware\arduino\avr\bootloaders\optiboot или в разделе « Переустановка загрузчика RedBoard Arduino Bootloader » далее в этом руководстве.

В этом примере в качестве примера будет использоваться файл blink.hex . Загрузите следующие файлы ниже. Если вы используете файл blink.hex , убедитесь, что вы разархивировали папку и поместили ее в рабочий каталог.

Download Blink Here (ZIP)

Эта команда выполняет базовую запись во флэш-память с использованием HEX-файла.

 язык: Баш
avrdude -c usbtiny -p atmega328p -U flash:w:blink.hex
 

Запись во флэш-память займет немного больше времени, чем чтение битов подписи. Вы увидите текстовую строку состояния, прокручивающуюся по мере того, как устройство считывается, записывается и проверяется.

Команда опции -U обрабатывает все операции чтения и записи памяти. Говорим ему, что хотим работать с flash , выполните запись с помощью w , а затем укажите расположение шестнадцатеричного файла, который мы хотим записать.

Чтение флэш-памяти

Команда -U также может использоваться для чтения содержимого памяти AVR. Команда, подобная приведенной ниже, например, прочитает содержимое вашего AVR и сохранит его в файле с именем « secret.hex ».

 язык: Баш
avrdude -c usbtiny -p atmega328p -U flash:r:mystery.hex:r
 

Это невероятно полезно, если вы хотите скопировать содержимое одного Arduino на другой. Или, может быть, вы мазохист и хотите попробовать реконструировать загадочный код в AVR.

Переустановка загрузчика Arduino RedBoard

Теперь, когда вы научились прошивать шестнадцатеричные файлы на RedBoard, попробуйте переустановить загрузчик с помощью следующего файла. Загрузите файл.

RedBoard запрограммирован с помощью загрузчика Arduino (HEX)

Перейдите по пути загрузки загрузчика и введите следующую команду.

 язык: Баш
avrdude -c usbtiny -p atmega328p -U flash:w:optiboot_atmega328_2012_with_1s_watchdog.hex
 

Если все пойдет хорошо, вы должны получить сообщение о том, что файл написан, проверен и загрузка завершена. Вы должны получить результат, аналогичный показанному ниже. В этом случае файл конфигурации (т.е. avrdude.conf ) и загрузчик ( *.hex ) не находились в одном рабочем каталоге. Требовались две дополнительные команды, чтобы указать, где искать файлы. Кроме того, формат *.hex необходимо было автоматически определять при прошивке файла путем добавления .

Вернитесь в Arduino IDE, отсоедините USB-кабель от программатора и подключитесь к USB-порту RedBoard, чтобы посмотреть, сможете ли вы загрузить простой скетч blink.ino обратно на плату через последовательный порт. Перед загрузкой обязательно выберите соответствующее определение платы и COM-порт. Вы должны увидеть знакомое сообщение, указывающее, что Arduino IDE «Выполняется загрузка» после завершения, а встроенный светодиод начинает мигать на контакте 13.


Полезные параметры

Вот несколько последних советов и приемов AVRDUDE, прежде чем мы отправим вас в мир AVR.

Укажите программатор и устройство AVR

Для использования AVRDUDE требуются два варианта: программатор типа и устройство AVR. Спецификация :

  • -c usbtiny . Если вам нужно использовать другой программатор, ознакомьтесь с этой страницей и CTRL + F до « -c идентификатор программиста ».

  • Тип устройства AVR определяется параметром -p . Мы показали несколько примеров с ATmega328P, но что, если вы используете ATtiny85? В этом случае вам нужно будет вместо этого поставить -p t85 . Проверьте вверху этой страницы исчерпывающий список совместимых типов устройств AVR.

Подробный вывод

Добавление одного или нескольких -v к вашей команде AVRDUDE активирует различные уровни детализации действия. Это удобно, если вам нужна сводка параметров конфигурации или подробное представление о том, какие данные отправляются на ваш AVR.


Есть много других источников. Полный список команд можно найти в онлайн-документации AVRDUDE в разделе «Описания параметров».

Онлайн-документация AVRDUDE: описания опций



Набор инструментов AVR — документация UTAT Space Systems 1.0

Набор инструментов AVR — это набор инструментов с открытым исходным кодом, которые можно использовать вместе для компиляции и загрузки программ в микроконтроллеры на базе AVR, таких как микроконтроллер ATMega32M1, используемый в подсистеме Heron Mk II микроконтроллеры.

Установка и понимание того, как использовать набор инструментов AVR, является первым шаг к участию в кодовой базе Heron Mk II.

Глоссарий

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

  • SSM: сокращение от подсистемы микроконтроллера; это относится к микроконтроллер, который управляет конкретной платой подсистемы.
  • 32M1: сокращение от ATMega32M1.
  • MCU: сокращение от микроконтроллера.
  • Библиотека: автономная единица кода, предназначенная для повторного использования.
  • Заголовок: файл, описывающий интерфейс к определенной единице кода. Заголовок файлы заканчиваются на .h .
  • SPI: последовательный периферийный интерфейс; механизм связи 32М1 с периферийными устройствами, такими как внешние датчики.
  • CAN: локальная сеть контроллера; надежная шина, по которой взаимодействуют все SSM друг с другом.

Компилятор AVR-GCC

Компилятор AVR-GCC — это инструмент, используемый для компиляции и связывания кода C для создания исполняемый файл, который может работать на 32M1. Как правило, компиляция относится к процесс преобразования структурированных данных из одной формы в другую. Компилятор AVR-GCC преобразует код C в машинные инструкции, которые 32M1 может выполнить. Он также связывает этот код вместе в исполняемый файл; программа который можно запустить на 32M1.

На самом деле, AVR-GCC делает гораздо больше, в том числе предупреждает вас о определенные виды ошибок в вашем коде (ошибки типов) и выполнение оптимизаций для уменьшения размера кода.

При установке AVR-GCC также устанавливается множество других полезных программ, таких как avr-objcopy , avr-ar и avr-objdump . Вы узнаете об этих инструментах позже.

AVR-GCC основан на хорошо известном компиляторе GCC. Чтобы узнать больше о AVR-GCC и GCC, посмотрите здесь.

AVR-GCC можно вызвать, запустив avr-gcc в командной строке. Вы не будете обычно приходится вызывать компилятор AVR-GCC самостоятельно; как вы увидите процесс компиляции вашего кода можно автоматизировать до такой степени, что он становится единым команда.

AVR libc

AVR libc — это библиотека, которая предоставляет все стандартные заголовочные файлы C и их реализации, а также специальный код, используемый для доступа к уникальным функциям к микроконтроллерам на основе AVR, таким как доступ к контактам, обработка аппаратных прерываний и взаимодействие с периферийными устройствами.

Всякий раз, когда вы используете стандартные библиотеки C, например, через #include или #include , вы неявно используете AVR libc.

Чтобы узнать больше о AVR libc, прочтите онлайн-документацию. здесь.

avrdude

Avrdude — это приложение командной строки, которое при использовании в сочетании с программатор, может загружать содержимое определенного файла во флэш-память 32M1 Память. Мы используем avrdude для загрузки исполняемых файлов на 32M1.

Avrdude записывает во флэш-память 32M1, используя протокол, называемый In-Circuit серийное программирование; Провайдер для краткости.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *