Ядро ЦП
Основная функция ядра центрального процессора — убедиться в корректности выполнения программы. Также, ЦП должен иметь доступ к различным видам памяти, выполнять расчеты, контролировать периферию и реагировать на прерывания.
Обзор архитектуры ядра 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 регистров общего назначения при работе с центральным процессором.
Большинство инструкций, допустимых для регистрового файла, имеют прямой доступ ко всем регистрам. И большинство из них являются инструкциями, выполняющимися за один тактовый цикл. Как показано в таблице, каждый регистр также имеет адрес DATA памяти, то есть регистры привязаны к 32 первым ячейкам пользовательского DATA пространства. Хотя физически они не связаны с SRAM, подобная организация работы с памятью дает непревзойдённую гибкость в работе. X-, Y- и Z-регистры-указатели могут указывать на индекс любого регистра в файле памяти.
X-, Y- и Z-регистры
Регистры с R26 по R31 имеют несколько дополнительных функций, помимо общих для всех остальных Регистров Общего Назначения. Эти регистры являются 16-битными указателями адреса для косвенной адресации в пространстве памяти данных. Три косвенных адресных регистра X,Y и Z определены так, как описано на рисунке.
Z
В различных режимах доступа эти адресные регистры имеют функции автоматического инкремента, автоматического декремента и фиксированного смещения. Подробнее об этом написано в Справочнике.
Указатель Стека
Время выполнения инструкций
Эта часть даташита описывает тайминги исполнения инструкций. Центральный процессор микроконтроллера тактируется от встроенного генератора тактовых импульсов. Внутреннее деление тактовых импульсов при этом не используется.