Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_модуль_2.doc
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
3.04 Mб
Скачать

5.4. Регистры eecon1, eecon2

Регистр EECON1 содержит биты управления косвенной записи/чтения EEPROM память данных FLASH память программ. Регистр EECON2 физически не реализован, он используется только при операциях записи с целью предотвращения случайной записи.

Значение бита EEPGD в регистре EECON1 определяет тип памяти, к которой будет выполнено обращение. Если EEPGD = 0, то операции относятся к EEPROM память данных. Когда EEPGD=1, обращение происходит к FLASH память программ.

В операции чтения используется только один дополнительный бит RD, инициализирующий операцию чтения из указанной памяти. Установив бит RD в "1", значение ячейки памяти будет доступно в регистре данных. Бит RD не может быть сброшен программно в "0", он сбрасывается автоматически по окончании операции чтения. При чтении из EEPROM памяти данные будут доступны в регистре EEDATA в следующем машинном цикле, после установки бита RD. При чтении из FLASH память программ данные будут доступны в регистре EEDATA:EEDATH на втором машинном цикле, после установки бита RD.

В операции записи используется два служебных бита WR, WREN и два бита статуса WRERR, EEIF. Бит WREN применяется для разрешения/запрещения операции записи (WREN = 0 –операция записи запрещена). Перед выполнением записи бит WREN необходимо установить в "1". Бит WR предназначен для инициализации записи, он аппаратно сбрасывается в "0" по завершении операции записи. Флаг прерывания EEIF устанавливается в "1" по завершении записи. Этот флаг должен быть сброшен программно в "0" перед установкой бита WR.

Для EEPROM памяти данных:

После установки битов WREN, WR в "1" стирается, указанная в регистре EEADR, ячейка EEPROM памяти, а затем происходит запись данных из регистра EEDATA. Операция записи сопровождается выполнением кода программы. По завершении записи устанавливается флаг прерывания EEIF в "1".

Для FLASH памяти программ:

После установки битов WREN, WR в "1" микроконтроллер приостанавливает выполнение программы. Стирается ячейка памяти программ, указанная в регистре EEADRH:EEADR, затем происходит запись данных из регистра EEDATAH:EEDATA. По завершении записи устанавливается флаг прерывания EEIF в "1", а микроконтроллер продолжит выполнять код программы.

Бит WRERR указывает, что произошел сброс микроконтроллера во время выполнения операции записи. Бит WRERR устанавливается в "1", если во время выполнения записи данных произошел сброс данных по сигналу –MCLR или по переполнению сторожевого таймера WDT в нормальном режиме. Проверив состояние бита WRERR, пользователь может повторить запись (регистры EEDATA и EEADR не изменяют своего значения). Содержимое регистров данных, адреса и бит EEPGD не изменяется после сброса по сигналу –MCLR, по переполнению сторожевого таймера WDT в нормальном режиме.

5.5. Eeprom память данных..

Чтение из EEPROM памяти данных.

Последовательность действий при чтении из EEPROM память данных.

1.Записать адрес в регистр EEADR.

2.Сбросить в "0" бит EEPGD для обращения к EEPROM памяти данных.

3.Инициализировать операцию чтения установкой бита RD в "1".

4.Прочитать данные из регистра EEDATA.

После установки в "1" бита RD данные будут доступны в регистре EEDATA на следующем машинном цикле. Данные в регистре EEDATA сохраняются до выполнения следующей операции чтения или записи в EEDATA.

Запись в EEPROM память данных.

Запись данных в EEPROM память данных несколько сложнее чтения. Адрес ячейки памяти и записываемый данные должны быть помещены в соответствующие регистры специального назначения, бит EEPGD сбрасывается в "0". Бит WREN должен всегда равняться нулю, если не осуществляется непосредственная запись в память. Бит WR может быть установлен в "1" только, если бит WREN был установлен в предыдущих командах, т.е. биты WR, WREN не могут устанавливаться в "1" одной командой. Бит WREN должен быть сброшен в "0" после инициализации записи (на процесс записи он не влияет).

Перед записью в EEPROM память должна быть выполнена обязательная последовательность команд, предотвращающая случайную запись. Обязательная последовательность выполняется при выключенных прерываниях.

Последовательность действий при записи в память.

  1. Если шаг 10 не был выполнен, то необходимо проверить, что не происходит запись (WR=0).

  2. Записать адрес в регистр EEADR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.

  3. Записать 8-разрядное значение в регистр EEDATA.

  4. Сбросить в "0" бит EEPGD для обращения к EEPROM памяти данных.

  5. Установить бит WREN в "1", разрешив запись в EEPROM память.

  6. Запретить прерывания, если они разрешены.

  7. Выполнить обязательную последовательность из пяти команд:

