Оперативная память микроконтроллеров AVR реализована в виде статической памяти RAM (SRAM). Статической она называется потому, что регенерация находящихся в памяти данных не происходит. Данные, находящиеся в SRAM не сохраняются после отключения напряжения питания микроконтроллера, именно поэтому она и называется оперативной памятью. Объем ОЗУ микроконтроллеров AVR составляет от 128 байт (в моделях семейства tiny) до 4-8 кбайт в поздних представителях семейства mega. Ячейки ОЗУ адресуются побайтно, следовательно, для адресации, например 8 кбайт памяти, достаточно 2-байтного адреса.
ОЗУ микроконтроллеров AVR состоит из набора 8-разрядных регистров, пронумерованных по порядку, и делится условно на несколько областей. Порядковый номер регистра в области SRAM есть не что иное, как его адрес. Организация оперативной памяти представлена на рисунке 1.
Рисунок 1 — Организация оперативной памяти микроконтроллеров AVR
Регистры общего назначения
Первые 32 адреса SRAM занимают регистры общего назначения, те самые, что входят в состав CPU и непосредственно связаны с АЛУ. Данные регистры являются рабочей областью. Сначала сюда заносятся различные данные (это могут быть данные из какого-либо периферийного устройства или какая-то константа). Затем посредством АЛУ выполняются требуемые операции. Результат операции может быть отправлен из регистра общего назначения в периферийное устройство. Здесь также могут быть выделены регистры под промежуточные значения и буферные регистры. Шесть последних регистров общего назначения образуют три регистровых пары — 16-разрядные регистры X, Y и Z. Структура этих регистров представлена на следующем рисунке.
Рисунок 2 — Структура регистровых пар X, Y, Z
Как видно из рисунка, 16-разрядный регистр Х образован парой регистров общего назначения R26-R27, причем его младшим байтом XL (от low) является регистр R26, ну а старшим XH — регистр R27. Аналогичные заключения справедливы и для регистров Y и Z. При использовании специальных команд данные регистры можно использовать в качестве указателей адресов, например, при обращении к ячейкам памяти SRAM. С помощью регистра Z удобно извлекать различные константы, хранящиеся в памяти программ.
Регистры ввода/вывода
Непосредственно за регистрами общего назначения располагается область 64 регистров ввода/вывода. В данной области памяти располагаются регистры, посредством которых обеспечивается доступ ко всем периферийным устройствам. С помощью этих регистров осуществляется управление, настройка и запуск необходимых модулей, а также получение информации об их состоянии. Таблица регистров ввода/вывода может быть получена из технической документации на конкретный микроконтроллер. Для старших моделей Mega со сложной структурой (например, ATmega128) 64-х регистров ввода/вывода может оказаться недостаточно, поэтому для этих целей выделяется еще 160 дополнительных регистров (в адресном пространстве от $0060 до $00FF).
Внутреннее ОЗУ
Сразу за областью регистров ввода/вывода располагается непосредственно внутреннее ОЗУ данных микроконтроллера. Эта область памяти используется для временного хранения некоторых переменных и констант, использующихся во время работы. Следует уточнить, что регистры ввода/вывода не отнимают адресное пространство у области внутреннего ОЗУ. Адреса внутренней оперативной памяти располагаются сразу поле адресов регистров ввода/вывода. А вот объем подключаемого внешнего ОЗУ всегда ограничен адресом $FFFF, и если в конкретной модели используется большое число регистров ввода/вывода, то объем возможной подключаемой внешней памяти уменьшается. Конечный адрес области внутреннего ОЗУ зависит от конкретной модели микроконтроллера и обычно обозначается константой RAMEND для удобства при программировании. В конце оперативной памяти обычно располагают программный стек, при отсутствии аппаратного.
Внешнее ОЗУ
Возможность подключения внешней оперативной памяти имеется только у некоторых моделей (ATmega8515, ATmega162, ATmega128, ATmega2560 и др.). Внешняя подключаемая память может быть любой статической разновидностью (FLASH, RAM, EEPROM) с параллельным интерфейсом. При подключении внешнего ОЗУ необходимо учитывать, что максимальный адрес ячейки ОЗУ, которую может использовать микроконтроллер, составляет $FFFF.
Таким образом, ОЗУ микроконтроллеров AVR условно делится на несколько областей: - регистры общего назначения; - регистры ввода/вывода, - внутреннее ОЗУ и внешнее ОЗУ.
Регистры общего назначения используются для совершения различных операций с рабочими переменными, поэтому эти регистры можно называть рабочими. Регистры ввода/вывода позволяют нам работать с периферией. Ну а внутреннее и внешнее ОЗУ необходимы для временного хранения данных в процессе работы микроконтроллера.
|