Программная модель AVR-микроконтроллеров

На рис. 3.2 изображена программная модель AVR-микроконтроллеров, которая представляет собой диаграмму программно доступных ресурсов AVR. Главным блоком на этой диаграмме является регистровый файл из 32 оперативных регистров (R0–R31), непосредственно доступных ALU (рис. 3.3).

Программная модель AVR-микроконтроллеров - student2.ru

Рис. 3.2. Программная модель AVR-микроконтроллеров

Старшие регистры объединены парами и образуют три 16-разрядных регистра, предназначенных для косвенной адресации ячеек памяти (AVR без SRAM имеют только один 16-битный регистр Z).

Все арифметические и логические операции, а также часть операций работы с битами выполняются в ALU только над содержимым оперативных регистров. Следует обратить внимание на то, что команды, которые в качестве второго операнда имеют константу (SUBI, SBCI, ANDI, ORI, SBR, CBR), могут использовать в качестве первого операнда только регистры из второй половины регистрового файла (R16–R31). Команды 16-разрядного сложения с константой ADIW и вычитания константы SBIW в качестве первого операнда используют только регистры R24, R26, R28, R30.

Программная модель AVR-микроконтроллеров - student2.ru

Рис. 3.3. Регистровый файл

Во время выполнения арифметических и логических операций или операций работы с битами ALU формирует те или иные признаки результата операции, т. е. устанавливает или сбрасывает биты в регистре состояния SREG

(Status Register) (рис. 3.4).

I T H S V N Z C

7 6 5 4 3 2 1 0

Рис. 3.4. Регистр состояния SREG (Status Register)

Бит С (carry) устанавливается, если во время выполнения операции был перенос из старшего разряда результата.

Бит Z (zero) устанавливается, если результат операции равен 0.

Бит N устанавливается, если MSB (Most Significant Bit – старший бит) результата равен 1 (правильно показывает знак результата, если не было переполнения разрядной сетки знакового числа).

Бит V устанавливается, если во время выполнения операции было переполнение разрядной сетки знакового результата.

Бит S = N + V (правильно показывает знак результата и при переполнении разрядной сетки знакового числа).

Бит H устанавливается, если во время выполнения операции был перенос из 3-го разряда результата.

Бит T (Trase) – бит трассировки, разрешение пошагового выполнения программ.

Бит I (Interupt) установливается для разрешения программных и аппаратных прерываний.

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

Для хранения оперативных данных кроме регистрового файла можно использовать внутренние и внешние (если они имеются) блоки SRAM

(см. рис. 3.2).

Работа с внешней SRAM может быть программно разрешена/запрещена установкой/сбросом бита SRE в регистре ввода/вывода MCUSR.

Операции обмена с внутренней оперативной памятью AVRмикроконтроллер выполняет за два машинных цикла. Доступ к внешней

SRAM требует одного дополнительного цикла на каждый байт по сравнению

с внутренней памятью. Кроме того, установкой бита SRW в регистре ввода/вывода MCUSR можно программно увеличить время обмена с внешней SRAM еще на один дополнительный машинный цикл ожидания.

Выполнять арифметико-логические операции и операции сдвига непосредственно над содержимым ячеек памяти нельзя. Нельзя также записать константу или очистить содержимое ячейки памяти. Система команд AVR позволяет лишь выполнять операции обмена данными между ячейками SRAM и оперативными регистрами. Достоинством системы команд можно считать разнообразные режимы адресации ячеек памяти. Кроме прямой адресации имеются следующие режимы: косвенная, косвенная с постинкрементом, косвенная с предекрементом и косвенная со смещением.

Поскольку внутренняя и внешняя SRAM входят в единое адресное пространство (вместе с оперативными регистрами и регистрами ввода/вывода), то для доступа к ячейкам внутренней и внешней памяти используются одни и те же команды.

В ячейках оперативной памяти организуется системный стек, который используется автоматически для хранения адресов возврата при выполнении подпрограмм, а также может использоваться программистом для временного хранения содержимого оперативных регистров (команды PUSH и POP). (Микроконтроллеры, не имеющие SRAM, содержат трехуровневый аппарат-

ный стек.)

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

Размер стека, организуемого в оперативной памяти, ограничен лишь размерами этой памяти. Если микроконтроллер содержит на кристалле 128 байт внутренней SRAM и не имеет возможности подключения внешней SRAM, то в качестве указателя вершины стека используется регистр ввода/вывода SPL. Если есть возможность подключения внешней памяти или внутренняя память имеет размеры 256 байт и больше, то указатель стека состоит из двух регистров ввода/вывода SPL и SPH.

При занесении числа в стек автоматически выполняются следующие действия:

1. Число записывается в ячейку памяти по адресу, хранящемуся в указателе стека (SPH:SPL) ← число. 2. Содержимое указателя стека

Уменьшается на единицу.

SPH:SPL = SPH:SPL – 1. Обратные действия выполняются при извлечении числа из стека:

Наши рекомендации