Архитектура AVR
Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединённых в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны:
-
Три «сдвоенных» 16-битных регистра-указателя X (r26:r27), Y (r28:r29) и Z (r30:r31);
-
Некоторые команды работают только с регистрами r16…r31;
-
Результат умножения (в тех моделях, в которых есть модуль умножения) всегда помещается в r0:r1.
Система команд микроконтроллеров AVR весьма развита и насчитывает в различных моделях от 90 до 133 различных инструкций. Большинство команд занимает только 1 ячейку памяти (16 бит). Большинство команд выполняется за 1 такт.
Всё множество команд микроконтроллеров AVR можно разбить на несколько групп:
-
команды логических операций;
-
команды арифметических операций и команды сдвига;
-
команды операции с битами;
-
команды пересылки данных;
-
команды передачи управления;
-
команды управления системой.
Управление периферийными устройствами осуществляется через адресное пространство данных. Для удобства существуют «сокращённые команды» IN/OUT.
У AVR контроллеров есть несколько семейств:
-
tinyAVR:
-
Флеш-память 16 Кб, SRAM 512 б, EEPROM 512 б;
-
Число линий ввод-вывода 4-18 (общее количество выводов 6-32);
-
Ограниченный набор периферийных устройств.
-
-
MegaAVR:
-
Флеш-память 256 Кб, SRAM 8 Кб, EEPROM 4 Кб;
-
Число линий ввода-вывода 23-86 (общее количество выводов 20-100);
-
Аппаратный умножитель;
-
Расширенная система команд и периферийных устройств.
-
-
XMEGA AVR:
-
Флеш-память 384 Кб, SRAM 32 Кб, EEPROM 4 Кб;
-
Четырёхканальный DMA-контроллер;
-
Инновационная система обработки событий.
-
На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные приложения:
-
со встроенными интерфейсами USB, CAN, контроллером LCD;
-
со встроенным радиоприёмо-передатчиком — серии ATAхxxx, ATAMxxx;
-
для управления электродвигателями — серия AT90PWMxxxx;
-
для автомобильной электроники;
-
для осветительной техники.
Версии контроллеров
ATmega/tinyXXX — базовая версия.
ATXXXL — версии контроллеров, работающих на пониженном (Low) напряжении питания, обычно 1,8 или 2,7 В.
ATXXXP — малопотребляющие версии (до 100 нА в режиме Power-down), применена технология picoPower (анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.
ATXXXA — уменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями). Микроконтроллеры «А» и «не-А» с точки зрения программатора ничем не отличаются.
АТmegaXXX-PI — корпус DIP
АТmegaXXX-PU — корпус DIP, бессвинцовый (Pb-free) припой
АТmegaXXX-AI — корпус TQFP
АТmegaXXX-AU — корпус TQFP, бессвинцовый (Pb-free) припой
(цифры 8/10/16/20 перед индексом означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания).
Устройства ввода/вывода МК
МК AVR имеют развитую периферию:
-
Многофункциональные, двунаправленные GPIO порты ввода/вывода со встроенными подтягивающими резисторами. Конфигурация портов в/в задаётся программно.
-
В качестве источника тактовых импульсов может быть выбран:
-
кварцевый резонатор;
-
внешний тактовый сигнал;
-
внутренний RC-генератор (частота 1, 2, 4, 8 МГц).
-
-
Внутренняя Флеш-память команд до 256 KБ (не менее 10 000 циклов перезаписи).
-
Отладка программ осуществляется с помощью интерфейсов JTAG или debugWIRE:
-
сигналы JTAG (TMS, TDI, TDO, и TCK) мультиплексированы на порт ввода/вывода. Режим работы — JTAG или порт — задаётся соответствующим битом в регистре fuses. МК AVR поставляются с включённым интерфейсом JTAG.
-
-
Внутреннее EEPROM данных до 4 КБ (100 000 циклов).
-
Внутренняя SRAM до 8 KБ время доступа 1 такт.
-
Внешняя память объёмом до 64 КБ (Mega8515 и Mega162).
-
Таймеры c разрядностью 8, 16 бит.
-
ШИМ-модулятор (PWM) 8-, 9-, 10-, 16-битный.
-
Аналоговые компараторы.
-
АЦП (ADC) с дифференциальными входами, разрядность 10 бит (12 для XMEGA AVR):
-
программируемый коэффициент усиления перед АЦП 1, 10 и 200;
-
опорное напряжение 2,56 В.
-
-
Различные последовательные интерфейсы, включая:
-
двухпроводной интерфейс TWI, совместимый с I²C;
-
универсальный синхронно/асинхронный приёмопередатчик UART/USART;
-
синхронный последовательный порт Serial Peripheral Interface (SPI).
-
-
USB серия AT90USBxxxx.
-
CAN серия AT90CANxxx.
-
LCD серии ATmega169 и Atmega329.
-
Датчики температуры ATtiny25, ATtiny45, Attiny85.
Не все периферийные устройства могут быть включены программно. Бит в регистре fuses может быть изменён только программатором.