Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

danilov_x51_p2

.pdf
Скачиваний:
11
Добавлен:
10.02.2015
Размер:
1.04 Mб
Скачать

КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

ИНСТИТУТ ФИЗИКИ КАФЕДРА РАДИОФИЗИКИ

ДАНИЛОВ Е.В.

МИКРОКОНТРОЛЛЕРЫ Х51 АРХИТЕКТУРЫ.

ИСПОЛЬЗОВАНИЕ ВНЕШНЕГО ОЗУ И ВНУТРЕННЕЙ

FLASH-ПАМЯТИ

(Учебно-методическое пособие)

Казань - 2012

Печатается по решению Учебно-методической комиссии Института физики Казанского (Приволжского) Федерального Университета УДК 004.337, 004.338

Данилов Е.В. Микроконтроллеры х51 архитектуры. Использование внешнего ОЗУ и внутренней Flash-памяти. Учебно-методическое пособие для студентов старших курсов. Казань, 2012. 26 с.

Учебно-методическое пособие включает в себя задания, выполняемые в лаборатории по курсам, связанным с изучением 8 битных микроконтроллеров, c использованием лабораторного макета, представляющего собой плату начального освоения х51-совместимого микроконтроллера C8051F411, серийно выпускаемую фирмой производителем. Целью работ является получение практических навыков и умений работы с различными видами памяти, входящей в состав х51совместимых микроконтроллеров. В описании приводятся сведения, необходимые для выполнения практических заданий, приведены примеры программ. Пособие рекомендуется студентам Института физики К(П)ФУ, обучающимся на специальностях «Радиотелекоммуникации», «Компьютерная электроника» и «Информационная безопасность».

Рецензент: Лунев И. В. - к. ф.-м. н., старший преподаватель кафедры радиоэлектроники Института физики Казанского (Приволжского) федерального университета.

© Институт физики Казанского (Приволжского) федерального университета, 2012.

2

ОГЛАВЛЕНИЕ

 

ВВЕДЕНИЕ..............................................................................................................

4

1.Внешнее ОЗУ........................................................................................................

5

1.2.Описание регистров, необходимых для работы с внешним ОЗУ............

6

2.Внутренняя Flash-память.....................................................................................

6

2.1.Блокировка Flash-памяти и ключевой код..................................................

7

2.2.Процедура стирания Flash-памяти ..............................................................

8

2.3.Процедура записи Flash-памяти ..................................................................

8

2.4.Долговременное хранение данных............................................................

10

2.5.Описание регистров, необходимых для работы с Flash-памятью..........

10

3.Сведения, необходимые для работы с внешним ОЗУ и внутренней Flash-

 

памятью при написании программ на языке C (с использованием кросс-

 

компилятора C51 фирмы Keil Software, Inc.) .....................................................

13

3.1.Размещение переменных............................................................................

13

3.2.Указатели на данные...................................................................................

13

3.3. Примеры функций на языке C для работы с внешним ОЗУ и

 

внутренней Flash-памятью ...................................................................................

14

4.Задачи ..................................................................................................................

19

4.1.Раздел 1.........................................................................................................

19

4.2.Раздел 2.........................................................................................................

22

ПРИЛОЖЕНИЕ .....................................................................................................

25

ЛИТЕРАТУРА.......................................................................................................

26

3

ВВЕДЕНИЕ

Настоящее пособие является продолжением курса «Микроконтроллеры х51 архитектуры. Начальное освоение» [7] и включает в себя задания, выполняемые в лаборатории по курсам, связанным с изучением 8 битных микроконтроллеров, c использованием лабораторного макета [2], представляющего собой плату начального освоения х51-совместимого микроконтроллера C8051F411 [1], серийно выпускаемую фирмой Silicon Laboratories. Целью работ является получение практических навыков и умений работы с внешним оперативным запоминающим устройством (ОЗУ) и внутренней Flash-памятью, входящими в состав микроконтроллера

C8051F411.

Первая глава содержит сведения о содержащемся в микроконтроллере C8051F411 ОЗУ, отображенного в адресном пространстве внешней памяти данных (внешнее ОЗУ). Приведено описание структуры, регистров настройки внешнего ОЗУ, описание команд доступа к нему.

Вторая глава содержит сведения о содержащейся в микроконтроллере C8051F411 встроенной перепрограммируемой Flash-памяти для хранения программного кода и долговременного хранения данных. Приведено описание структуры, регистров настройки внутренней Flash-памяти, описание команд доступа к ней.

