Выход из процедуры обработки прерывания требует 4 машинных цикла. В течение этого времени двухбайтный программный счетчик извлекается из стека, указатель стека дважды инкрементируется и устанавливается бит I в регистре статуса SREG.
Память
В данном разделе описываются различные виды памяти ATmega128. В соответствии с гарвардской архитектурой память AVR-микроконтроллера разделена на две области: память данных и память программ. Кроме того, ATmega128 содержит память на ЭСППЗУ для энергонезависимого хранения данных. Все три области памяти являются линейными и равномерными.
Внутрисистемно программируемая флэш-память программ
Внутрисистемно программируемая флэш-память программ ATmega128 содержит 128 кбайт внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения программы. Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 64 K х 16. Для программной защиты флэш-память программ разделена на два сектора: сектор программы начальной загрузки и сектор прикладной программы.
Флэш-память характеризуется износостойкостью не менее 1000 циклов запись/стирание. Программный счетчик РС у ATmega128 является 16-разр., поэтому, позволяет адресоваться к 64 кбайт памяти программ. Работа сектора программы начальной загрузки и связанных с ним бит защиты программы детально описана в разделе “Самопрограммирование из сектора начальной загрузки с поддержкой чтения во время записи”. В разделе “Программирование памяти” детально описывается параллельное программирование флэш-памяти и последовательное программирование через интерфейсы SPI, JTAG.
Таблицы констант могут располагаться в пределах всего пространства памяти программ (см. описание инструкции чтения из памяти программ LPM и расширенного чтения из памяти программ ELPM).
Временные диаграммы выборки и исполнения инструкций представлены в разделе “Временная диаграмма выполнения инструкции”.

Рисунок 8- Карта памяти программ
Статическое ОЗУ памяти данных (SRAM)
ATmega128 поддерживает две различные конфигурации статического ОЗУ памяти данных (см. табл. 1).
Таблица 1 – Конфигурации памяти
Конфигурация | Встроенное статическое ОЗУ памяти данных | Внешнее статическое ОЗУ памяти данных |
Нормальный режим | 4096 | до 64 кбайт |
Режим совместимости с ATmega103 | 4000 | до 64 кбайт |
Рисунок 9 иллюстрирует организацию памяти на статическом ОЗУ у ATmega128.
ATmega128 – сложный микроконтроллер с большим числом периферийных устройств, которые управляются через 64 ячейки памяти, зарезервированных в кодах операций инструкций IN и OUT. Для расширенной области ввода-вывода в статическом ОЗУ по адресам $60 - $FF необходимо использовать только инструкции ST/STS/STD и LD/LDS/LDD. Область расширенного ввода-вывода не существует при переводе ATmega128 в режим совместимости с ATmega103.
В нормальном режиме первые 4352 ячейки памяти данных относятся к файлу регистров, памяти ввода-вывода, расширенной памяти ввода-вывода и встроенному статическому ОЗУ данных. В первых 32 ячейках расположен файл регистров, следующие 64 ячейки занимает стандартная память ввода-вывода, а за ними следуют 160 ячеек расширенной памяти ввода-вывода. Замыкают внутреннюю память данных 4096 ячеек внутреннего статического ОЗУ данных.
В режиме совместимости с ATmega103 первые 4096 ячеек памяти данных относятся к файлу регистров, памяти ввода-вывода и внутреннему статическому ОЗУ данных. В первых 32 ячейках расположен файл регистров, затем в 64 ячейках расположена стандартная память ввода-вывода и следующие 4000 ячейки занимает внутреннее ОЗУ данных.
Совместно с ATmega128 по выбору может использоваться статическое ОЗУ. Это статическое ОЗУ будет занимать оставшуюся часть от адресного пространства размером 64 кбайт. Данная часть начинается с адреса следующего за внутренним статическим ОЗУ. Файл регистров, память ввода-вывода, память расширенного ввода-вывода и внутреннее статическое ОЗУ занимают младшие 4352 байта в нормальном режиме и младшие 4096 байта в режиме совместимости с ATmega103. (отсутствует память расширенного ввода-вывода). Таким образом, при использовании внешней памяти размером 64 кбайт (65536 байт) из них будет доступно 61184 байта в нормальном режиме и 61440 байта в режиме совместимости с ATmega103. См. раздел “Интерфейс внешней памяти” для детального изучения методов использования внешней памяти.
Доступ к внешнему статическому ОЗУ осуществляется автоматически с помощью тех же инструкций, что и для внутреннего ОЗУ, если указанное значение адреса находится за пределами внутренней памяти данных. При адресации внутренней памяти сигналы чтения и записи внешней памяти (выводы PG0 и PG1) неактивны в процессе всего цикла доступа. Работа внешнего статического ОЗУ разрешается путем установки бита SRE в регистре MCUCR.
Доступ к внешнему статическому ОЗУ требует еще одного машинного цикла на байт по сравнению с доступом к внутреннему статическому ОЗУ. Это означает, что на выполнение команд LD, ST, LDS, STS, LDD, STD, PUSH и POP потребуется один дополнительный цикл. Если стек будет размещен во внешнем статическом ОЗУ, то, соответственно, вызов и возврат из подпрограмм и процедур обработки прерываний будет длиться на три машинных цикла дольше за счет помещения в стек и извлечения из стека двухбайтного счетчика программы и не использования во время доступа к внешней памяти преимущества конвейерного доступа к внутренней памяти. Если интерфейс внешнего статического ОЗУ используется с состояниями ожидания (со сниженным быстродействием), то однобайтный внешний доступ потребует 2, 3 или 4 дополнительных машинных цикла для 1, 2 и 3 состояний ожиданий, соответственно. Таким образом, вызов и возврат из прерываний и подпрограмм потребует еще 5, 7 и 9 машинных циклов (в отличие от значений приведенных в описании набора инструкций) для 1, 2 и 3 состояний ожидания, соответственно.
Реализовано пять различных способов адресации для охвата всей памяти: прямая, косвенная со смещением, косвенная, косвенная с предварительным декрементом и косвенная с последующим инкрементом. Регистры R26…R31 из файла регистров используются как регистры-указатели для косвенной адресации.
Прямая адресация позволяет адресоваться ко всей памяти данных.
Косвенная адресация со смещением позволяет адресовать 63 ячейки, начиная с адреса указанного в регистрах Y или Z.
При использовании инструкции косвенной адресации с предварительным декрементом и последующим инкрементом значения адресных регистров X, Y и Z, соответственно декрементируются до или инкрементируются после выполнения инструкции.
32 рабочих регистров общего назначения, 64 регистра ввода-вывода и 4096 байт внутреннего статического ОЗУ данных в ATmega128 доступны с помощью всех этих режимов адресации. Файл регистров описывается в разделе “Файл регистров общего назначения”.

