Косвенная адресация
В микроконтроллерах семейства Tiny реализована только простая косвенная адресация. Команды косвенной адресации выполняют обращение к регистру, адрес которого содержится в индексном регистре Z (Рис. 5.9). При этом никаких действий с содержимым индексного регистра не производится.
Рис. 5.9. Простая косвенная адресация
Микроконтроллеры семейства поддерживают 2 команды косвенной адресации: LD Rd, Z (пересылка байта в РОН) и ST Z, Rd (пересылка байта из РОН). Адрес регистра общего назначения содержится в разрядах 8…4 слова команды.
Лекция №6. Блок регистров общего назначения. Команды с непосредственной адресацией. Различные режимы адресации.
Энергонезависимая память данных (EEPROM)
EEPROM (англ. Electrically Erasable Programmable Read-Only Memory) — электрически стираемое перепрограммируемое ПЗУ (ЭСППЗУ), один из видов энергонезависимой памяти. Память такого типа может стираться и заполняться данными до миллиона раз.
Как уже было сказано, некоторые микроконтроллеры семейства Tiny (ATtiny12x и ATtiny15L) имеют в своем составе энергонезависимую память данных (EEPROM-память). Эта память расположена в собственном адресном пространстве, а ее объем составляет 64 байта.
Доступ к EEPROM
Для обращения к EEPROM-памяти используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.
Регистр адреса
Регистр адреса EEPROM-памяти EEAR (EEPROM Address Register) расположен по адресу $1E. В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. Поскольку для адресации 64_х ячеек достаточно 6_разрядного адреса, содержимое двух старших разрядов регистра EEAR игнорируется.
Регистр данных
Регистр данных EEPROM-памяти EEDR (EEPROM Data Register) расположен по адресу $1D. При записи в этот регистр загружаются данные, которые должны быть помещены в EEPROM, а при чтении в этот регистр помещаются данные, считанные из EEPROM.
Регистр управления
Регистр управления EEPROM-памяти EECR (EEPROM Control Register) расположен по адресу $1C. Как следует из названия, данный регистр используется для управления доступом к EEPROM-памяти. Формат этого регистра показано на Рис. 5.9, а его описание приведено в Табл. 6.1.
Рис. 6.1. Формат регистра EECR
Разряд | Название | Описание |
7…4 | — | Не используются, читаются как «0» |
EERIE | Разрешение прерывания от EEPROM. Данный разряд управляет генерацией прерывания, возникающего при завершении цикла записи в EEPROM. Если этот разряд установлен в «1», прерывания разрешены (если флаг I регистра SREG также установлен в «1»). При сброшенном разряде EEWE прерывание генерируется постоянно | |
EEMWE | Управление разрешением записи в EEPROM. Состояние этого разряда определяет функционирование флага разрешения записи EEWE. Если данный разряд установлен в «1», то при записи в разряд EEWE «1» происходит запись данных в EEPROM. В противном случае установка EEWE в «1» не производит никакого эффекта. После программной установки этот разряд сбрасывается аппаратно через 4 машинных цикла | |
EEWE | Разрешение записи в EEPROM. При установке этого разряда в «1» происходит запись данных в EEPROM (если EEMWE равен «1») | |
EERE | Разрешение чтения из EEPROM. После установки этого разряда в «1» выполняется чтение данных из EEPROM. По окончании чтения этот разряд сбрасывается аппаратно |
Таблица 6.1. Разряды регистра EECR
Таким образом, процедура записи одного байта в EEPROM-память состоит из следующих этапов:
· дождаться готовности EEPROM к записи данных (ждать пока не сбросится флаг EEWE (EEPROM Write Enable) регистра EECR);
· загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR;
· установить в «1» флаг EEMWE (EEPROM Memory Write Enable) регистра EECR;
· в течение 4-х машинных циклов после установки флага EEMWE записать «1» в разряд EEWE регистра EECR.
Длительность цикла записи зависит от частоты внутреннего RC-генератора (от значения калибровочной константы) и составляет 3.1…6.8 мс для моделей ATtiny12x и 4.6…8.2 мс для модели ATtiny15L. По окончании цикла записи разряд EEWE аппаратно сбрасывается, после чего программа может начать запись следующего байта. Следует также помнить, что после установки разряда EEWE в «1», процессор пропускает 2 машинных цикла перед выполнением следующей инструкции.
При записи в EEPROM могут возникнуть некоторые проблемы, вызванные прерываниями. При возникновении прерывания между 3-м и 4-м этапами описанной последовательности запись в EEPROM будет сорвана, т. к. за время обработки прерывания флаг EEMWE сбросится в «0». Если в подпрограмме обработки прерывания, возникшего во время записи в EEPROM-память, также происходит обращение к ней, то будет изменено содержимое регистров адреса и данных EEPROM. В результате первая запись (прерванная) будет сорвана.
Для избежания описанных проблем настоятельно рекомендуется запрещать все прерывания (сбрасывать бит I регистра SREG) при выполнении пунктов 2…4 описанной выше последовательности.
С учетом сказанного фрагмент программы, осуществляющий запись в EEPROM, выглядит следующим образом:
Процедура чтения данных из EEPROM гораздо проще, чем процедура записи. После загрузки требуемого адреса в регистр EEAR, программа должна установить разряд EERE регистра EECR в «1». Когда запрошенные данные будут находиться в регистре данных EEDR, произойдет аппаратный сброс этого разряда.
Операция чтения из EEPROM всегда выполняется за один машинный цикл. Кроме того, после установки разряда EERE в «1» процессор пропускает 4 машинных цикла перед началом выполнения следующей инструкции. Поэтому следить в программе за состоянием разряда EERE нет никакой необходимости.
Единственное, на что нужно обратить внимание при чтении из EEPROM, это состояние флага EEWE. Перед выполнением чтения необходимо убедиться, что этот флаг сброшен. В противном случае в результате загрузки в регистры новых значений адреса и данных во время записи в EEPROM процедура записи будет прервана, а результат этой записи не определен.
С учетом сказанного фрагмент программы, осуществляющий чтение из EEPROM, выглядит следующим образом:
Дата добавления: 2016-12-27; просмотров: 2396;