8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

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) Начальное значение

-

-

ЕЕРМ1

ЕЕРМО

EERIE

ЕЕМРЕ

ЕЕРЕ

EERE

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

EERIE

EEMWE

EEWE

EERE

Остальные

модели

Чтение (R)/3anncb(W) R R R R R/W R/W R/W R/W Начальное значение 00000000

Рис. 2.35. Формат регистра EECR

Таблица 2.24. Биты регистра EECR

Бит

Название

Описание

Модель

7...6

-

Зарезервированы, читаются какО

Все модели

Выбор режима программирования. Эти биты определяют операцию, которая будет выполнена после записи 1 вби! ЕЕРЕ. При установленном бите ЕЕРЕ запись в биты ЕЕРМ1:0 игнорируется.

ЕЕРМ1,

ЕЕРМ1

ЕЕРМО

Длительность

Операция

ATmega48x/88x/168x, ATmega 164х/324х/644х,

5,4

ЕЕРМО

0

0

3.4 мс

Стирание + запись (атомарная операция)

ATmega640x/1280x/1281x, ATmega 2560х/2561х

0

1

1.8 мс

Только стирание

1

0

1.8 мс

Только запись

1

1 1

-

Зарезервировано

-

Зарезервированы, читаются как 0

Остальные модели


(продолжение)

Бит

Название

Описание

Модель

3

EERIE

Разрешение прерывания от EEPROM. Этот бит управляет генерацией прерывания, возникающего при завершении цикла программирования EEPROM. Если бит установлен в 1, прерывания разрешены (если флаг I регистра SREG также установлен в 1). При сброшенном бите ЕЕРЕ (см. далее в таблице) прерывание генерируется постоянно

Все модели

ЕЕМРЕ

Управление разрешением записи в EEPROM. Состояние этого бита определяет функционирование флага разрешения записи ЕЕРЕ (EEWE). Если данный бит установлен в 1, то при записи 1 в бит ЕЕРЕ (EEWE) происходит запись данных в EEPROM. В противном случае установка ЕЕРЕ (EEWE) в 1 не производит никакого эффекта. После установки бит ЕЕМРЕ (EEMWE) сбрасывается аппаратно через 4 такта

ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega640x/1280x/1281x, ATmega2560x/2561x

2

EEMWE

Остальные модели

1

ЕЕРЕ

Разрешение записи в EEPROM. При установке этого бита в 1 происходит запись данных в EEPROM (если ЕЕМРЕ (EEMWE) равен 1)

ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega640x/l 280х/1281 х, ATmega2560x/2561x

EEWE

Остальные модели

0

EERE

Разрешение чтения из EEPROM. После установки этого бита в 1 выполняется чтение данных из EEPROM. По окончании чтения этот бит сбрасывается аппаратно

Все модели

Итак, процедура записи одного байта в 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:

sbic

EECR, EEWE

Ждать завершения предыдущей записи

rjmp

EEPROM write

out

EEARH, rl8

out

EEARL, rl7

Занести адрес (г18:г17) в регистр адреса

out

EEDP,rl6

Записать данные (г1б) в регистр данных

sbi

EECR,EEMWE

Установить флаг EEMWE

sbi

EECR,EEWE

Начать запись в EEPROM

ret

Пример на Си

void EEPROM write(unsigned int uiAddress, unsigned char ucData) ;

\

while

(EECR & (1«EEWE) ) ;

/* Ждать завершения предыдущей записи *

EEAR

= uiAddress;

/* Проинициализировать регистры */

EEDR

= ucData;

EECR

1= (1«EEMWE);

/* Установить флаг EEMWE */

EECR

1= (1«EEWE);

/* Начать запись в EEPROM */

}



0 ... 48 49 50 51 52 53 54 ... 195