Микроконтроллеры AVR: от простого к сложному - страница 6
Каждому регистру присвоен адрес в пространстве данных, они отображаются на первые 32 ячейки ОЗУ. Хотя регистровый файл физически размещен вне ОЗУ, подобная организация памяти дает гибкий доступ к регистрам.
Шесть из 32 регистров — R26…R31 — можно использовать как три 16-разрядных адресных указателя в адресном пространстве данных. Один из трех адресных указателей (регистр Z) можно использовать для адресации таблиц в памяти программ. Эти регистры обозначаются как X, Y, Z и определены следующим образом:
Рис. 2.4.Регистры X, Y, Z
При различных режимах адресации эти регистры могут использоваться как фиксированный адрес, для адресации с автоинкрементом или с автодекрементом.
При разработке микроконтроллеров семейства AVR была использована так называемая гарвардская архитектура. Смысл ее состоит в том, что память программ и данных программы располагается в разных областях памяти. На рис. 2.5 изображена структура памяти микроконтроллеров AVR.
Доступ к памяти программ осуществляется следующим образом: во время выполнения одной команды следующая команда выбирается из памяти программ. Это дает возможность выполнять по одной команде за каждый машинный цикл.
При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд микроконтроллеров AVR имеет размер 16-разрядов одно слово. Каждый адрес в памяти программ содержит одну 16- или 32-разрядную команду.
При обработке прерываний и вызове подпрограмм адрес возврата запоминается в стеке. Стек размещается в оперативной памяти данных общего назначения (SRAM), его размер ограничен только размером доступной памяти SRAM и ее использованием в программе. Все программы пользователя должны инициализировать указатель стека (SP) сразу после запуска микроконтроллера, до того как вызываются подпрограммы и разрешаются прерывания. Исключение составляют микроконтроллеры, не имеющие оперативной памяти данных (SRAM), например, AT90S1200. У этих микроконтроллеров реализован аппаратный стек глубиной 3. Это обязательно следует учитывать при написании для них программ.
Рис. 2.5.Структура памяти микроконтроллеров AVR
Все пространство памяти AVR является линейным и непрерывным.
Модуль прерываний имеет собственный управляющий регистр в пространстве ввода/вывода, и флаг глобального разрешения прерываний в регистре состояния. Каждому прерыванию назначен свой вектор в начальной области памяти программ. Различные прерывания имеют приоритет в соответствии с расположением их векторов. По младшим адресам расположены векторы с большим приоритетом.
Прямая регистровая адресация с одним регистром Rd
Данные, над которыми осуществляется операция (или используются при выполнении операции), находятся в регистре d (Rd).
Прямая регистровая адресация с двумя регистрами — Rd и Rr
Данные, над которыми осуществляется операция, находятся в регистрах r(Rr) и d(Rd). Результат операции сохраняется в регистре d (Rd).
Рис. 2.6.Прямая регистровая адресация с одним регистром
Рис. 2.7.Прямая регистровая адресация с двумя регистрами
Прямая адресация к области ввода/вывода
Рис. 2.8.Прямая адресация к области ввода/вывода
n — адрес регистра, используемого в операции, находится непосредственно в коде команды, в битах 0…5.
Прямая адресация к памяти данных
Рис. 2.9.Прямая адресация к памяти данных
16-разрядный адрес ячейки памяти данных находится в коде команды, состоящей из двух слов. Rr/Rd определяет регистр, используемый при работе с памятью данных (т. е. регистр, куда записываются результаты операции либо откуда они берутся для выполнения операции).
Косвенная адресация к памяти данных со смещением
Рис. 2.10.Косвенная адресация к памяти данных со смещением
Адрес операнда определяется как сумма содержимого Z или Y регистра и бит 0…5 кода команды.
Косвенная адресация к памяти данных
Рис. 2.11.Косвенная адресация к памяти данных Адрес операнда находится в Х-, Y- или Z-регистре.
Косвенная адресация к памяти данных с предварительным декрементом
Рис. 2.12.Косвенная адресация к памяти данных с предварительным декрементом