- запись значения 55h в регистр EECON2 (две команды, сначала в W затем в EECON2); - запись значения AAh в регистр EECON2 (две команды, сначала в W затем в EECON2); - установить бит WR в "1".

8. Разрешить прерывания (если необходимо).

9. Сбросить бит WREN в "0".

10. После завершения цикла записи сбрасывается в "0" бит WR, устанавливается в "1" флаг прерывания EEIF (сбрасывается программно), Если шаг 1 не выполняется, то необходимо проверить состояние битов EEIF, WR перед началом записи.

5.6. FLASH памяти программ

Чтение из FLASH памяти программ

Чтение из FLASH памяти программ очень похоже на процедуру чтения из EEPROM памяти данных, только необходимо выполнить две инструкции после установки бита RD в "1". Два пустых цикла NOP используются микроконтроллером для чтения данных из FLASH памяти программ и сохранения их в регистрах EEDATH:EEDATA. Данные в регистрах будут доступны после выполнения второй инструкции NOP. Данные в регистре EEDATH:EEDATA сохраняются до выполнения следующей операции чтения или записи в EEDATH:EEDATA.

Рекомендованная последовательность действий при чтении из FLASH памяти программ:

  1. Записать адрес в регистры EEDATH:EEDATA. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.

  2. Установить в "1" бит EEPGD для обращения к FLASH памяти программ.

  3. Инициализировать операцию чтения установкой бита RD в "1".

  4. Выполнить две команды NOP, чтобы позволить микроконтроллеру произвести чтение из FLASH памяти программ.

  5. Прочитать данные из регистров EEDATH:EEDATA.

Запись во FLASH память программ.

В течение операции записи выполнение программы останавливается, тактовый генератор продолжает работать, периферийные модули включены и генерируют прерывания, которые "ставятся в очередь" до завершения цикла записи. После завершения записи микроконтроллер продолжает выполнять код программы с места остановки. Другим существенным отличием записи во FLASH память программ является наличие бита защиты WRTв слове конфигурации, предотвращающий любую запись в память программ.

Запись данных во FLASH память программ несколько сложнее чтения. Адрес ячейки памяти программ и записываемые данные должны быть помещены в соответствующие специального назначения, бит EEPG устанавливается в "1". Бит WREN должен всегда равняться нулю, кроме непосредственной записи во FLASH память программ. Бит WR может быть установлен в "1" только, если бит WREN был установлен в предыдущих командах, т.е. биты WR, WREN не могут устанавливаться в "1" одной командой. Бит WREN должен быть сброшен программно в "0" после инициализации записи (на процесс записи он не влияет).

Перед записью во FLASH память программ должна быть выполнена обязательная последовательность команд, предотвращающая случайную запись. Обязательная последовательность выполняется при выключенных прерываниях. После обязательной последовательности должны размещаться две инструкции NOP, позволяющие микроконтроллеру произвести запись. Выполнение программы после записи начинается с инструкции, расположенной после двух команд NOP.

Последовательность действий при записи во FLASH память программ.

  1. Записать адрес в регистры EEDATH:EEDATA. Проверить, что записанный адрес корректен для данного типа микроконтроллера.

  2. Записать 14-разрядное значение в регистры EEDATH:EEDATA.

  3. Установить в "1" бит EEPGD для обращения к FLASH памяти программ.

  4. Установить бит WREN в "1", разрешив запись во FLASH память программ.

  5. Запретить прерывания, если они разрешены.

  6. Выполнить обязательную последовательность из пяти команд:

- запись значения 55h в регистр EECON2 (две команды, сначала в W затем в EECON2); - запись значения AAh в регистр EECON2 (две команды, сначала в W затем в EECON2); - установить бит WR в "1".

  1. Выполнить две команды NOP, чтобы позволить микроконтроллеру произвести запись во FLASH память программ.

  2. Разрешить прерывания (если необходимо).

  3. Сбросить бит WREN в "0".

По завершению операции записи аппаратно сбрасывается в "0" бит WR и устанавливается в "1" флаг прерывания EEIF (флаг EEIF сбрасывается в "0" программно). Для определения окончания операции записи проверять бит WR и EEIF не обязательно, т.к. микроконтроллер не выполняет программу во время записи во FLASH память программ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]