Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка (1) / ЦИМПУ(atmega 128).doc
Скачиваний:
102
Добавлен:
16.04.2015
Размер:
4.2 Mб
Скачать

7.3 Память данных на эсппзу

ATmega128 содержит 4 кбайт памяти данных на ЭСППЗУ. Она организована как отдельная область памяти данных, в которой один байт может быть записан и считан. ЭСППЗУ характеризуется износостойкостью 100000 циклов чтения/записи.

В разделе “Программирование памяти” содержится детальное описание программирование ЭСППЗУ через интерфейсы SPI, JTAG или параллельное программирование.

7.3.1 Чтение и запись эсппзу

Доступ к ЭСППЗУ осуществляется через специальные регистры, расположенные в пространстве ввода-вывода.

Время записи в ЭСППЗУ приведено в табл. 7.2. Функция самосинхронизации позволяет программно определить возможность записи следующего байта. Если код программы содержит инструкции записи в ЭСППЗУ, то должны быть приняты следующие меры предосторожности. У источников питания с хорошей фильтрацией напряжение VCC медленно нарастает/спадает при подаче/снятии питания. По этой причине микроконтроллер в течение некоторого периода времени может оказаться под меньшим напряжением питания, чем требуется для заданной тактовой частоты. См. раздел “Предотвращение повреждения данных в ЭСППЗУ” для детального изучения методов разрешения данной проблемы.

В целях предотвращения неумышленной записи в ЭСППЗУ должна быть выполнена специфическая процедура записи. Детально этот вопрос рассматривается при описании Управляющего регистра ЭСППЗУ.

Когда происходит считывание ЭСППЗУ ЦПУ задерживается на 4 машинных цикла до выполнения следующей инструкции. Во время записи в ЭСППЗУ ЦПУ задерживается на два машинных цикла до выполнения следующей инструкции.

7.3.2 Адресные регистры эсппзу

Рис. 7.4. Адресные регистры ЭСППЗУ – EEARH и EEARL

Разряды 15..12 – Резерв

Данные зарезервированные разряды считываются как 0. При записи в данных разрядах необходимо указывать нули для совместимости с новыми версиями микроконтроллеров.

Разряды 11..0 – EEAR11..0: Адрес ячейки ЭСППЗУ

Регистры адреса ЭСППЗУ – EEARH и EEARL – определяют адрес ячейки ЭСППЗУ в 4 кбайтном пространстве. Байтные ячейки ЭСППЗУ адресуются линейно в диапазоне адресов 0…4096. Начальное значение EEAR неопределенное. Необходимое значение адреса должно быть записано до начала доступа к ЭСППЗУ.

Регистр данных ЭСППЗУ

Рис. 7.5. Регистр данных ЭСППЗУ –EEDR

Разряды 7…0 – EEDR7.0: Данные ЭСППЗУ

Для выполнения записи в ЭСППЗУ в регистр EEDR необходимо указать записываемые данные, которые будут записаны по адресу, указанному в регистре EEAR. После выполнения чтения из ЭСППЗУ в регистре EEDR содержатся считанные данные из ячейки по адресу указанному в EEAR.

Регистр управления ЭСППЗУ

Рис. 7.6. Регистр управления ЭСППЗУ –EECR

Разряды 7…4 – Резерв

Данные разряды у ATmega128 зарезервированы и считываются как 0.

Разряд 3 – EERIE: Разрешение прерывания по готовности ЭСППЗУ

Запись в EERIE 1 разрешает прерывание по готовности ЭСППЗУ, если кроме того установлен бит I в регистре SREG. Запись в EERIE нуля отключает это прерывание. Прерывание по готовности ЭСППЗУ генерируется, если бит EEWE сброшен.

Разряд 2 – EEMWE: Главное разрешение записи в ЭСППЗУ

Бит EEMWE разрешает установку бита EEWE, инициирующего запись в ЭСППЗУ. Данные будут записаны в ЭСППЗУ по указанному адресу, если в EEMWE записать 1, а затем в течение 4 машинных циклов записать 1 в EEWE. Если EEMWE=0, то запись в EEWE лог. 1 не вызовет никаких действий. После программной установки бита EEMWE он автоматически сбрасывается аппаратно по истечении четырех машинных циклов.

Разряд 1 – EEWE: Разрешение записи в ЭСППЗУ

