Программная модель AVR-микроконтроллеров
На рис. 3.2 изображена программная модель AVR-микроконтроллеров, которая представляет собой диаграмму программно доступных ресурсов AVR. Главным блоком на этой диаграмме является регистровый файл из 32 оперативных регистров (R0–R31), непосредственно доступных ALU (рис. 3.3).
Рис. 3.2. Программная модель AVR-микроконтроллеров
Старшие регистры объединены парами и образуют три 16-разрядных регистра, предназначенных для косвенной адресации ячеек памяти (AVR без SRAM имеют только один 16-битный регистр Z).
Все арифметические и логические операции, а также часть операций работы с битами выполняются в ALU только над содержимым оперативных регистров. Следует обратить внимание на то, что команды, которые в качестве второго операнда имеют константу (SUBI, SBCI, ANDI, ORI, SBR, CBR), могут использовать в качестве первого операнда только регистры из второй половины регистрового файла (R16–R31). Команды 16-разрядного сложения с константой ADIW и вычитания константы SBIW в качестве первого операнда используют только регистры R24, R26, R28, R30.
Рис. 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. Обратные действия выполняются при извлечении числа из стека: