AVR

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
AVR
Изображение логотипа
Микроконтроллер ATmega328P в составе консоли MAKERbuino.
Микроконтроллер ATmega328P в составе консоли MAKERbuino.
Разработчик ранее Atmel, с 2016 года — Microchip
Разрядность 8 бит
Представлена 1996 год[1]
Тип гарвардская архитектура
Логотип Викисклада Медиафайлы на Викискладе

AVR — это семейство восьмибитных микроконтроллеров, разрабатываемое с 1996 года компанией Atmel, которая в 2016 году была поглощена Microchip. Семейство AVR было одним из первых, которое использовало встроенную флэш-память для хранения программ, в отличие от ROM, EPROM или EEPROM, используемых другими микроконтроллерами в то время.

Микроконтроллеры этого семейства нашли широкое применение во встраиваемых системах. Они часто встречаются в проектах энтузиастов благодаря их популяризации платформой Arduino.

Идея разработки нового RISC-ядра принадлежит двум студентам Норвежского университета естественных и технических наук из города Тронхейм — Альфу Богену (Alf-Egil Bogen) и Вегарду Воллену (Vegard Wollen). В 1995 году Боген и Воллен решили предложить американской корпорации Atmel, которая была известна своими чипами с Flash-памятью, выпускать новый 8-битный RISC-микроконтроллер и снабдить его Flash-памятью для программ на одном кристалле с вычислительным ядром.

Идея была одобрена компанией и было принято решение незамедлительно инвестировать в данную разработку. В конце 1996 года был выпущен опытный микроконтроллер AT90S1200, а во второй половине 1997 г. корпорация Atmel приступила к серийному производству нового семейства микроконтроллеров, к их рекламной и технической поддержке. К 2003 году компания продала 500 миллионов микроконтроллеров AVR[2]. В 2005 году, на базе микроконтроллеров семейства AVR была построена платформа Arduino.

Новое ядро было запатентовано и получило название AVR. Существуют различные мнения насчёт того, что означает это название[1]. Одним из вариантом является "Advanced Virtual RISC", а другим - "Alf and Vegard RISC".

Описание архитектуры

[править | править код]

Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединённых в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны:

  • Некоторые команды работают только с регистрами r16…r31. К ним относятся команды, работающие с непосредственным операндом: ANDI/CBR, ORI/SBR, CPI, LDI, LDS (16-бит), STS (16-бит), SUBI, SBCI, а также SER и MULS;
  • Команды, увеличивающие и уменьшающие 16-битное значение (в тех моделях, где они доступны) с непосредственным операндом (ADIW, SBIW), работают только с одной из пар r25:r24, r27:r26 (X), r29:r28 (Y) или r31:r30 (Z);
  • Команда копирования пары регистров (в тех моделях, где доступна) работает только с соседними регистрами, начинающимися с нечётного (r1:r0, r3:r2, …, r31:r30);
  • Результат умножения (в тех моделях, в которых есть модуль умножения) всегда помещается в r1:r0. Также только эта пара используется в качестве операндов для команды самопрограммирования (где доступна);
  • Некоторые варианты команд умножения принимают в качестве аргументов только регистры из диапазона r16…r23 (FMUL, FMULS, FMULSU, MULSU).

Система команд

[править | править код]

Система команд микроконтроллеров AVR весьма развита и насчитывает в различных моделях от 90 до 135[3] различных команд.

Большинство команд занимает только 1 ячейку памяти (16 бит) и выполняются за 1 такт.

Всё множество команд микроконтроллеров AVR можно разбить на несколько групп:

  • команды логических операций;
  • команды арифметических операций и команды сдвига;
  • команды операции с битами;
  • команды пересылки данных;
  • команды передачи управления;
  • команды управления системой.

Управление периферийными устройствами осуществляется через адресное пространство данных. Для удобства существуют «сокращённые команды» IN/OUT.

Семейства микроконтроллеров

[править | править код]

Стандартные семейства:

  • tinyAVR (ATtinyxxx):
  • megaAVR (ATmegaxxx):
    • Флеш-память до 256 КБ; SRAM до 16 КБ; EEPROM до 4 КБ;
    • Число линий ввода-вывода 23-86 (общее количество выводов 28-100);
    • Аппаратный умножитель;
    • Расширенная система команд и периферийных устройств.
  • XMEGA AVR (ATxmegaxxx):
    • Флеш-память до 384 КБ; SRAM до 32 КБ; EEPROM до 4 КБ;
    • Четырёхканальный DMA-контроллер;
    • Инновационная система обработки событий.

Как правило, цифры после префикса обозначают объём встроенной flash-памяти (в КБ) и модификацию контроллера. А именно — максимальная степень двойки, следующая за префиксом, обозначает объём памяти, а оставшиеся цифры определяют модификацию (напр., ATmega128 — объём памяти 128 КБ; ATmega168 — объём памяти 16 КБ, модификация 8; ATtiny44 и ATtiny45 — память 4 КБ, модификации 4 и 5 соответственно).[источник не указан 4453 дня]

