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

Что такое система команд микроконтроллеров AVR. Как устроена архитектура AVR. Какие группы команд существуют в AVR. Чем отличается система команд AVR от других микроконтроллеров.

Система команд микроконтроллеров AVR является одной из самых развитых среди 8-битных микроконтроллеров. Она насчитывает до 133 различных инструкций, что делает AVR очень гибкими и функциональными устройствами. Рассмотрим подробнее особенности системы команд AVR и ее ключевые характеристики.

Содержание

Архитектура AVR и ее влияние на систему команд

Микроконтроллеры AVR имеют гарвардскую архитектуру, которая предполагает физическое разделение памяти программ и памяти данных. Это позволяет оптимизировать доступ к обоим типам памяти и повысить производительность. Основные особенности архитектуры AVR, влияющие на систему команд:

  • 32 8-разрядных регистра общего назначения, связанных напрямую с АЛУ
  • Одноуровневый конвейер выполнения команд
  • Большинство команд выполняются за 1 такт
  • Отдельные шины для памяти программ и памяти данных
  • Расширенная система команд, близкая к CISC-архитектуре

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


Основные группы команд AVR

Система команд AVR включает следующие основные группы инструкций:

1. Команды пересылки данных

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

  • MOV — пересылка между регистрами
  • LD/LDI — загрузка из памяти/загрузка константы
  • ST — сохранение в память
  • PUSH/POP — работа со стеком

2. Арифметические и логические операции

Данная группа включает команды для выполнения математических и логических операций над данными:

  • ADD/SUB — сложение/вычитание
  • AND/OR/EOR — логические операции
  • INC/DEC — инкремент/декремент
  • MUL — умножение (в некоторых моделях)

3. Команды ветвления

Эти инструкции управляют ходом выполнения программы:

  • JMP — безусловный переход
  • BREQ/BRNE — условные переходы
  • CALL/RET — вызов и возврат из подпрограмм
  • RJMP — относительный переход

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

AVR предоставляет широкие возможности для манипуляций с отдельными битами:

  • SBI/CBI — установка/сброс бита в I/O регистре
  • BST/BLD — работа с T-флагом
  • LSL/LSR — логические сдвиги

5. Команды управления системой

Эта группа включает инструкции для управления режимами работы микроконтроллера:


  • NOP — пустая операция
  • SLEEP — переход в режим сна
  • WDR — сброс сторожевого таймера

Особенности системы команд AVR

Система команд AVR имеет ряд отличительных особенностей:

  • Большинство команд имеют фиксированную длину 16 бит
  • Почти все команды выполняются за 1 машинный такт
  • Широкие возможности по работе с отдельными битами
  • Наличие команд для эффективной работы с 16-битными данными
  • Поддержка аппаратного умножения в некоторых моделях

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

Сравнение системы команд AVR с другими микроконтроллерами

Система команд AVR имеет ряд преимуществ по сравнению с другими популярными семействами 8-битных микроконтроллеров:

  • Более развитая система команд по сравнению с PIC (133 команды против 75)
  • Более быстрое выполнение команд по сравнению с MCS-51 (1 такт против 12)
  • Наличие команд для эффективной работы с 16-битными данными
  • Широкие возможности по битовым операциям

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


Влияние системы команд на энергопотребление

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

  • Быстрое выполнение команд сокращает время активной работы
  • Наличие специальных команд для перехода в режимы сна
  • Возможность отключения неиспользуемых узлов микроконтроллера
  • Эффективная работа с битовыми данными без лишних операций

Эти особенности делают AVR хорошим выбором для создания энергоэффективных устройств с батарейным питанием.

Программирование на ассемблере AVR

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

  • Максимальный контроль над ресурсами микроконтроллера
  • Создание очень компактного и быстрого кода
  • Возможность использования всех возможностей архитектуры AVR
  • Эффективная оптимизация критичных участков кода

При этом программирование на ассемблере требует глубокого понимания архитектуры и системы команд AVR.


Заключение

Система команд микроконтроллеров AVR является одной из самых развитых и эффективных среди 8-битных микроконтроллеров. Она обеспечивает высокую производительность, энергоэффективность и гибкость при разработке программного обеспечения. Глубокое понимание системы команд AVR позволяет создавать оптимальные программы и максимально использовать возможности этих микроконтроллеров.


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

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

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

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

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

Команда:

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

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

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

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

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

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

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

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

МнемоникаОписаниеОперацияФлаги
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+Загрузка данных из памяти программы с пост-инкрементом ZRd ← {Z}, Z ← Z + 1
ELPMРасширенная загрузка данных из памяти программыR0 ← {RAMPZ:Z}
ELPM Rd, ZРасширенная загрузка данных из памяти программы в регистрRd ← {RAMPZ:Z}
ELPM Rd, Z+Расширенная загрузка данных из памяти программы с пост-инкрементом ZRd ← {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 ← STACKI

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

Все команды этой группы выполняют переход (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 не будет опубликован. Обязательные поля помечены *