Раздел: Документация
0 ... 48 49 50 51 52 53 54 ... 195 как для записи, так и для чтения. Причем в регистре EEARH используются только младшие биты (количество задействованных битов зависит от объема EEPROM-памяти). Незадействованные биты регистра EEARH доступны только для чтения и содержат нули. Во время записи в регистр данных EEDR (EEPROM Data Register) заносятся значения, которые будут сохранены в EEPROM по адресу, определяемому регистром EEAR, а во время чтения в этот регистр помещаются данные, считанные из EEPROM. Регистр управления EECR (EEPROM Control Register) используется для управления доступом к EEPROM-памяти. Формат этого регистра показан на Рис. 2.35, а описание его битов для различных моделей приведено в Табл. 2.24. Чтение (R)/3anncb(W) Начальное значение
R/W О R/W О R/W О R/W О R/W R/W О О АТтеда48х/88х/168х АТтеда 164х/324х/644х АТтеда640х/1280х/2560х 7 6 5 4 3 2 1 0
Чтение (R)/3anncb(W) R R R R R/W R/W R/W R/W Начальное значение 00000000 Рис. 2.35. Формат регистра EECR Таблица 2.24. Биты регистра EECR
(продолжение)
Итак, процедура записи одного байта в EEPROM-память состоит из следующих этапов: 1.Дождаться готовности EEPROM к записи данных (ждать, пока не сбросится флаг EEWE (ЕЕРЕ) регистра EECR). 2.Дождаться завершения записи в FLASH-память программ. 3.Загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR (при необходимости). 4.Установить в 1 флаг EEMWE (ЕЕМРЕ) регистра EECR. 5.В течение 4 тактов после установки флага EEMWE (ЕЕМРЕ) записать в бит EEWE (ЕЕРЕ) регистра EECR лог. 1. После установки этого бита процессор пропускает 2 такта перед выполнением следующей инструкции. Второй пункт введен из-за того, что запись в EEPROM не может выполняться одновременно с записью в FLASH-память. Поэтому перед выполнением записи в EEPROM следует убедиться, что программирование FLASH-памяти завершено. Если загрузчик в программе отсутствует, т. е. микроконтроллер никогда не изменяет содержимое памяти программ, второй шаг может быть пропущен. Процесс обращения к EEPROM-памяти контролируется внутренним калиброванным КС-генератором. Соответственно длительность цикла записи зависит от частоты этого генератора, величины напряжения питания и температуры. Типовое значение длительности этого цикла составляет 3.4 мс для моделей ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega640x/1280x/1281x/2560x/2561x и 8.5 мс — для остальных моделей. По окончании цикла записи бит EEWE (ЕЕРЕ) аппаратно сбрасывается, после чего программа может начать запись следующего байта. При записи в EEPROM могут возникнуть некоторые проблемы, вызванные прерываниями: 1.При возникновении прерывания между 4-м и 5-м этапом описанной последовательности запись в EEPROM будет сорвана, так как за время обработки прерывания флаг EEMWE сбросится в 0. 2.Если в подпрограмме обработки прерывания, возникшего во время записи в EEPROM-память, также происходит обращение к ней, то будет изменено содержимое регистров адреса и данных EEPROM. В результате первая запись (прерванная) будет сорвана. Во избежание описанных проблем настоятельно рекомендуется запрещать все прерывания (сбрасывать бит I регистра SREG) на время выполнения пунктов 2...5 описанной выше последовательности. Ниже приведены два примера реализации функции записи в EEPROM-память (управление прерываниями не производится). Пример на ассемблере EEPROM write:
} 0 ... 48 49 50 51 52 53 54 ... 195
|