|
Энергонезависимая
память (точнее, управление ею)
представлена четырьмя региcтрами. EEARH
и EEARL - это регистр адреса, EEDR -
данных, EECR - регистр управления.
Энергонезависимая память (далее - EEPROM)
может записываться как
программатором, так и программой
микроконтроллера. Ресурс
перезаписей ( по даташиту) не менее
100.000 раз, стирать перед записью (как
память программ) не нужно. Время
записи байта - не более 4 мс.
У
рассматриваемого нами МК 8535 объем
EEPROM 512 байт, У МК с меньшим объемом (256
байт и менее) регистр EEARH отсутствует.
EEPROM очень удобна для хранения
настроечных данных и любых
запоминаемых параметров работы.
Чтение
из энергонезависимой памяти
предельно просто - нужный адрес
занести в EEARH (старший байт) и EEARL (младший
байт), установить в "1" бит EERE в
регистре EECR и ждать, пока этот бит не
обнулится аппаратно. После чего - в
регистре EEDR находятся прочитанные
данные.
Запись
немного посложнее. Сначала адрес,
куда мы хотим писать, заносится в EEARH
и EEARL, так же, как и при чтении. Затем
записываемое значение заносится в EEDR.
После этого нужно записать "1" в
бит EEMWE и после этого записать "1"
в бит EEWE. Сделано так для защиты от
каких-либо сбоев, чтобы запись в EEPROM
происходила только при "осмысленном"
обращении. Бит EEMWE сбрасывается
аппаратно через несколько тактов МК,
делая запись в EEPROM невозможной.
После
всего вышеизложенного программе
остается ждать, когда бит EEWE
сбросится в "0". Правда, ждать
придется достаточно долго, и если вас
это не устраивает - можно разрешить
прерывание, установив в "1"бит
EERIE. В этом случае программа, выполнив
все вышеописанные действия, идет
дальше по своим делам (все, кроме
работы с EEPROM!), а по окончанию записи
произойдет соответствующее
прерывание и сообщит программе -
готово!
|
|
Ну
и в завершение - надо обязательно
упомянуть одну "тонкость" при
работе с EEPROM. В момент включения и
выключения питания МК - а относительно
скорости работы МК это процесс
достаточно медленный - программа
может выполняться совершенно
непредсказуемо. И если в программе
есть хотя бы один фрагмент записи в
EEPROM - можете быть уверены, от
обязательно выполнится, уничтожив
хотя бы один байт EEPROM.
Выход
из этой ситуации есть лишь один -
использовать так называемый
супервизор питания. Это такая
микросхемка в трехногом корпусе,
выпускаемая многими производителями.
Две ноги - подключаются к напряжению
питания, третья - на пин Reset
микроконтроллера. Работает она очень
просто - при малом напряжении питания
держит МК в режиме сброса. Для того,
чтобы не мешала программатору - лучше
ее выход подключить в выводу Reset
через резистор ~1 кОм
В
более новых МК фирмы Atmel такое
устройство уже встроено в сам МК и
режимы работы его задаются fuse-битами.
Это МК серий Tiny и Mega.
|