1.9 EEPROM память данных и FLASH память программ
Данные из EEPROM памяти и FLASH памяти программ могут быть прочитаны/перезаписаны в нормальном режиме работы микроконтроллера во всем диапазоне напряжения питания Vdd. Операции выполняются с одним байтом для EEPROM памяти данных, и одним словом для FLASH памяти программ. Запись производится по принципу "стирание - запись" для каждого байта или слова. Сформированная кодом программы операция стирания не может быть выполнена при включенной защите записи.
Доступ к памяти программ позволяет выполнить вычисление контрольной суммы. Данные, записанные в памяти программ, могут использоваться в виде: 14-разрядных чисел, калибровочной информации, серийных номеров, упакованных 7-разрядных символов ASCII и т. д. В случае обнаружения недействительной команды в памяти программ, выполняется пустой цикл NOP.
Число циклов стирания/записи для FLASH памяти программ значительно ниже по сравнению с EEPROM памятью данных, поэтому EEPROM память данных должна использоваться для сохранения часто изменяемых данных. Время записи данных управляется внутренним таймером, оно зависит от напряжения питания, температуры и имеет небольшой технологический "разброс".
При записи байта или слова автоматически стирается соответствующая ячейка, а затем выполняется запись. Запись в EEPROM память программ не воздействует на выполнение программы, а при записи во FLASH память программ выполнение программы останавливается на время записи. Нельзя обратиться к памяти программ во время цикла записи. В течение операции записи тактовый генератор продолжает работать, периферийные модули включены и генерируют прерывания, которые "ставятся в очередь" до завершения цикла записи. После завершения записи выполняется загруженная команда (из-за конвейерной обработки) и происходит переход по вектору прерываний, если прерывание разрешено и условие прерывания возникло во время записи.
Доступ к функциям записи/чтения EEPROM памяти данных и FLASH памяти программ выполняется через шесть регистров специального назначения:
- EEDATA;
- EEDATH;
- EEADR;
- EEADRH;
- EECON1;
- EECON2.
Операции чтения/записи EEPROM памяти данных не приостанавливают выполнение программы. В регистре EEADR сохраняется адрес ячейки EEPROM памяти данных. Данные сохраняются/читаются из регистра EEDATA. В PIC16F877 объем EEPROM памяти данных 256 байт (используются все 8-разрядов регистра EEADR).
Чтение FLASH памяти программ не влияет на выполнение программы, а во время операции записи выполнение программы приостановлено. В спаренных регистрах EEADRH:EEADR сохраняется 13-разрядный адрес ячейки памяти программ, к которой необходимо сделать обращение. Спаренные регистры EEADRH:EEADR содержат 14-разрядные данные для записи или отображают значение из памяти программ при чтении. Также как для EEPROM памяти данных, в регистры EEADRH:EEADR должен быть загружен адрес физически реализованной памяти программ (для PIC16F877 от 0000h до 1FFFh), потому что циклическая адресация не поддерживается (т. е. ячейка с адресом 4000h не отображается на 0000h для PIC16F877).
1.9.1 Регистры 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, затем происходит запись данных из регистра EEDATH:EEDATA. По завершении записи устанавливается флаг прерывания EEIF в '1', а микроконтроллер продолжит выполнять код программы.
Бит WRERR указывает, что произошел сброс микроконтроллера PIC16F877 во время выполнения операции записи. Бит WRERR устанавливается в '1', если во время выполнения записи данных произошел сброс по сигналу -MCLR или по переполнению сторожевого таймера WDT в нормальном режиме. Проверив состояние бита WREER, пользователь может повторить запись (регистры EEDATA и EEADR не изменяют своего значения). Содержимое регистров данных, адреса и бит EEPGD не изменяется после сброса по сигналу -MCLR, по переполнению сторожевого таймера WDT в нормальном режиме.
Ниже приводится назначение каждого из 8 битов регистра. Здесь и далее используются следующие обозначения:
- R – чтение бита;
- W – запись бита;
- U – не реализовано, читается как «0»;
- -n – значение после POR;
- -x – неизвестное значение после POR.
Регистр EECON1 (адрес 18Ch)
R/W–x | U–0 | U–0 | U–0 | R/W–x | R/W–0 | R/S–0 | R/S–0 |
EEPGD | – | – | – | WRERR | WREN | WR | RD |
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит З | Бит 2 | Бит 1 | Бит 0 |
Бит 7: | EEPGD: Бит выбора EEPROM память данных/FLASH память программ 0 = EEPROM память данных (бит не должен изменяться во время выполнения операции чтения/записи) 1 = FLASH память программ |
Бит 6: Бит 5: Бит 4: | Не используются: читаются как '0' |
Бит 3: | WRERR: Флаг ошибки записи данных 0 = запись завершена 1 = запись прервана (произошел один из сбросов: по сигналу -MCLR, по переполнению WDT в нормальном режиме) |
Бит 2: | WREN: Разрешение записи данных 0 = запись запрещена 1 = запись разрешена |
Бит 1: | WR: Инициализировать запись данных (программно может быть только установлен в '1') 0 = запись завершена 1 = инициализировать запись (сбрасывается в '0' аппаратно) |
Бит 0: | RD: Инициализировать чтение данных (программно может быть только установлен в '1') 0 = запись завершена 1 = инициализировать чтение (сбрасывается в '0' аппаратно) |
1.9.2 Чтение из EEPROM памяти данных
Для чтения из EEPROM памяти необходимо только записать адрес в регистр EEADR и сбросить бит EEPGD в '0'. После установки в '1' бита RD данные будут доступны в регистре EEDATA на следующем машинном цикле. Данные в регистре EEDATA сохраняются до выполнения следующей операции чтения или записи в EEDATA.
Рекомендованная последовательность действий при чтении из EEPROM памяти данных:
1. Записать адрес в регистр EEADR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.
2. Сбросить в '0' бит EEPGD для обращения к EEPROM памяти данных.
3. Инициализировать операцию чтения установкой бита RD в '1'.
4. Прочитать данные из регистра EEDATA.
Пример работы с EEPROM памяти приведён ниже в листинге п/п «RD_EEPROM».
;========================== RD_EEPROM ============================
; П/П считывания измерений EEPROM
; Входные параметры: ADRES – значение адреса считываемой ячейки EEPROM
; Выходные параметры: RESUL - считанное значение из EEPROM
; ==================================================================
RD_EEPROM:
bcf INTCON, GIE ;ЗАПРЕТ ВСЕХ ПРЕРЫВАНИЙ
movf ADRES, W ;ч/з ADRES из вне передаётся значение ячейке EEADR
bcf STATUS, RP0 ;2-банк
bsf STATUS, RP1
movf ADRES, W ; W = ADRES
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |


