Регистр управления
Регистр управления EEPROM-памяти EECR (EEPROM Control Register) расположен по адресу $1C. Как следует из названия, данный регистр используется для управления доступом к EEPROM-памяти. Формат этого регистра показано на Рис. 5.9, а его описание приведено в Табл. 6.1.
Рис. 6.1. Формат регистра EECR
Таблица 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, выглядит следующим образом:
|