AVR

avr-logo

AVR — семейство восьмибитных микроконтроллеров фирмы Atmel*. Год разработки — 1996.

История создания архитектуры AVR

Идея разработки нового 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. Существует несколько трактовок данной аббревиатуры. Кто-то утверждает, что это Advanced Virtual RISC, другие полагают, что не обошлось здесь без Alf Egil Bogen Vegard Wollan 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 до 133 различных инструкций.

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

Большинство команд выполняется за 1 такт.

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

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