Evgenii Legotckoi
4 августа 2015 г. 7:30

EEPROM в микроконтроллерах AVR Atmega

Микроконтроллеры AVR Atmega48/88/168/328 содержат память EEPROM объемом 256/512/512/1K байт соответственно. EEPROM в микроконтроллерах AVR поддерживает до 100 000 циклов перезаписи. Доступ к энергонезависимой памяти осуществляется посредством регистров трёх видов:

  • EEARH, EEARL - регистры адресации ячеек памяти. В Atmega48 регистр EEARH отсутствует, поскольку в данном типе микроконтроллера присутствует всего 256 ячеек памяти. EEARH отвечает за старший байт адреса ячейки памяти, EEARL за младший байт;
  • EEDR - регистр для записи и чтения данных;
  • EECR - регистр контроля, в данном регистре производится настройка тех действий, которые должны быть выполнены с памятью.

Подробное описание регистров EEPROM

EEARH и EEARL - регистры адреса ячейки EEPROM

Биты с 9-го по 15 зарезервированы и всегда считываются со значением ноль.

Биты с 0-го по 8 используются для указания номера ячейки памяти EEPROM, к которой будет производиться обращение.

EEDR - регистр данных EEPROM

Биты с 2-го по 7 - биты в которых записывается информация, которая должна быть записана в EEPROM или прочитана из неё.

Биты с 6-го по 7 - биты являются зарезервированными

Биты с 4-го по 5 - EEPM1 и EEPM0 - используются для установки режима работы EEPROM.

  • EEPM1 = 0, EEPM0 = 0 - Атомарная операция удаления и записи данных (длительность 3,4 мс)
  • EEPM1 = 0, EEPM0 = 1 - Только удаление данных (длительность 1,8 мс)
  • EEPM1 = 1, EEPM0 = 0 - Только запись данных (длительность 1,8 мс)
  • EEPM1 = 1, EEPM0 = 1 - Зарезервировано для будущего использования

Бит 3 - EERIE - данный бит используется для включения прерывания, в том случае, если Вы разрешили прерывания в прошивке своего контроллера.

Бит 2 - EEMPE - бит защиты от записи. Откладывает процесс записи данных в EEPROM на четыре цикла, чтобы EEPROM успела подготовиться к записи данных.

Бит 1 - EEPE - бит старта записи, выставляется для запуска записи, очищается в ноль аппаратно, в тот момент когда запись завершена. Поэтому может использоваться для контроля процесса записи данных в EEPROM .

Бит 0 - EERE - бит старта чтения. выставляется для запуск чтения из EEPROM.

Операции чтения и записи

EEPROM в Atmega очень медлительный интерфейс, который требует до 4 мс для совершения операций записи. Поэтому очень важно проверять, что предыдущая операция записи завершена успешно.

  1. ;======= Процедура записи в EEPROM ======================================================
  2. EEWrite:
  3. sbic EECR,EEPE ; Ожидаем, когда закончится предыдущая операция записи.
  4. rjmp EEWrite ; Не выходим из цикла до тех пор, пока не очистится флаг EEPE
  5. cli ; После чего выставляем запрет на прерывания.
  6. out EEARL,r16 ; Устанавливаем адрес ячейки, к которой будем обращаться
  7. out EEDR,r17 ; а также записываем в регистр данных информацию,
  8. ; которую будем сохранять
  9. sbi EECR,EEMPE ; устанавливаем защиту на запись
  10. sbi EECR,EEPE ; устанавливаем флаг записи
  11. sei ; после чего разрешаем прерывания
  12. ret ; и возвращаемся из подпрограммы.
  13. ;======= Процедура чтения из EEPROM ====================================================
  14. EERead:
  15. sbic EECR,EEPE ; Ожидаем, когда закончится предыдущая операция записи.
  16. rjmp EERead
  17. out EEARL, r16 ; Устанавливаем адрес ячейки, к которой будем обращаться
  18. sbi EECR,EERE ; Запускаем чтение установкой флага на чтение
  19. in r17, EEDR ; Возвращаем результат чтения в нужный регистр
  20. ret
  21. ;=======================================================================================

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь