Ядро архитектуры AVR

Ядро ЦП

Основная функция ядра центрального процессора — убедиться в корректности выполнения программы. Также, ЦП должен иметь доступ к различным видам памяти, выполнять расчеты, контролировать периферию и реагировать на прерывания.

Обзор архитектуры ядра AVR

Архитектура AVR

Архитектура AVR

В целях повышения производительности и многозадачности, AVR использует так называемую Гарвардскую архитектуру. С раздельными блоками памяти и шинами для программ и данных. В то время, пока одна инструкция исполняется, следующая инструкция уже готовится к выполнению, извлекается из программной памяти. Эта концепция позволяет исполнять программы каждый такт работы. Программная память является внутри-системно программируемой флеш-памятью.

Быстро-доступный регистровый файл содержит информацию 32х8 регистров общего назначения с временем доступа — один тактовый цикл. Это позволяет АЛУ производить вычисления за один цикл. В типовой АЛУ операции, два операнда извлекаются из регистрового файла, операции выполняются и результат сохраняется обратно в регистровый файл. И всё это за один тактовый цикл.

Шесть из 32 регистров могут быть использованы как три шестнадцатибитных косвенно адресуемых регистра указателя — эффективный расчет адресов. Один из этих адресных указателей может быть также использован, как указатель таблцы адресов флэш памяти. Эти дополнительные регистры шестнадцатибитные X, Y и Z регистры, описанные в этой секции.

АЛУ поддерживает арифметические и логические операции между регистрами или между константами и регистрами. Одиночная регистровая операция также может быть выполнена в АЛУ. После арифметической операции статусный регистр обновляется для отображения информации результате выполнения операции.

Программный поток управляется безусловными и условными инструкциями JUMP и CALL, способными прямо адресовать целое адресное пространство. Большинство инструкций AVR представляет собой одиночное слово в 16-битном формате. Каждый адрес программной памяти вмещает 16 или 32 битную инструкцию.

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

Все аространства памяти в архитектуре AVR линейны и выполнены в виде карт.

Гибко настраиваемый модуль прерываний имеет свои контрольные регистры в пространстве ввода-вывода и дополнительный бит GLOBAL INTERRUPT ENABLE в статусном регистре. Все прерывания имеют раздельные векторы в таблице векторов прерываний. Прерывания имеют приоритеты, указанные в таблице. Чем меньше адрес вектора прерывания, тем выше его приоритет.

Пространство ввода-вывода памяти содержит 64 адреса для периферийных функций ЦП, таких, как контрольные регистры, SPI, и другие функции ввода-вывода. Ввод-вывод памяти может быть доступен напрямую, или как DATA SPACE расположения через регистровый файл, 0х20 — 0х5F.

Арифметико-логическое устройство

Высоко производительное арифметико-логическое устройство работает напрямую с подключенными 32 регистрами общего назначения. За один тактовый цикл исполняются арифметические операции между регистрами общего назначения. Операции АЛУ делятся на три основные категории: арифметические, логические или битовые функции. Некоторые реализации архитектуры также обеспечивают мощный множитель, поддерживающий как подписанное/беззнаковое умножение, так и дробный формат.

Статусный регистр

Статусный регистр содержит информацию о результате выполнения большинства арифметических инструкций. Эта информация может быть использована во время работы программы для выполнения условных операций. Имейте в виду, что статусный регистр обновляется после каждой операции АЛУ. В большинстве случаев это позволяет избежать необходимости писать отдельные сравнивающие инструкции, что позволяет уменьшить и ускорить ваш код.

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

S-REG — статусный регистр

Статусный регистр

Биты статусного регистра

Бит 7 — I: Глобальное Разрешение Прерываний

Бит (флаг) «Глобального Разрешения Прерываний» должен быть установлен для того чтобы разрешить переход к обработке прерываний. Контроль над отдельными прерываниями выполняется в отдельных специальных регистрах. Если Бит No 7 очищен — установлен в 0 — то все прерывания будут запрещены независимо от индивидуальных настроек каждого из них. Бит No 7 очищается аппаратно при наступлении прерывания и устанавливается в 1 командой RETI — для выхода из прерывания, чтобы разрешить последующие прерывания. Бит No 7 может также быть установлен или очищен программно по команде SEI и CLI соответственно, как описано в Справочнике по Набору Команд.

Бит 6 — T: Бит Загрузки и Восстановления (Буферный Бит)

Такие инструкции Буферного Бита как BLD (загрузка бита) и BST(восстановление бита) используют Бит No 6 в качестве буфера для хранения бита. Какой — нибудь бит из любого регистра может быть скопирован в Бит No 6 командой BST и восстановлен оттуда командой BLD.

