Архитектура

У микроконтроллера AVR встроенная 8-битная шина данных, по которой двигаются данные единиц учета (ALU), регистра состояния (SREG), программного счетчика (PC), переменной памяти (SRAM) и между периферией. Программа, отправленная для выполнения в ALU, приходит из адреса Flash памяти, которую определяет программный счетчик. ALU принадлежит 32 общих 8-битных регистров, которые используются в качестве операндов при выполнении многих инструкций.

СтруктураATmega128

Конвейер приказов

У микроконтроллера AVR двухступенчатый конвейер приказов. В то же время, когда выполняется одна инструкция, другая инструкция загружается из программной памяти в ожидание. По этой причине переходные приказы берут 2 такта для выполнения условия перехода. В связи с тем, что новая инструкция загружается в конвейер всегда со следующего адреса памяти, необходимо отказаться от ранее выбранной инструкции при перемещении на другой программный адрес и загрузить новую инструкцию, так как предыдущая была загружена из старого, т.е. неверного места.

Общие регистры

Общие регистры R0-R31 исполняют роль промежуточного буфера для хранения и подготовки данных памяти и периферии. Общие регистры упрощают архитектуру процессора, т.к. для ALU они легкодоступны, и при каждом вычислении не надо для чтения операндов из памяти использовать шину данных. Общие регистры используются во всех арифметических и логических операциях для работы с данными.

Программируя на языке ассемблера можно хранить данные, требующие быстрой обработки, в общих регистрах. Если же при программировании на языке Си требуется использование общих регистров для хранения переменной, то она дополнительно определяется как „register“. Например:

register char x;

Список команд

Список команд большинства AVR состоит из 90-133 различных инструкций. Микроконтроллер ATmega128 имеет 133 инструкции. Инструкции бывают с одним, двумя или вообще без операндов. Большинство инструкций процессор микроконтроллера выполняет в течении одного такта, но для сложных инструкций может потребоваться до 5 тактов. У последователя AVR XMega многие инструкции дополнены так, что они тратят меньше тактов. Большая часть инструкций AVR предназначена для переходов, перемещения данных, сравнений, а так же логических и арифметических действий. В действиях и сравнениях используется регистр состояния, где отмечаются соответствующими битами случаи, в которых результатом действия в ALU были: негативный или позитивный, нуль, превысил максимально допустимое значение (8 битов), требовал перенос бита в следующее действие и в некоторых сложных случаях.

Пример:

Данный код написан в ассемблере и состоит из чистых инструкций. Он прибавляет число 5 к байту, находящемуся в оперативную память $100 (десятичное число 256). Использованные приказы имеются и всех AVR.

ldi  r1, 5     ; Загрузка константы 5 в общий регистр r1
lds  r2, $100  ; Загрузка байта из оперативной памяти в регистр r2
add  r2, r1    ; Прибавление значения регистра r1 к регистру r2
sts  $100, r2  ; Записывание значения регистра r2 обратно в оперативную память

Магазинная память программы

Магазинная память (англ. stack) – это структура данных, где данные, вписанные в память последними, считываются первыми. В AVR магазинную память можно использовать при работе с подпрограммами, прерываниями и временными данными. До выполнения прерываний и подпрограмм в магазинную память добавляется адрес счётчика программы, где программа прервалась. Если подпрограмма или прерывание закончили свою работу, считывается в магазинную память адрес, где начнётся работа программы. Временные данные обычно добавляются в магазинную память при коротких программных отрезках, которые не требуют резервирование памяти на время всей программы. Лёгкие программы на языке ассемблера написаны обычно так, что использование магазинной памяти не требуется, но она используется компиляторами, если в программе много переменных и функций.

У микроконтроллеров серии MegaAVR физический адрес магазинной памяти находится в оперативной памяти, но у некоторых серий tinyAVR оперативная память отсутствует и для магазинной памяти есть специальная, очень ограниченная по объёму, память. У таких микроконтроллеров без оперативной памяти обычно нет компиляторов.

При программировании на языках высокого уровня (Паскаль, Си, Си++) не обязательно быть в курсе внутренней жизни микроконтроллера, так как компилятор выбирает сам общие регистры и инструкции, но это знание может пригодиться. Инструкции микроконтроллера важно знать в срочных приложениях, где процедуры должны происходить в течении считанных тактов процессора.

ru/avr/architecture.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0