На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные задачи:

Кроме указанных выше семейств, ATMEL выпускает 32-разрядные микроконтроллеры семейства AVR32, которое включает в себя подсемейства AT32UC3 (тактовая частота до 66 МГц) и AT32AP7000 (тактовая частота до 150 МГц).

Версии контроллеров

[править | править код]

AT (mega/tiny)xxx — базовая версия. Существуют и другие версии:

  • ATxxxL — версии контроллеров, работающих на пониженном (Low) напряжении питания (2,7 В).
  • ATxxxV — версии контроллеров, работающих на низком напряжении питания (1,8 В).
  • ATxxxP — версии с малым потреблением тока (до 100 нА в режиме Power-down), применена технология picoPower (анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.
  • ATxxxA — уменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями). Микроконтроллеры «А» и «не-А» обычно имеют одинаковую сигнатуру, что вызывает некоторые трудности, так как Fuse-bit’ы отличаются.

Номер модели дополняется индексом, указывающим вариант исполнения. Цифры (8, 10, 16, 20) перед индексом означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания).

Первая буква индекса означает вариант корпуса:

  • АТxxx-P — корпус DIP
  • АТxxx-A — корпус TQFP
  • АТxxx-J — корпус PLCC
  • АТxxx-M — корпус MLF
  • АТxxx-MA — корпус UDFN/USON
  • АТxxx-C — корпус CBGA
  • АТxxx-CK — корпус LGA
  • АТxxx-S — корпус EIAJ SOIC
  • АТxxx-SS — узкий корпус JEDEC SOIC
  • АТxxx-T — корпус TSOP
  • АТxxx-TS — корпус SOT-23 (ATtiny4/5/9/10)
  • АТxxx-X — корпус TSSOP

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

  • АТxxx-xC — коммерческий температурный диапазон (0 °C — 70 °C)
  • АТxxx-xA — температурный диапазон −20 °C — +85 °C, с использованием бессвинцового припоя
  • АТxxx-xI — индустриальный температурный диапазон (-40 °C — +85 °C)
  • АТxxx-xU — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припоя
  • АТxxx-xH — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAu
  • АТxxx-xN — расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припоя
  • АТxxx-xF — расширенный температурный диапазон (-40 °C — +125 °C)
  • АТxxx-xZ — автомобильный температурный диапазон (-40 °C — +125 °C)
  • АТxxx-xD — расширенный автомобильный температурный диапазон (-40 °C — +150 °C)

последняя буква R означает упаковку в ленты (Tape & Reel) для автоматизированных систем сборки.

Устройства ввода-вывода

[править | править код]

Микроконтроллеры данного семейства имеют развитую периферию[4]:

  • До 86 многофункциональных двунаправленных GPIO линий ввода-вывода, объединённых в 8-битные порты ввода-вывода. В зависимости от программно-задаваемой конфигурации регистров могут независимо друг от друга работать в режиме «сильного» драйвера, выдающего или принимающего (на «землю») ток до 40 мА, что достаточно для подключения светодиодных индикаторов. Любой из выводов портов может быть сконфигурирован на «ввод» либо в свободном состоянии, либо с использованием встроенного подтягивающего (на плюс) резистора.
  • До 3 внешних источников прерываний (по фронту, срезу или уровню) и до 32 — по изменению уровня на входе.
  • В качестве источника тактовых импульсов может быть выбран:
    • керамический или кварцевый резонатор (не у всех моделей);
    • внешний тактовый сигнал;
    • калиброванный внутренний RC-генератор (частота 1, 2, 4, 8 МГц, а также, для некоторых моделей ATtiny — 4,8, 6,4, 9,6 МГц и 128 кГц).
  • Внутренняя флеш-память команд до 256 KБ (не менее 10 000 циклов перезаписи).
  • Отладка программ осуществляется с помощью интерфейсов JTAG или debugWIRE:
    • сигналы JTAG (TMS, TDI, TDO и TCK) мультиплексированы на порт ввода-вывода. Режим работы — JTAG или порт — задаётся соответствующим битом в регистре fuses. МК AVR поставляются с включённым интерфейсом JTAG.
  • Внутренняя память данных EEPROM до 4 КБ (ATmega/ATxmega)/512 байт (ATtiny) (до 100 000 циклов перезаписи).
  • Внутренняя память SRAM до 32 KБ (ATxmega)/16 Кб (ATmega)/1 Кб (ATtiny) c временем доступа 2 такта.
  • Внешняя память объёмом до 64 КБ (ATmega8515, ATmega162, ATmega640, ATmega641, ATmega1280, ATmega1281, ATmega2560, ATmega256).
  • Таймеры c разрядностью 8, 16 бит.
  • ШИМ-модулятор (PWM) 8-, 9-, 10-, 16-битный.
  • Аналоговые компараторы.
  • АЦП (ADC) с дифференциальными входами, разрядность 8 (ATtiny)/10 (ATtiny/ATmega)/12 (ATxmega) бит:
    • программируемый коэффициент усиления перед АЦП 1, 10 и 200 (в дифференциальном режиме);
    • в качестве опорного напряжения могут выступать: напряжение питания, внешнее напряжение или внутреннее некалиброванное опорное напряжение около 2,56 В (для моделей, имеющих минимальное напряжение питания от 2,7 В и выше) либо 1,1 В (с минимальным напряжением питания 1,8 В).
  • Различные последовательные интерфейсы, включая:
    • двухпроводной интерфейс TWI, совместимый с I²C;
    • универсальный синхронно/асинхронный приёмопередатчик UART/USART;
    • синхронный последовательный порт Serial Peripheral Interface (SPI).
  • USB серия AT90USBxxxx.
  • CAN серия AT90CANxxx.
  • LCD серии ATmega169 и ATmega329.
  • Датчики температуры ATtiny25, ATtiny45, ATtiny85.
  • Почти все (за исключением некоторых ранних моделей ATtiny, у которых перепрограммирование идёт по особому интерфейсу) поддерживают внутрисхемное программирование (ISP) через последовательный интерфейс SPI. Многие микроконтроллеры поддерживают альтернативное последовательное или параллельное программирование с использованием высокого напряжения, для случаев, если fuse-регистры были настроены так, что обычное программирование стало недоступно.
  • Поддержка самопрограммирования, при котором основная программа может изменить часть своего кода.
  • Поддержка загрузки основной программы с помощью защищённой от перезаписи подпрограммы (bootloader). Код основной программы обычно принимается через один из портов микроконтроллера с использованием одного из стандартных протоколов.
  • Ряд режимов пониженного энергопотребления.