Бит 5 — H: Флаг Переноса Половины байта

Флаг Переноса Половины H указывает на то что осуществлен перенос младшей половины байта, используется в некоторых арифметических действиях. Перенос Половины используется в BCD арифметике.

Бит No 4 — S: Бит Знака , S=N xor V S-Бит всегда равен операции «Исключающее ИЛИ» между флагами N и V.

Бит No 3 — V: Флаг Дополнения До Двух Этот бит подерживает арифметику с дополнением до двух.

Бит No 2 — N: Отрицательный Флаг Установка этого флага говорит об отрицательном результате арифметической или логической операции.

Бит No 1 – Z: Флаг Нуля Этот флаг говорит, что в результате арифметической операции или логической образовался ноль.

Бит No 0 — С: Флаг Переноса Установка этого флага говорит о переносе в результате арифметической или логической операции.

Регистровый файл регистров общего назначения

Регистровый файл оптимизирован под расширенный набор RISC инструкций. Для достижения заявленной производительности и гибкости доступны следующие схемы ввода/вывода:

  • Один 8-битный операнд на выход и один 8-битный результат на вход
  • Два 8-битных операнда на выход и один 8-битный результат на вход
  • Два 8-битных операнда на выход и один 16-битный результат на вход
  • Один 16-битный операнд на выход и один 16-битный результат на вход

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

Регистры общего назначения в МК AVR

Регистры общего назначения в МК AVR

Большинство инструкций, допустимых для регистрового файла, имеют прямой доступ ко всем регистрам. И большинство из них  являются инструкциями, выполняющимися за один тактовый цикл. Как показано в таблице, каждый регистр также имеет адрес DATA памяти, то есть регистры привязаны к 32 первым ячейкам пользовательского DATA пространства. Хотя физически они не связаны с SRAM, подобная организация работы с памятью дает непревзойдённую гибкость в работе. X-, Y- и  Z-регистры-указатели могут указывать на индекс любого регистра в файле памяти.

X-, Y- и Z-регистры

Регистры с R26 по R31 имеют несколько дополнительных функций, помимо общих для всех остальных Регистров Общего Назначения.  Эти регистры являются 16-битными указателями адреса для косвенной адресации в пространстве памяти данных. Три косвенных адресных регистра X,Y и Z определены так, как описано на рисунке.

Z

X, Y и Z регистры

X, Y и Z регистры

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

Указатель Стека

Стек, главным образом, используется для запоминания (хранения) временных данных, для хранения локальных переменных и хранения адресов возврата после прерываний и вызовов подпрограмм. Регистр Указатель Стека всегда указывает на вершину (TOP) Стека. Обратите внимание, что Стек реализован нарастающим от наивысшего адреса (ячейки) памяти до самого младшего адреса. Это подразумевает, что команда PUSH (положить в Стек) уменьшает адрес Указателя Стека. Указатель Стека указывает на участок данных ОЗУ, где и реализуется Стек подпрограмм и прерываний. Пространство Стека должно быть определено в памяти ОЗУ (обычно это конечный адрес памяти SRAM, если под Стек надо разрешить использовать всю память ОЗУ) программно пользователем прежде, чем произойдет любое выполнение вызова подпрограммы или будут разрешены прерывания. Указатель Стека должен быть установлен на адрес старше, чем 0х60. Указатель Стека уменьшается на единицу, когда данные кладутся в Стек по команде PUSH или уменьшается на
два, когда адрес возврата записывается в Стек вызовом подпрограммы или прерыванием. Указатель Стека увеличивается на единицу, когда данные извлекаются из Стека по команде
РОР или увеличивается на два, когда происходит возврат из подпрограммы по команде RET или выход из прерывания по команде RETI.
Указатель Стека AVR реализован как два 8-битных регистра в пространстве ввода/вывода. Число используемых битов зависит от реализации (количества памяти SRAM). Обратите внимание, что пространство данных (SRAM) в некоторых реализациях архитектуры AVR настолько мало, что можно обойтись лишь одним регистром SPL, который является младшим полубайтом регистра-указателя Стека SP. В этом случае наличие регистра SPH просто не нужно.
Регистр указателя стека для Attiny13

Регистр указателя стека для Attiny13

Время выполнения инструкций

Эта часть даташита описывает тайминги исполнения инструкций. Центральный процессор микроконтроллера тактируется от встроенного генератора тактовых импульсов. Внутреннее деление тактовых импульсов при этом не используется.