Выбрать главу

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

При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд микроконтроллеров 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. Косвенная адресация к памяти данных с предварительным декрементом

Адрес операнда находится в Х-, Y- или Z-регистре. Однако перед выполнением операции соответствующий индексный регистр Х-, Y- или Z уменьшается на единицу.

Косвенная адресация к памяти данных с постинкрементом

Рис. 2.13. Косвенная адресация к памяти данных с постинкрементом