В третьей главе приведены сведения, необходимые для работы с внешним ОЗУ и внутренней Flash-памятью при написании программ на языке C. С целью устранения затруднений при изучении материала главы и применении его на практике, в конце главы приведены примеры программ.

Четвертая глава содержит задачи по приведенным в главах 1 и 2 темам, при выполнении которых студент получает практический навык работы с различными видами памяти, входящей в состав микроконтроллера

C8051F411.

Задания могут быть выполнены в таких интегрированных средах разработки программного обеспечения для однокристальных микроконтроллеров семейства х51, как IDE Silabs фирмы Silicon Laboratories или Keil µVision IDE фирмы Keil Software, Inc. на языках программирования Assembler (с использованием макроассемблера A51 фирмы Keil Software, Inc. [4]) и С (с использованием кросс-компилятора C51 фирмы Keil Software, Inc. [5]).

Предполагается, что студент, приступающий к выполнению предложенных задач, обладает начальными практическими навыками работы с х51-совместимыми микроконтроллерами, полученными при освоении курса [7], и умеет писать программы для данной платформы на языках

Assembler и С.

4

1.Внешнее ОЗУ

МК C8051F41x содержат 2048 байт ОЗУ, отображенные в адресном пространстве внешней памяти данных (см. рис. 1) [1]. Для доступа к этому пространству памяти можно использовать команду MOVX (см. приложение) и указатель данных DPTR, или команду MOVX с косвенным режимом адресации. Если команда MOVX используется с 8-разрядным операндом адреса (например, @R1), то старший байт 16-разрядного адреса определяется регистром управления интерфейсом внешней памяти EMI0CN (см. табл.1,2). Примечание: команда MOVX используется также для записи во Flash-память. По умолчанию команда MOVX обращается к памяти XRAM. Если команда MOVX используется с 16-разрядным операндом адреса (@DPTR), то старшие 5 бит 16-разрядного адреса внешней памяти данных «не имеют значения». Таким образом, 2048-байтное ОЗУ отображается помодульно во всем 64-Кбайтном адресном пространстве внешней памяти данных. Например, байт XRAM с адресом 0х0000 можно также адресовать с помощью адресов 0х0800, 0х1000, 0х1800, 0х2000 и т.д. Эту возможность можно использовать при линейном заполнении памяти, т.к. не требуется сбрасывать указатель адреса при достижении границы блока ОЗУ.

Рис. 1. Внешняя память (XRAM).

5

1.2.Описание регистров, необходимых для работы с внешним ОЗУ

Таблица 1. Внутреннее устройство регистра EMI0CN (регистр управления интерфейсом внешней памяти)

Доступность

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

 

 

 

 

 

 

 

 

 

по сбросу

Название

PGSEL

 

00000000

Номер бита

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

 

 

 

 

 

 

 

 

Адрес SFR:

0xAA

Таблица 2. Описание битов регистра EMI0CN

Bits 7-3: Не используются. Читаются как 00000b. Запись не оказывает никакого влияния.

Bits 2-0: PGSEL: Биты выбора страницы XRAM.

Регистр EMI0CN определяет старший байт 16-битного адреса внешней памяти данных при использовании команды MOVX с 8-битным адресом, задавая таким образом необходимую 256-байтную страницу ОЗУ. Т.к. старшие (неиспользуемые) биты этого регистра всегда равны нулю, то биты PGSEL определяет доступную страницу памяти XRAM.

Например: Если EMI0CN = 0x01, то будут доступны ячейки памяти с адресами 0x0100 – 0x01FF.

2.Внутренняя Flash-память

МК C8051F41x содержат встроенную перепрограммируемую Flashпамять для хранения программного кода и долговременного хранения данных [1]. МК C8051F411 содержит 32 кбайт Flash-памяти (см. рис. 2). Flash-память может программироваться внутрисистемно по одному байту за раз посредством C2-интерфейса или из программы. Если Flash-бит сброшен в 0, то для того, чтобы установить его в 1, его необходимо стереть. Байты перед программированием обычно стираются (устанавливаются в 0xFF). Временные интервалы операций записи и стирания, необходимые для корректной работы, устанавливаются автоматически аппаратными средствами. Опрос данных для определения завершения операции записи/стирания не требуется. Выполнение программного кода останавливается во время операций записи/стирания Flash-памяти.

