Работа с памятью констант EEPROM



При программировании микроконтроллеров AVR иногда возникает потребность сохранять данные, которые после выключения питания или сброса контроллера не изменяли бы свое значение. Для этих целей в составе AVR есть энергонезависимая память данных EEPROM (Electrically Erasable Programmable Read-Only Memory — электрически стираемое перепрограммируемое ПЗУ).

EEPROM имеет адресное пространство отличное от адресных пространств ОЗУ и flash памяти, в котором можно читать и записывать одиночные байты. В зависимости от модели микроконтроллера EEPROM может иметь объем от 512 байт (как, например, в микроконтроллере atmega16) до нескольких килобайт. Гарантированное количество циклов перезаписи этой памяти составляет не меньше 100000.

Объявление переменных в EEPROM

Использование EEPROM начинается с объявления переменных, хранящиеся в этой памяти. Синтаксис объявления таких переменных отличается от объявлений обычных переменных (хранящихся в ОЗУ) только наличием ключевого слова. В зависимости от компилятора данное ключевое слово может быть разным.

Объявление переменной в EEPROM для IAR AVR и CodeVision AVR:

__eeprom int a ; // целочисленная переменная

__eeprom int set[8]; //объявление массива челочисленных переменных

__eeprom int data[3] = {11, 3, 13}; //объявление массива и его инициализация

int __eeprom * pSetting; //указатель на 8-ми разрядную переменную в EEPROM, который сам хранится в RAM

Инициализация переменных в EEPROM

При объявлении переменных в EEPROM их можно инициализировать, то есть присвоить начальные значения.

//для CodeVision AVR

__eeprom int counter = 100;

__eeprom int data[3] = {20, 08, 1981};

Регистры для работы с EEPROM

Для работы с EEPROM используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.

Регистр адреса EEAR (EEPROM Address Register) предназначен для адресации однобайтной ячейки EEPROM памяти, к которой будет производиться обращение.

Для полной адресации хотя бы минимального объема EEPROM памяти (512-ти байт) требуется 9 разрядов (2 в 9-ой степени = 512), поэтому регистр EEAR является 16-ти разрядным и физически расположен в двух регистрах ввода/вывода – EEARH и EEARL.

Регистр EEARL полностью доступен для записи/чтения. А в регистре EEARH для записи/чтения доступны только младшие разряды, используемые для адресации. Остальные разряды доступны только для чтения и содержат «0».

Рис. 1.6. Регистр адреса EEAR (EEPROM Address Register)

Для чтения/записи используется один и тот же регистр данных – EEDR (EEPROM Data Register). Если выполняется процедура записи, мы должны поместить в EEDR байт данных, если выполняется процедура чтения, прочитать байт данных из EEDR.

Рис. 1.7. регистр данных – EEDR (EEPROM Data Register)

Регистр управления EECR (EEPROM Control Register) предназначен для управления доступом к EEPROM.

Рис. 1.8. Регистр управления EECR (EEPROM Control Register)

Бит EERIE (EEPROM Ready Interrupt Enable) – разрешение/запрещение прерывания по событию готовности EEPROM. Если бит EERIE установлен в 1, установлен флаг глобального разрешения прерываний (бит I регистра SREG) и бит EEWE очищен, то микроконтроллер будет генерировать прерывание “EEPROM Ready Interrupt”.

Бит EEMWE (EEPROM Master Write Enable) - главное разрешение записи. Если в течении 4-ех тактов после установки этого бита, устанавливается бит EEWE, то микроконтроллер выполняет запись в EEPROM. Бит EEMWE аппаратно сбрасывается в ноль после 4-ех периодов тактовой частоты.

Бит EEWE (EEPROM Write Enable) - разрешение записи. Этот бит выполняет роль стартового сигнала записи в EEPROM. Когда установлен адрес, данные и бит EEMWE, установка бита EEWE инициирует запись в EEPROM. Бит EEWE должен быть установлен в течении 4-ех тактов после установки EEMWE. Если это произойдет позже, то запись в EEPROM не будет произведена. Чтобы избежать возможных проблем, рекомендуется запрещать прерывания на время выполнения записи в EEPROM. Бит EEWE аппаратно сбрасывается, после завершения операции записи. Поэтому перед каждой операцией записи в EEPROM нужно проверять состояние этого разряда.

Бит EERE (EEPROM Read Enable) - разрешение чтения. Установка бита EERE инициирует процесс чтения из EEPROM. Перед каждым циклом чтения нужно проверять состояние разряда EEWE, если выполняется операция записи, то чтение из EEPROM не даст результата.


Дата добавления: 2018-11-24; просмотров: 314; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!