Идея разработки нового
RISC
-ядра принадлежит двум студентам Norwegian University of Science and Technology (NTNU) из норвежского города
Тронхейма
— Альфу Богену (Alf-Egil Bogen) и Вегарду Воллену (Vegard Wollen). В 1995 году Боген и Воллен решили предложить американской корпорации
Atmel
, которая была известна своими чипами с
Flash-памятью
, выпускать новый 8-битный RISC-микроконтроллер и снабдить его Flash-памятью для программ на одном кристалле с вычислительным ядром.
Идея была одобрена Atmel Corp., и было принято решение незамедлительно инвестировать в данную разработку. В конце 1996 года был выпущен опытный микроконтроллер AT90S1200, а во второй половине 1997 г. корпорация Atmel приступила к серийному производству нового семейства микроконтроллеров, к их рекламной и технической поддержке.
Новое ядро было запатентовано и получило название
AVR
. Существует несколько трактовок данной аббревиатуры. Кто-то утверждает, что это
A
dvanced
V
irtual
R
ISC, другие полагают, что не обошлось здесь без
A
lf Egil Bogen
V
egard Wollan
R
ISC.
Описание архитектуры
Микроконтроллеры 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
различных инструкций.
Большинство команд занимает только 1 ячейку памяти (16 бит).
Как правило, цифры после префикса обозначают объём встроенной
flash-памяти
(в КБ) и модификацию контроллера. А именно — максимальная степень двойки, следующая за префиксом, обозначает объём памяти, а оставшиеся цифры определяют модификацию (напр., ATmega128 — объём памяти 128 КБ; ATmega168 — объём памяти 16 КБ, модификация 8; ATtiny44 и ATtiny45 — память 4 КБ, модификации 4 и 5 соответственно).
[
источник не указан 4172 дня
]
На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные задачи:
Кроме указанных выше семейств, ATMEL выпускает 32-разрядные микроконтроллеры семейства
AVR32
, которое включает в себя подсемейства AT32UC3 (тактовая частота до 66 МГц) и AT32AP7000 (тактовая частота до 150 МГц).
Версии контроллеров
AT (mega/tiny)xxx — базовая версия.
ATxxx
L
— версии контроллеров, работающих на пониженном (Low) напряжении питания (2,7 В).
ATxxx
V
— версии контроллеров, работающих на низком напряжении питания (1,8 В).
ATxxx
P
— малопотребляющие версии (до 100 нА в режиме Power-down), применена технология
picoPower
(анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.
ATxxx
A
— уменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями). Микроконтроллеры «А» и «не-А» обычно имеют одинаковую сигнатуру, что вызывает некоторые трудности, так как Fuse-bit’ы отличаются.
Номер модели дополняется индексом, указывающим вариант исполнения. Цифры (8, 10, 16, 20) перед индексом означают максимальную
частоту
, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания).
Первая буква индекса означает вариант корпуса:
АТxxx-
P
— корпус
DIP
АТxxx-
A
— корпус
TQFP
АТxxx-
J
— корпус
PLCC
АТxxx-
M
— корпус
АТ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-x
C
— коммерческий температурный диапазон (0 °C — 70 °C)
АТxxx-x
A
— температурный диапазон −20 °C — +85 °C, с использованием
бессвинцового припоя
АТxxx-x
I
— индустриальный температурный диапазон (-40 °C — +85 °C)
АТxxx-x
U
— индустриальный температурный диапазон (-40 °C — +85 °C), с использованием
бессвинцового припоя
АТxxx-x
H
— индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAu
АТxxx-x
N
— расширенный температурный диапазон (-40 °C — +105 °C), с использованием
бессвинцового припоя
АТxxx-x
F
— расширенный температурный диапазон (-40 °C — +125 °C)
АТxxx-x
Z
— автомобильный температурный диапазон (-40 °C — +125 °C)
АТxxx-x
D
— расширенный автомобильный температурный диапазон (-40 °C — +150 °C)
последняя буква
R
означает упаковку в ленты (Tape & Reel) для автоматизированных систем сборки.
Устройства ввода-вывода МК
МК AVR имеют развитую периферию:
До 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).
программируемый коэффициент усиления перед
АЦП
1, 10 и 200 (в дифференциальном режиме);
в качестве опорного напряжения могут выступать: напряжение питания, внешнее напряжение или внутреннее некалиброванное опорное напряжение около 2,56
В
(для моделей, имеющих минимальное напряжение питания от 2,7
В
и выше) либо 1,1
В
(с минимальным напряжением питания 1,8
В
).
Почти все (за исключением некоторых ранних моделей ATtiny, у которых перепрограммирование идёт по особому интерфейсу) поддерживают
внутрисхемное программирование
(ISP) через последовательный интерфейс
SPI
. Многие микроконтроллеры поддерживают альтернативное последовательное или параллельное программирование с использованием высокого напряжения, для случаев, если fuse-регистры были настроены так, что обычное программирование стало недоступно.
Поддержка самопрограммирования, при котором основная программа может изменить часть своего кода.
Поддержка загрузки основной программы с помощью защищённой от перезаписи подпрограммы (bootloader). Код основной программы обычно принимается через один из портов микроконтроллера с использованием одного из стандартных протоколов.
Ряд режимов пониженного энергопотребления.
Примечание: не все периферийные устройства могут быть включены программно. Некоторые из них предварительно должны быть активированы битами в регистрах Fuses, которые могут быть изменены только программатором.
— алгоритмическая среда разработки программного обеспечения для микроконтроллеров с архитектурой AVR (последнее обновление в 2010 г).
AVR-Eclipse —
плагин
для среды разработки
Eclipse
, позволяющий разрабатывать программы на C/C++ и ассемблере, программировать и отлаживать контроллеры, используя внешний набор инструментов (Atmel AVR Toolchain, WinAVR)
— консольный макро-ассемблер для Linux/MacOS.
Avrdude
— средство для прошивки микроконтроллеров.