Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 10. Использование EEPROM 275 Отметим, что даже в доработанных клонах Arduino никакого супервизора, конечно, нет. И тут мы имеем все преимущества, которые особенно выявляются в случае конструирования устройств с автономным батарейным питанием. Подключение монитора питания (супервизора), как мы уже говорили, не представ­ ляет проблем - в простейшем случае он ставится просто вместо RС-цепочки по входу RESET (как типы DS 1 8 1 3-1 8 1 8), в других случаях иногда требуется отдель­ ный подтягивающий резистор в несколько килоом. Отметим еще, что можно применить рекомендуемый в фирменных описаниях спо­ соб защиты EEPROM переводом МК в состояние пониженного энергопотребления . Это можно сделать, например, если подсоединить монитор питания к выводу внешнего прерывания и все время отслеживать соответствующий бит в регистре GIFR, при установке которого в единичное состояние немедленно уводить МК в «спящее» состояние (штатным способом - через обработчик прерывания - это сделать сложнее, т. к. в прерывании команда s leep будет просто проигнорирова­ на, - см. главу 14) . Но, кроме относительной сложности этого процесса, следует еще учитывать, что при резком снижении потребления напряжение источника не­ медленно опять повысится (особенно в случае батарейного питания) . И если у вас предусмотрена процедура обратного вывода из этого состояния (например, чтобы схема не «защелкивалась>> при случайных бросках напряжения), то при относи­ тельно малом значении гистерезиса монитора питания это обязательно вызовет е « м др ебезг» схемы, и неизвестно, что хуже. Увеличить гистерезис можно включени­ еще нескольких резисторов, но, на взгляд автора, лучше при наличии внешнего монитора обойтись вводом в режим сброса, как более простым и надежным спосо­ бом, не требующим программного вмешательства и к тому же автоматически пре­ дусматривающим защиту от «защелкивания». Запись и чтение EEPROM Запись и чтение данных в EEPROM осуществляется через специальные регистры ввода/вывода: регистр данных EEDR, регистр адреса EEAR (если объем EEPROM бо­ лее 256 байтов, то последний состоит из двух регистров: EEARH и EEARL ) и регистр управления EECR. Основная особенность этого процесса - большая продолжитель­ ность процедуры записи, которая для разных моделей АVR может длиться пример­ но от 2 до 9 мс, в тысячи раз дольше, чем выполнение обычных команд. Обратим внимание, что, в отличие от записи, чтение формально осуществляется всего за один машинный цикл, даже быстрее, чем из обычной SRAM, - это типичная осо­ бенность всех EEPROM, имеющих структуру NOR (в отличие от flаsh-памяти, ко­ торая сейчас сплошь делается на NАND-структурах) . Поскольку в АVR это лишь область флеш-памяти, эмулирующая функциональность EEPROM, то в реальности чтение длится несколько дольше (подробно об этом чуть позже), хотя, конечно, да­ леко не так долго, как запись. При инициализации записи байта в EEPROM в регистре управления EECR устанав­ ливается флаг разрешения записи EEWE, по окончании записи он автоматически сбрасывается. Для удобства почти во всех моделях АVR предусмотрено соответст-

RkJQdWJsaXNoZXIy MTExODQxMg==