Рисунок 9 – Карта памяти данных
Временная диаграмма доступа к памяти
В данном разделе описывается общая концепция доступа к внутренней памяти.
Доступ к внутреннему статическому ОЗУ выполняется за два машинных цикла в соответствии с рисунком 10.

Рисунок 10 – Временная диаграмма доступа к встроенному статическому ОЗУ данных
Память данных на ЭСППЗУ (EEPROM Data Memory)
ATmega128 содержит 4 кбайт памяти данных на ЭСППЗУ. Она организована как отдельная область памяти данных, в которой один байт может быть записан и считан. ЭСППЗУ характеризуется износостойкостью 100000 циклов чтения/записи.
В разделе “Программирование памяти” содержится детальное описание программирование ЭСППЗУ через интерфейсы SPI, JTAG или параллельное программирование.
Чтение и запись ЭСППЗУ
Доступ к ЭСППЗУ осуществляется через специальные регистры, расположенные в пространстве ввода-вывода.
Время записи в ЭСППЗУ приведено в табл. 2. Функция самосинхронизации позволяет программно определить возможность записи следующего байта. Если код программы содержит инструкции записи в ЭСППЗУ, то должны быть приняты следующие меры предосторожности. У источников питания с хорошей фильтрацией напряжение VCC медленно нарастает/спадает при подаче/снятии питания. По этой причине микроконтроллер в течение некоторого периода времени может оказаться под меньшим напряжением питания, чем требуется для заданной тактовой частоты. См. раздел “Предотвращение повреждения данных в ЭСППЗУ” для детального изучения методов разрешения данной проблемы.
В целях предотвращения неумышленной записи в ЭСППЗУ должна быть выполнена специфическая процедура записи. Детально этот вопрос рассматривается при описании Управляющего регистра ЭСППЗУ.
Когда происходит считывание ЭСППЗУ ЦПУ задерживается на 4 машинных цикла до выполнения следующей инструкции. Во время записи в ЭСППЗУ ЦПУ задерживается на два машинных цикла до выполнения следующей инструкции.
Адресные регистры ЭСППЗУ – EEARH и EEARL

Разряды 15..12 – Резерв
Данные зарезервированные разряды считываются как 0. При записи в данных разрядах необходимо указывать нули для совместимости с новыми версиями микроконтроллеров.
Разряды 11..0 – EEAR11..0: Адрес ячейки ЭСППЗУ
Регистры адреса ЭСППЗУ – EEARH и EEARL – определяют адрес ячейки ЭСППЗУ в 4 кбайтном пространстве. Байтные ячейки ЭСППЗУ адресуются линейно в диапазоне адресов 0…4096. Начальное значение EEAR неопределенное. Необходимое значение адреса должно быть записано до начала доступа к ЭСППЗУ.
Регистр данных ЭСППЗУ –EEDR

Разряды 7…0 – EEDR7.0: Данные ЭСППЗУ
Для выполнения записи в ЭСППЗУ в регистр EEDR необходимо указать записываемые данные, которые будут записаны по адресу, указанному в регистре EEAR. После выполнения чтения из ЭСППЗУ в регистре EEDR содержатся считанные данные из ячейки по адресу указанному в EEAR.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |


