Архитектура микроконтроллеров AVR
Кроме перечисленных выше устройств, микроконтроллеры серии AVR обязательно содержат систему прерываний, охранный таймер, систему начального сброса, систему контроля питающего напряжения и т. д. Все описанные выше устройства управляются центральным процессором при помощи регистров. И вот здесь мы вплотную подходим к такому понятию, как архитектура микроконтроллеров AVR.
Это полезно запомнить. Под архитектурой понимается внутреннее строение микросхемы и взаимодействие всех ее элементов.
К элементам архитектуры можно отнести объем и структуру всех видов памяти микроконтроллера, количество и свойства так называемых регистров общего назначения, устройство портов ввода-вывода и методы доступа к ним, устройство системы прерываний, способы управления встроенными периферийными устройствами. А начнем мы с изучения всех видов памяти.
Регистры общего назначения (РОН).Для хранения промежуточных результатов вычислений каждый микроконтроллер AVR имеет тридцать два регистра общего назначения (сокращенно – РОН). Для того, чтобы регистры можно было использовать в программе, каждый имеет свое собственное имя. Вот эти имена: RO, R1,R2 – R31.
Все РОН составляют так называемый файл регистров общего назначения. Все команды преобразования данных (сложения, вычитания и т. д.) микроконтроллера AVR построены таким образом, что обязательно используют РОН. Каждая команда в качестве операндов использует либо содержимое двух разных РОН, либо содержимое РОН и константу. Результат вычислений также помещается в один из РОН.
Например команда ADD RO, R1 производит сложение содержимого регистров R0 и R1. Сумма помещается в R0. Команда ADD R5, #7 прибавляет к содержимому регистра R5 число семь. Результат помещается в R5.
Регистры общего назначения используются также и в командах перемещения данных. Перемещать данные можно из одного РОН в другой, из РОН в ячейку памяти и в обратном направлении. Перемещение данных возможно также между РОН и регистрами ввода-вывода, о которых мы поговорим в следующем разделе.
Некоторые команды имеют ограничения по использованию РОН. Например, все команды обмена информацией с регистрами ввода- вывода не могут использовать регистры R0 –R15. Существуют и другие ограничения. Подробнее это можно узнать из описания системы команд (см. Приложение).
Все регистры общего назначения микроконтроллеров AVR восьмиразрядные. Однако шесть последних регистров (R26 –R31) способны объединяться в регистровые пары. Такая пара в некоторых операциях выступает как самостоятельный шестнадцатиразрядный регистр. При этом не теряется возможность чтения каждого регистра пары отдельно.
Регистровые пары имеют свои названия. Пара, объединяющая регистры R26 –R27, называется регистром X. Пара регистров R28 –R29 называется регистром Y. А пара регистров R30 –31 называется регистром Z.
Весь набор регистров общего назначения присутствует в любом микроконтроллере серии AVR.
Регистры ввода-вывода.При рассмотрении микропроцессоров мы рассматривали назначение портов ввода-вывода, в микроконтроллерах AVR эти функции выполняют регистры ввода-вывода.
Смещение понятий произошло потому, что микроконтроллеры AVR для обмена информацией с внешними устройствами используют достаточно сложные электронные схемы, имеющие несколько разных режимов работы, а также возможность выбора программным путем направления передачи данных.
Именно они и получили название портов ввода-вывода. Чуть позже мы подробно рассмотрим их устройство.
Простые же регистры, служащие для связи центрального процессора с периферийными устройствами, получили более подходящее в данном случае название: регистры ввода-вывода. Эти регистры позволяют обмениваться информацией лишь со встроенными периферийными устройствами самой микросхемы. Такими как таймеры, компараторы, каналы последовательной передачи информации, система прерывания, АЦП и т. д.
Каждый регистр ввода-вывода имеет свой номер, то есть адрес в адресном пространстве ввода-вывода. Номера регистров могут иметь значение от $00 до $ЗЕ Это означает, что максимально возможное количество РВВ равно 64. Однако реальное количество регистров любого микроконтроллера всегда меньше.
Разные микроконтроллеры имеют разный набор регистров ввода-вывода. Каждый регистр ввода-вывода, помимо номера, имеет свое уникальное имя. Имя регистра – это условное понятие, придуманное лишь для удобства программистов. Сам же микроконтроллер работает исключительно с номером регистра.
Например в микроконтроллере семейства «Tiny» регистр номер $1Е предназначен для управления EEPROM. Этот регистр имеет имя EEAR. Второй регистр управления EEPROM имеет номер $1D и имя EEDR. Для разных микроконтроллеров регистры, имеющие одинаковое назначение, обычно имеют и одинаковое имя. А вот номер регистра может и отличаться.
Память.Как уже говорилось, микроконтроллеры AVR имеют три вида памяти: память программ (Flash); оперативную память данных (SRAM); энергонезависимую память данных (EEPROM).
Объем каждого вида памяти для разных микросхем вы можете видеть в табл. 2.1. Память EEPROM имеется не во всех микроконтроллерах. Кроме того, в некоторых моделях отсутствует оперативная память (SRAM). В таких микросхемах для оперативного хранения данных используются только регистры общего назначения.
Каждый из этих трех видов памяти имеет свое собственное адресное пространство, и доступ к разным видам памяти осуществляется независимо друг от друга. Такое построение микроконтроллеров называется архитектурой Гарвардского типа.
Память программ.Память программ предназначена для хранения управляющей программы микроконтроллера. Каждая ячейка этой памяти имеет 16 разрядов, то есть хранит одно шестнадцатиразрядное двоичное число. Каждое такое число содержит как код операции, так и один или несколько параметров команды. Кроме того, в памяти программ можно хранить данные. Такие данные будут доступны только для чтения.
В памяти программ обычно хранят некоторые постоянные константы, таблицы символов и другие неизменяемые величины. Данные записываются в виде восьмиразрядных двоичных чисел (байтов). При этом каждая шестнадцатиразрядная ячейка программной памяти используется как две восьмиразрядные. При чтении данных из программной памяти микроконтроллер может обратиться к каждой такой половинке отдельно.
Для разных микроконтроллеров память программ имеет разный объем (см. табл. 2.1). Однако при любом объеме памяти она представляет собой непрерывную область и начинается с ячейки, имеющей нулевой адрес.
На рис. 2.2 изображено адресное пространство памяти программ в графическом виде. Такое условное изображение адресного пространства часто применяется в технической литературе. Изображенное на рисунке адресное пространство включает в себя ячейки Flash-памяти с адресами от $000 до F_END.
Рис. 2.2
Условное обозначение F_END означает адрес последней ячейки памяти. Значение этого адреса будет разным для разных микроконтроллеров. Например, для микроконтроллера ATtiny2313 адрес последней ячейки памяти будет равен $7FF. Адрес последней ячейки памяти всегда на единицу меньше объема этой памяти.
Объем памяти для каждого микроконтроллера различается. Так, для микроконтроллера ATtiny2313 объем программной памяти равен 2 килобайтам. То есть 2048 байт. Если записать это число в шестнадцатиричном виде, получим $800. Учитывая то, что адресация начинается с нулевого адреса, то для адресации такого количества ячеек мы должны использовать адреса с 0 по 2047. Или в шестнадцатиричном виде от $000 до $7FF.
Некоторые адреса программной памяти зарезервированы. То есть используются для неких специальных целей. И первым зарезервированным адресом можно считать нулевой адрес. Он называется вектором системного сброса. Именно с этого адреса начинается выполнение программы после системного сброса микроконтроллера. Остальные зарезервированные адреса - это векторы прерываний.
Вектор прерывания - это адрес в программной памяти, с которого начинается выполнение процедуры обработки прерывания.
Так как любой микроконтроллер AVR имеет несколько источников прерывания, то и векторов прерывания тоже несколько: по одному на каждый вид прерывания. Адреса векторов прерываний находятся сразу за вектором сброса. То есть занимают ячейки с адресами $001, $002 и т. д. Количество векторов прерываний для разных микросхем разное.
Внутренним прерыванием называется прерывание, вызванное одним из встроенных периферийных устройств самого микроконтроллера. Например прерывание по таймеру, аналоговому компаратору, АЦП ит. д.
Внешнее прерывание – это прерывание по сигналу, поступающему от внешнего источника на специальный вход микроконтроллера.
Область адресов, зарезервированных под векторы прерываний, называют таблицей векторов прерываний.
В микроконтроллерах семейства «Tiny» эта область начинается с адреса $001. Для большинства микроконтроллеров семейства «Mega» таблица векторов прерываний начинается с адреса $002. При разработке программы для микроконтроллера программист по своему усмотрению может использовать, но может и не использовать механизм прерываний.
Если прерывания не используются, то ячейки, зарезервированные под вектора прерываний, можно использовать как обычные ячейки для хранения программы. Если же вы решили в своей программе использовать прерывания, то по адресу $000 необходимо записать команду безусловного перехода, которая должна передавать управление на любой адрес за пределами таблицы векторов прерываний.
Именно там и должна начинаться основная программа. В каждую ячейку, соответствующую тому либо иному вектору прерывания, тоже записывается команда безусловного перехода. Каждый такой переход передает управление на начало соответствующей процедуры обработки прерывания.
Дата добавления: 2021-12-14; просмотров: 502;