Мікроконтролери 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 мс для здійснення операцій запису. Тому дуже важливо перевіряти, що попередня операція запису завершена успішно.
;======= Процедура записи в EEPROM ====================================================== EEWrite: sbic EECR,EEPE ; Ожидаем, когда закончится предыдущая операция записи. rjmp EEWrite ; Не выходим из цикла до тех пор, пока не очистится флаг EEPE cli ; После чего выставляем запрет на прерывания. out EEARL,r16 ; Устанавливаем адрес ячейки, к которой будем обращаться out EEDR,r17 ; а также записываем в регистр данных информацию, ; которую будем сохранять sbi EECR,EEMPE ; устанавливаем защиту на запись sbi EECR,EEPE ; устанавливаем флаг записи sei ; после чего разрешаем прерывания ret ; и возвращаемся из подпрограммы. ;======= Процедура чтения из EEPROM ==================================================== EERead: sbic EECR,EEPE ; Ожидаем, когда закончится предыдущая операция записи. rjmp EERead out EEARL, r16 ; Устанавливаем адрес ячейки, к которой будем обращаться sbi EECR,EERE ; Запускаем чтение установкой флага на чтение in r17, EEDR ; Возвращаем результат чтения в нужный регистр ret ;=======================================================================================