Чтобы гарантировать целостность содержимого Flash-памяти, строго рекомендуется включить схему слежения за напряжением питания (установить бит VDMLVL (VDM0CN.5) в 1). Это касается любых систем, которые содержат код, осуществляющий запись/стирание Flash-памяти программным путем.

6

Рис. 2. Встроенная Flash-память.

2.1.Блокировка Flash-памяти и ключевой код

Функции блокировки и ключевой код защищают Flash-память от операций записи и стирания. Операции с Flash-памятью невозможны, если перед ними не записать в регистр блокировки и ключевого кода Flash-памяти (FLKEY) корректные ключевые коды в определенной последовательности. Эти коды следующие: 0xA5, 0xF1. Временные интервалы не имею значения, но эти коды должны быть записаны в правильной последовательности. Если эти коды записаны в неверном порядке или если записаны неверные коды, то операции записи и стирания Flash-памяти будут запрещены до следующего системного сброса. Операции записи и стирания Flash-памяти будут запрещены также в том случае, если попытка записать или стереть Flashпамять была произведена до корректной записи ключевых кодов. Блокировка Flash-памяти восстанавливается после каждой операции записи или стирания; следующая операция записи или стирания Flash-памяти возможна только после повторной записи ключевых кодов. Подробное описание регистра FLKEY приведено в табл. 5, 6.

7

2.2.Процедура стирания Flash-памяти

Flash-память можно программировать программным путем, используя команду MOVX с адресом и байтом данных в качестве обычных операндов. Перед записью во Flash-память с использованием команды MOVX операции записи Flash-памяти необходимо разрешить:

1)установкой в 1 бита разрешения записи памяти программ PSWE (PSCTL.0) (это приведет к тому, что операции записи с помощью команды MOVX будут относиться не к памяти XRAM, а к Flash-памяти. Бит PSWE остается установленным в 1 до сброса его программным путем. Чтобы предотвратить случайную запись во Flash-память, рекомендуется запрещать прерывания на все время, пока бит PSWE установлен в 1). Подробное описание регистра PSCTL приведено в табл.3, 4;

2)записью ключевых кодов Flash-памяти в правильном порядке в регистр FLKEY.

Запись во Flash-память может сбросить в 0 биты, но не может установить их в 1. Только операция стирания может установить в 1 биты во Flash-памяти. Поэтому ячейку памяти, которую требуется запрограммировать, необходимо предварительно стереть, чтобы можно было записать новое значение.

Flash-память организована секторами по 512 байт. Операция стирания применяется ко всему сектору целиком (все байты в секторе устанавливаются в 0xFF). Ниже приведен алгоритм стирания 512-байтной страницы Flash-памяти:

1.Запретить прерывания (рекомендуется).

2.Записать первый ключевой код в регистр FLKEY: 0xA5.

3.Записать второй ключевой код в регистр FLKEY: 0xF1.

4.Установить в 1 бит PSEE (PSCTL.1).

5.Установить в 1 бит PSWE (PSCTL.0).

6.Используя команду MOVX, записать байт данных в любую ячейку внутри 512-байтного сектора, который требуется стереть.

7.Сбросить в 0 биты PSWE (PSCTL.0) и PSEE (PSCTL.1).

8.Снова разрешить прерывания.

2.3.Процедура записи Flash-памяти

Байты во Flash-память могут записываться по одному за раз или группами по два байта. Бит FLBWE в регистре PFE0CN (см. табл.9,10) определяет, сколько байт будет записываться во Flash-память в процессе операции записи: один байт или блок из двух байт. Если FLBWE = 0, то Flash-память будет записываться по одному байту за раз. Если FLBWE = 1, то Flash-память будет записываться двухбайтными блоками. Блочная операция записи выполняется столько же времени, сколько и операция побайтной

8

записи. Это позволяет сэкономить время при сохранении больших объемов данных во Flash-памяти. В процессе операции побайтной записи во Flashпамять байты записываются индивидуально, и запись во Flash-память будет выполняться после каждой команды записи MOVX. Ниже приведен рекомендуемый алгоритм программирования Flash-памяти в побайтном режиме:

1.Запретить прерывания (рекомендуется).

2.Сбросить в 0 бит FLBWE (PFE0CN.0) для выбора побайтного режима записи.

3.Записать '0000'в биты регистра FLSCL.3–0.

