Справочник по командам ассемблера 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.![]() | — |
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.![]() | 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 | Приостановка программы (используется отладчиком) | — | — |
МК
ПЛАН ЛЕКЦИИ 1. 2. Система команд AVR 3. Архитектура микроконтроллеров AVR
1. Режимы пониженного энергопотребления AVR микроконтроллеры могут быть переведены программным путем в один из шести режимов пониженного энергопотребления.
Микроконтроллеры
AVR mega64, mega103 и mega128 имеют еще одну примечательную архитектурную
особенность, позволяющую значительно снизить энергопотребление всего кристалла
в целом, когда в процессе работы возникают вынужденные паузы ожидания. В этом
случае целесообразно уменьшить ток потребления центрального процессора и
периферийных устройств как в активном режиме, так и в режиме холостого хода,
понизив основную тактовую частоту микроконтроллера. AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 Вольт. Температурные диапазоны работы микроконтроллеров AVR — коммерческий (0С…70С) и индустриальный (-40С…+85С). К сожалению, корпорация Atmel не выпускает и не планирует выпускать AVR для работы в автомобильном (-40С…+125С) и военном (-55С…+125С) температурных диапазонах.
С точки зрения программиста AVR
представляет собой 8-разрядный RISC микроконтроллер, имеющий быстрый
Гарвардский процессор, память программ, память данных, порты ввода/вывода и
различные интерфейсные схемы. Структурная схема микроконтроллера приведена на
рис. В микроконтроллерах AVR тоже используется одноуровневый конвейер при обращении к памяти программ и короткая команда в общем потоке выполняется, как и в PIC-контроллерах, за один машинный цикл. Главное же отличие состоит в том, что этот цикл у AVR составляет всего один период тактовой частоты. Для сравнения, на рис. 3 приведены временные диаграммы при выполнении типовой команды для различных микроконтроллерных платформ.
2. Система команд AVR Система команд
AVR весьма развита и насчитывает до 133 различных инструкций. Почти все команды
имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве
случаев объединять в одной команде и код операции, и операнд(ы). Различают пять групп команд 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)
сохраняется в стеке. AVR архитектура поддерживает пять различных режимов адресации 4000 байт SRAM данных. Гибкий модуль обработки прерываний имеет в пространстве I/O свой управляющий регистр с дополнительным битом разрешения глобального прерывания в регистре статуса. Все прерывания имеют свои векторы прерывания в таблице векторов прерывания, располагаемой в начале памяти программ. Приоритеты прерываний соответствуют положению векторов прерываний — прерывание с наименьшим адресом вектора имеет наивысший приоритет. По
разнообразию и количеству реализованных инструкций AVR больше похожи на CISC,
чем на RISC процессоры.
3.1. Регистровый файл быстрого доступа Следующая
отличительная черта архитектуры микроконтроллеров AVR — регистровый файл
быстрого доступа, структурная схема которого показана на рис. 4. Каждый из 32-х
регистров общего назначения длиной 1 байт непосредственно связан с
арифметико-логическим устройством (ALU) процессора. Другими словами, в AVR
существует 32 регистра — аккумулятора (сравните, например, с MCS51). Это
обстоятельство позволяет в сочетании с конвейерной обработкой выполнять одну операцию
в ALU за один машинный цикл. Рис. 3. Сравнительная характеристика некоторых микропроцессорных платформ
Шесть из 32-х регистров файла могут использоваться как три 16-разрядных указателя адреса при косвенной адресации данных. Один из этих указателей (Z Pointer) применяется также для доступа к данным, записанным в памяти программ микроконтроллера. Использование трех 16-битных указателей (X, Y и Z Pointers) существенно повышает скорость пересылки данных при работе прикладной программы.
Регистровый
файл занимает младшие 32 байта в общем адресном пространстве SRAM AVR. Такое
архитектурное решение позволяет получать доступ к быстрой
«регистровой» оперативной памяти микроконтроллера двумя путями -
непосредственной адресацией в коде команды к любой ячейке и другими способами
адресации ячеек SRAM. В технической документации фирмы Atmel это полезное свойство носит название «быстрое контекстное переключение» и является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность. Особенно заметно данное преимущество при реализации процедур целочисленной 16-битной арифметики, когда исключаются многократные пересылки между различными ячейками памяти данных при обработке арифметических операндов в ALU.
|
||
Авторы: Джимблом, Бибойхо
Избранное Любимый 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
серийное программирование; Провайдер для краткости.