Средства разработки

[править | править код]

Аппаратные средства разработки

[править | править код]
Плата разработчика Atmel STK500
AVR Dragon с интерфейсом внутрисхемного программирования, а также добавленной ZIF-панелькой под ИМС
AVRISP mkII-ISP-Programmer от Atmel

Официальные средства разработки для AVR от Atmel:

  • STK600 starter kit
  • STK500 starter kit
  • STK200 starter kit
  • AVRISP and AVRISP mkII
  • AVR Dragon
  • USBasp — USB
  • JTAGICE mkI
  • JTAGICE mkII
  • JTAGICE3
  • ATMEL-ICE
  • AVR ONE!
  • Butterfly demonstration board
  • AT90USBKey
  • Raven wireless kit

Также существует много сторонних средств, особенно любительских.

Программные средства разработки

[править | править код]
  • Algorithm Builder — алгоритмическая среда разработки программного обеспечения для микроконтроллеров с архитектурой AVR (последнее обновление в 2010 г).
  • AVR-Eclipse — плагин для среды разработки Eclipse, позволяющий разрабатывать программы на C/C++ и ассемблере, программировать и отлаживать контроллеры, используя внешний набор инструментов (Atmel AVR Toolchain, WinAVR)
  • avra — консольный макро-ассемблер для Linux/MacOS.
  • Avrdude — средство для прошивки микроконтроллеров.
  • AVRDUDE_PROG 3.1 — визуальный редактор.
  • Code::Blocks — кроссплатформенная среда разработки.
  • DDD — графический интерфейс к avr-gdb.
  • eXtreme Burner — AVR — графический интерфейс для USBasp-based USB AVR программаторов.
  • Khazama AVR Programmer — графический интерфейс в Windows для USBasp и avrdude.
  • PonyProg — универсальный программатор через LPT-порт, COM-порт (поддерживается и USB-эмулятор COM-порта).
  • V-USB — программная реализация протокола USB для микроконтроллеров AVR.
  • WinAVR — программный пакет под Windows, включающий в себя компилятор, ассемблер, компоновщик и другие инструменты.
  • Zadig 2.3
  • Microchip Studio — бесплатная IDE от самой Microchip.
  • IAR AVR — коммерческая среда разработки для микроконтроллеров AVR.
  • Bascom-avr — среда разработки, основанная на Basic-подобном языке программирования.
  • CodeVisionAVR — компилятор C и программатор — CVAVR, генератор начального кода.
  • Proteus — симулятор электрических цепей, компонентов, включая различные МК и другое периферийное оборудование.

Также архитектура AVR позволяет применять операционные системы при разработке приложений, например: FreeRTOS, uOS, ChibiOS/RT, scmRTOS, TinyOS, Femto OS и Linux на AVR32.[5]

Примечания

[править | править код]
  1. 1 2 Definition of AVR (англ.). PCMAG. Дата обращения: 17 августа 2024.
  2. Atmel press release. "Atmel's AVR Microcontroller Ships 500 Million Units".
  3. Архивированная копия. Дата обращения: 28 января 2021. Архивировано 6 мая 2021 года.
  4. Не все периферийные устройства могут быть включены программно. Некоторые из них предварительно должны быть активированы битами в регистрах Fuses, которые могут быть изменены только программатором.
  5. AVR32737: AVR32 AP7 Linux Getting Started (февраль 2008). Дата обращения: 24 апреля 2017. Архивировано 29 марта 2017 года.