Архитектура микроконтроллеров семейства Atmega. Учебное пособие
.pdf8-разрядное арифметико-логическое устройство
(АЛУ);
8-разрядный регистр состояния SREG;
регистры общего назначения (РОН);
программный счетчик (PC);
указатель стека (SP);
регистр команд;
дешифратор команд;
схема управления выполнением команд. Предназначение АЛУ – выполнение арифметических и
логических операций, особенности результата выполнения которых отражаются в SREG. Система команд процессоров линейки Atmega и требования к коду программ на языке ассемблера представлены в прил. 2 – прил. 3. Материал приложения взят из литературного источника [2].
АЛУ получает операнды с блока РОН, который, по сути дела, является сверхоперативной памятью процессора и содержит информацию для выполнения ближайшего ряда операций. Организация выполнения команд предусматривает 3 специальных регистра:
1)SP,
2)PC,
3)регистр команд.
Из перечисленных первый является 16-разрядным и указывает на адрес области памяти данных, в которой находятся стек, – хранит адрес вершины стека.
Второй из них используется для адресации памяти программ.
Оставшиеся блоки – регистр команд, дешифратор команд и схема управления выполнением команд, – используются для выборки из памяти программ команды, адрес которой находится в PC, ее декодирования, определения способа доступа к операндам и выполнения команды.
11
Память МК AVR – это совокупность трех физически и логически разделенных пространств:
1.памяти данных – статическое ОЗУ(SRAM);
2.памяти программ (ПЗУ типа FLASH);
3.энергонезависимая память данных (EEPROM). Особенности реализации этих видов памяти будут рассмотрены в последующих пунктах.
Регистры ввода-вывода выполняют специфические функции управления внешними и внутренними ПУ МК. Основной состав внутренней периферии МК: порты ввода/вывода, таймеры/счетчики, сторожевой таймер, аналоговый компаратор, АЦП, универсальный асинхронный (син- хронно-асинхронный) приемопередатчик УАПП (УСАПП), последовательный периферийный интерфейс SPI, последовательный периферийный интерфейс TWI, интерфейс JTAG. Каждый из представителей семейства имеет свой набор внутренних ПУ, который необходимо уточнять по специальной справочной литературе. Внутренняя периферия определяет разнообразие функциональных возможностей МК.
Система реального времени МК представлена таймерами/счетчиками (Т/С) и подсистемой прерывании. Т/С служат для отработки временных интервалов и организации системных меток. Подсистема прерываний по запросу на прерывание от ПУ требует от процессора приостановить вычислительный процесс и обслужить ПУ, обратившееся с запросом на прерывание. Другими словами, она позволяет своевременно обслуживать ПУ.
Все ПУ, входящие в состав МК, а также внутренние модули памяти, соединены с ПЯ МК посредством внутренней 8-разрядной ШД, по которой осуществляется обмен данными.
12
4. ПРОГРАММИСТСКАЯ МОДЕЛЬ МК СЕМЕЙСТВА AVR
Программистская модель отражает все доступные для программиста узлы. Она представлена на рис. 3. Рисунок взят из литературного источника [2].
Рис. 3. Программистская модель МК семейства AVR
В рамках программистской модели МК семейства AVR рассмотрим РОН, регистры ввода/вывода, основные блоки памяти. Адреса ячеек памяти будут представлены в 16ной системе счисления. Заметим, что существуют два варианта представления шестнадцатеричных чисел, например: 0x0a
и $0A, 0xFF и $FF.
РОН являются сверхоперативной памятью процессора, организованы в файл и используются для хранения операндов, а также результатов промежуточных вычислений. Каждый регистр имеет свое имя: R0, R1,…, R31. Любая команда преобразования данных, как правило, использует содержимое, по крайней мере, одного из РОН в качестве операнда и помещает результат вычислений также в один из РОН.
13
Все РОН являются 8-разрядными, но 6 старших регистров могут объединяться в регистровые пары (16 разрядов). Регистровые пары имеют следующие названия: Х[R27:R26], Y[R29:R28] и Z[R31:R30] (рис. 4). Рисунок взят из литератур-
ного источника [2]. Файл РОН в полном составе присутствует в любом МК серии AVR.
Рис. 4. Названия РОН
Регистры ввода/вывода (РВВ) выполняют специфические функции для обмена информацией между процессором МК и внутренними ПУ (см. гл. 3). Каждый РВВ имеет свой номер (адрес), который записывается в 16-ричной системе. Максимальное количество РВВ в МК – 64 (адреса – от 0x00 до 0x3F). Реальное число этих регистров в составе МК нужно уточнять по справочной литературе. Каждый РВВ имеет свое уникальное имя. Имя необходимо для удобства разработки программ, а МК работает только с номером. Биты регистров управления имеют свои уникальные имена. К таким битам можно обращаться как по имени, так и по положению в регистре. Например, флаг I располагается в седьмом бите регистра SREG и отвечает за глобальное разрешение/запрещение прерываний. Его можно указывать как I или как SREG.7. В
14
различных моделях МК биты, отвечающие за ту или иную функцию, могут располагаться в разных позициях регистра управления, но имя, как правило, они не изменяют. Этой особенностью удобно пользоваться при разработке управляющих программ для различных моделей МК. В этом случае ПО легче транспортировать от одной модели МК к другой.
РОН и РВВ находятся в оперативной памяти (SRAM). Максимальный объем адресного пространства SRAM – 64 Кбайта. Соответственно адреса – от 0x0000 до 0xFFFF. Большинство МК имеют меньший объем памяти (часть адресов не используется). Структура этого вида памяти для всех МК Atmega всегда одинакова и представлена на рис. 5.
RAMEND
Рис. 5. Структура SRAM МК Atmega
SRAM имеет байтовую организацию и может быть разделена на различные области:
1)совмещенную с РОН;
2)совмещенную с РВВ;
15
3) не совмещенная ни с чем область:
а) область внутреннего ОЗУ с адресами 0x0000
– RAMEND (адрес последней ячейки внутреннего ОЗУ конкретного МК);
б) область внешнего ОЗУ с адресами
RAMEND+1 – 0xFFFF.
Область, совмещенная с РОН, – неотъемлемая часть любого МК Atmega, ячейки которой одновременно являются РОН. Байт данных, находящийся по адресу 0x0000, одновременно является содержимым регистра R0, и наоборот. Ситуация наложения сред – типичный прием для однокристальных МК, позволяющий одни и те же данные представлять различным образом. Подобный прием позволяет увеличить гибкость программ, разрабатываемых для МК. Соответствие адресов этого вида памяти и РОН представлено на рис. 6.
Рис. 6. Адреса РОН
Область, совмещенная с РВВ, содержит различные служебные регистры, реальное число которых, как уже говорилось, обычно меньше максимально допустимого. Если регистр существует, то соответствующая ячейка SRAM также имеется в наличии. Остальные ячейки этой области недоступны для использования. Данная область хранит только РВВ. Адреса РВВ представлены на рис. 7.
16
В области SRAM находятся два важных системных регистра МК: счетчик команд и указатель стека.
Счетчик команд предназначен для хранения адреса текущей выполняемой команды. Данный регистр является программно недоступным. Счетчик команд может иметь разрядность от 9 до 17 бит. Количество разрядов этого регистра зависит от емкости адресуемой памяти конкретной модели МК. После системного сбросав счетчик командзаписываетсянулевойадрес.
Рис. 7. Адреса РВВ
Указатель стека (SP) предназначен для работы со стеком
ихранит адрес вершины стека (старшей ячейки стека). Количество разрядов этого регистра зависит от размера адресуемой стековой памяти конкретной модели МК. Если у МК – небольшая оперативная память, то используется восьмиразрядный регистр SPL. В противном случае к SPL добавляется регистр SPН
ивместе ониобразуют 16-разрядный указатель стека.
Вобласти внутреннего ОЗУ, не совмещенной ни с чем, часть ячеек выделена под стековую память и организована по принципу «первый пришел – последний ушел». Для реализации этого принципа и служит указатель стека. После системного сброса в счетчик команд записывается нулевой адрес. Поэтому в начале работы программного модуля, написанного на ассемблере, в этот регистр записывается адрес вершины стека,
17
т.е. адрес ячейки, которая имеет самый старший адрес в области внутреннего ОЗУ, выделенной под стек. Размер стековой памяти и вершину стека может опрелелить программист.
ВМК используется перевернутый стек, т.е. при записи
встек указатель стека уменьшается на 1, при чтении – увеличивается на 1. В ассемблере для записи в стек используется команда push, а для чтения – pop. Со стеком также активно работают команды вызова подпрограммы и возврата из подпрограммы (прил. 3).
Адреса области внутреннего ОЗУ, не совмещенной ни с чем, начинаются с 0x0060. Эта область памяти предназначена только для хранения данных и имеет различный объем в разных моделях МК. Большинство микросхем имеет только внутреннюю память, но некоторые МК допускают и подключение внешнего ОЗУ. Информацию об объеме внутреннего ОЗУ и о наличии возможности подключения внешней памяти данных
необходимо уточнять по специальнойсправочной литературе.
Энергонезависимая память данных EEPROM пред-
назначена для долговременного хранения различной по смыслу информации, необходимой для функционирования микроконтроллерной системы. Эта область памяти является перепрограммируемым ПЗУ с электрическим стиранием. Её ячейки имеют разрядность восемь бит. Объем EEPROM различный в зависимости от модели МК. Например, у ATmega328 (Arduino UNO, Nano, Pro Mini) он составляет 1
кБ. Производитель гарантирует 100000 циклов записи информации в каждую ячейку EEPROM. Фактически это количество зависит от конкретной модели МК и температурных условий.
В EEPROM могут храниться массив констант, информация о режимах работы устройства, ключи и др. В процессе функционирования готовой микроконтроллерной системы содержимое этого вида памяти может изменяться. Например, для работы диммера (регулятора освещенности помещения) в EEPROM удобно хранить информацию об уровне яркости
18
светильника в ночное/дневное время, режимах работы, времени включения/выключения света и др., что позволяет иметь возможность настраивать диммер для удобства пользователя путем изменения содержимого EEPROM.
Порядок обращения к EEPROM совсем иной, чем к другим видам памяти. Обмен данными между этим видом памяти и процессором МК базируется на использовании регистров адреса EEAR, данных EEDR и управления EECR. Последовательность загрузки данных в EEPROM представлена в документации производителя.
Объём EEPROM может превышать 256 байт. В этом случае вместо одного 8-ми разрядного регистра адреса EEAR МК использует 16-разрядный регистр EEAR, состоящий из двух половинок – 8-ми разрядных регистров EEARH и EEARL. Регистры доступа к EEPROM расположены по следующим адресам:
EEAR - 0x1E;
EEARL - 0x1E;
EEARH - 0x1F;
EEDR - 0x1D;
EECR - 0x1C.
Обратите внимание регистры EEAR и EEARL расположены по одному и тому же адресу. Иначе говоря, в МК, где объём энергонезависимой памяти меньше 256 байт, можно обращаться только к EEAR (он же – EEARL).
Названия любых регистров МК достаточно просто запоминаются, если человек знает английский язык. Буквы, составляющие имя регистра, указывают на определенные английские слова. В данном случае:
EE: указывает на работу с энергонезависимой
памятью;
R: указывает на работу с регистром (Register);
A: указывает на работу с адресом (Adress);
D: указывает на работу с данными (Data);
19
C: указывает на работу с регистром управления (от слова Control);
L: младший (Low), RL – младший байт регистра;
H: старший (High), RH – старший байт регистра.
Врегистры EEAR или EEARH и EEARL, что то же самое, можно только записать информацию. Эти регистры используются для доступа к ячейке EEPROM с целью записи или чтения данных.
Врегистр EEDR можно как записать данные в EEPROM, так и считывать их. При записи в EEPROM поступает байт данных, при чтении, наоборот, извлекаем байт данных из EEPROM.
EECR позволяет установить режим работы EEPROM. Установка 0-го бита этого регистра инициирует операцию чтения из EEPROM, установка 1-го бита – запись в EEPROM. Формат регистра управления можно уточнить в документации от производителя.
Впамяти программ хранится управляющая программа МК и данные (константы, массивы чисел), которые доступны только для чтения. Разрядность ячеек памяти – 16 бит. Каждая ячейка состоит из двух байт, которые могут использоваться независимо друг от друга. Различные модели МК могут иметь память программ различного объема. Информацию об объеме внутренней памяти программ и о наличии возможности подключения внешней памяти необходимо уточнять по специальной справочной литературе.
На рис. 8 адресное пространство памяти программ представлено графически. Оно содержит ячейки с адресами от 0x0000 до значения F_END, которое идентифицирует адрес последней ячейки памяти. Это значение будет разным для различных моделей МК.
Некоторые адреса памяти программ используются для специальных целей. Любой МК имеет таблицу векторов прерываний. Так нулевой адрес называют вектором системного сброса. С этого адреса запускается выполнение программы
20