4.Записать первый ключевой код в регистр FLKEY: 0xA5.

5.Записать второй ключевой код в регистр FLKEY: 0xF1.

6.Установить в 1 бит PSWE (PSCTL.0).

7.Сбросить в 0 бит PSEE (PSCTL.1).

8.Используя команду MOVX, записать один байт данных в требуемую ячейку памяти внутри 512-байтного сектора.

9.Сбросить в 0 бит PSWE (PSCTL.0).

10.Снова разрешить прерывания.

Шаги 3-9 необходимо повторять для каждого записываемого байта.

В процессе операции блочной записи во Flash-память процедура записи Flash-памяти будет выполняться только после записи последнего байта каждого блока с помощью команды записи MOVX. Размер записываемого во Flash-память блока составляет два байта (от четных адресов до нечетных адресов). Операции записи должны выполняться последовательно (т.е. ячейки памяти с адресами, оканчивающимися на 0b и 1b, должны записываться подряд одна за другой). Запись во Flash-память будет выполняться после команды записи MOVX, которая адресует ячейку памяти с адресом, оканчивающимся на 1b. Если не требуется обновлять ячейку Flash-памяти, соответствующую байту блока, то этот байт следует записать значением 0xFF. Ниже приведен рекомендуемый алгоритм программирования Flash-памяти в блочном режиме:

1.Запретить прерывания (рекомендуется).

2.Установить в 1 бит FLBWE (PFE0CN.0) для выбора блочного режима записи.

3.Записать '0000'в биты регистра FLSCL.3–0.

4.Записать первый ключевой код в регистр FLKEY: 0xA5.

5.Записать второй ключевой код в регистр FLKEY: 0xF1.

6.Установить в 1 бит PSWE (PSCTL.0).

7.Сбросить в 0 бит PSEE (PSCTL.1).

9

8.Используя команду MOVX, записать первый байт данных в четную ячейку блока (т.е. в ячейку с адресом, оканчивающимся на 0b).

9.Сбросить в 0 бит PSWE (PSCTL.0).

10.Записать первый ключевой код в регистр FLKEY: 0xA5.

11.Записать второй ключевой код в регистр FLKEY: 0xF1.

12.Установить в 1 бит PSWE (PSCTL.0).

13.Сбросить в 0 бит PSEE (PSCTL.0).

14.Используя команду MOVX, записать второй байт данных в нечетную ячейку блока (т.е. в ячейку с адресом, оканчивающимся на 1b).

15.Сбросить в 0 бит PSWE (PSCTL.0).

16.Снова разрешить прерывания.

Шаги 3-15 необходимо повторять для каждого записываемого блока.

2.4.Долговременное хранение данных

Flash-память может использоваться не только для хранения программного кода, но и для долговременного хранения данных. Это позволяет рассчитывать и сохранять во время выполнения программы такие данные, как калибровочные коэффициенты. Данные записываются с использованием команды MOVX и считываются с использованием команды MOVC (см. приложение). Примечание: команды чтения MOVX всегда относятся к памяти XRAM.

2.5.Описание регистров, необходимых для работы с Flash-памятью

Таблица 3. Внутреннее устройство регистра PSCTL (регистр управления записью/стиранием памяти программ)

Доступность

R

R

 

R

R

R

 

R

R/W

R/W

Значение

 

 

 

 

 

 

 

 

 

 

 

 

 

по сбросу

Название

 

 

PSEE

PSWE

00000000

Номер бита

 

Bit7

Bit6

 

Bit5

Bit4

Bit3

 

Bit2

Bit1

Bit0

 

 

 

 

 

 

 

 

 

 

 

 

Адрес SFR:

0x8F

Таблица 4. Описание битов регистра PSCTL

 

 

 

 

 

Bits 7-2:

 

Не используются. Читаются как 000000b. Запись не оказывает

 

 

никакого влияния.

 

 

 

 

 

 

 

 

Bit1:

 

PSEE: Разрешение стирания памяти программ.

 

 

 

 

Установка этого бита разрешает стереть целую страницу Flash-памяти

 

 

программ при условии, что бит PSWE также установлен. Если PSEE =

 

 

1 и PSWE = 1, то запись во Flash-память с использованием команды

 

 

MOVX сотрет целую страницу, которая содержит ячейку, адресуемую

 

 

командой MOVX (значение записываемого байта данных не важно).

 

 

0: Стирание Flash-памяти программ запрещено.

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

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