Сигнал разрешения записи EEWE является стробирующим сигналом записи для ЭСППЗУ. Для записи в ЭСППЗУ после корректной установки адреса и данных необходимо установить бит EEWE. Перед установкой бита EEWE должен быть установлен бит EEWE, иначе запись в ЭСППЗУ не произойдет. При выполнении операции записи в ЭСППЗУ необходимо руководствоваться следующей последовательностью (порядок шагов 3 и 4 не важен):

  1. Ожидание пока EEWE станет равным нулю.

  2. Ожидание равенства нулю бита SPMEN в регистре SPMCSR.

  3. Запись нового адреса ЭСППЗУ в EEAR (опционально).

  4. Запись новых данных в регистр EEDR для записи в ЭСППЗУ (опционально).

  5. Запись лог. 1 в EEMWE, когда в EEWE регистра EECR записан ноль.

  6. Запись лог. 1 в EEWE в течение четырех машинных циклов после установки EEMWE.

ЭСППЗУ нельзя программировать во время записи флэш-памяти из ЦПУ. С учетом этого, перед началом новой записи в ЭСППЗУ необходимо проверить завершение программирования флэш-памяти. Шаг 2 необходимо выполнять, если в приложении используется программирование из загрузочного сектора. Если программирование флэш-памяти под управлением ЦПУ не предусмотрено, то шаг 2 может быть исключен. См. “Самопрограммирование из сектора начальной загрузки с поддержкой чтения во время записи” для детального изучения программирования из загрузочного сектора.

Предостережения: Прерывание между шагами 5 и 6 может нарушить цикл записи из-за превышения установленного предела времени на выполнение этих шагов. Если процедура обработки прерывания, осуществляющая доступ к ЭСППЗУ, прерывается другим доступом к ЭСППЗУ, то EEAR или EEDR будут изменены, вызывая сбой прерванного цикла доступа. Во избежание этих проблем рекомендуется сбрасывать флаг общего разрешения прерываний при выполнении последних четырех шагов.

По окончании записи бит EEWE сбрасывается аппаратно. Данный бит может опрашиваться программно для определения возможности записи следующего байта (нулевое значение). После установки EEWE ЦПУ останавливается на два машинных цикла перед выполнением следующей инструкции.

Разряд 0 – EERE: Разрешение чтения из ЭСППЗУ

Сигнал разрешения чтения из ЭСППЗУ EERE является стробом чтения ЭСППЗУ. После записи корректного адреса в регистр адреса EEAR бит EERE должен быть установлен к лог.1 для запуска механизма чтения ЭСППЗУ. Чтение из ЭСППЗУ выполняется одновременно с инструкцией, поэтому, запрашиваемые данные готовы для считывания сразу по ее завершении. После чтения из ЭСППЗУ ЦПУ задерживается на четыре машинных цикла, а только затем выполняет следующую инструкцию.

Пользователь должен опросить флаг EEWE до начала операции чтения. Если осуществляется операция записи, то невозможно не только считать ЭСППЗУ, но и изменить регистр адреса EEAR. Во время доступа к ЭСППЗУ используется калиброванный генератор. В таблице 7.2 приведено типичное время программирования ЭСППЗУ через ЦПУ.

Таблица 7.2 – Время программирования ЭСППЗУ

Операция

Количество периодов калиброванного RC-генератора (1).

Типичное время программирования

Запись ЭСППЗУ (через ЦПУ)

8448

8.5 мс

Прим 1. Используется частота 1 МГц независимо от установки конфигурационного бита CKSEL

Далее представлены примеры кодов функций записи в ЭСППЗУ на языках Ассемблер и Си. В данных примерах предполагается, что прерывания работают таким образом, что ни одно не возникает в процессе выполнения данных функций (например, путем общего отключения прерываний). Кроме того, считается, что из загрузочного сектора не выполняется программирование флэш-памяти. В противном случае функция записи в ЭСППЗУ должна ожидать окончания действия инструкции SPM.

Описание алгоритма

В данном примере происходит запись значений в ЭСППЗУ и чтение, используя адресные регистры EEARH и EEARL. Сначала нужно сделать разрешение прерывания по готовности ЭСППЗУ. Для этого нужно, чтобы бит EEMWE был равен 1. Запись происходит только в том случае, когда значение бита EEWE в регистре EECR становится равным 1. Теперь запись была произведена, что свидетельствует о том, что напротив поля Status: отображается Writing(запись). В нашем примере мы записываем число 2(R16) в ячейку с адресом $0001(R18 – старший разряд, R17 – младший разряд). Чтение происходит после того, когда значение бита EERE регистра EECR становится равным 1. При этом напротив поля Status: отобразится значение Ready(готов). Запись конечного результата будет записана в регистр R19.

В данных примерах предполагается, что прерывания работают таким образом, что ни одно не возникает в процессе выполнения данных функций (например, путем общего отключения прерываний). Кроме того, считается, что из загрузочного сектора не выполняется программирование флэш-памяти. В противном случае функция записи в ЭСППЗУ должна ожидать окончания действия инструкции SPM.

Соседние файлы в папке Новая папка (1)