Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч-Пособие-HC08.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.23 Mб
Скачать

7. Организация и программирование памяти

Микроконтроллеры семейства 68HC08/908 адресуют 64 Кбайт внутренней памяти (адреса $0000-FFFF). Распределение адресного пространства задается картой памяти, вид которой определяется объемом внутренней памяти и набором периферийных устройств, входящим в состав данной модели микроконтроллера.

Распределение адресного пространства. Различные модели микроконтроллеров отличаются распределением памяти и составом адресуемых регистров. На рис.14 приведена карта памяти для микроконтроллеров MC68HC908GP32. В адресном пространстве имеется ряд неиспользуемых позиций, которые соответствуют ячейкам памяти, отсутствующим в данной модели микроконтроллеров. При обращении к этим адресам производится перезапуск микроконтроллера (см. раздел 5).

Младшие 64 позиции адресного пространства (адреса $000-$003F) занимают регистры служебных и периферийных модулей (табл. 15). Отметим, что 16-разрядные регистры таймерных модулей TCNТ, TMOD, TCHx занимают по две позиции адресного пространства: младший байт с суффиксом l, старший байт с суффиксом h.

В адресном пространстве ОЗУ располагаются ячейки стека, которые адресуются с помощью указателя стека SP. При установке микроконтроллера в начальное состояние (запуске) содержимое SP принимает значение $00FF, адресуя ячейку ОЗУ с данным адресом. В процессе выполнения программы можно установить любое значение указателя стека с помощью команды TXS, которая загружает в SP содержимое индексного регистра H:X, уменьшенное на 1 (см. раздел 3). После записи байта в стек содержимое SP уменьшается на 1, адресуя следующую незаполненную ячейку стека. Таким образом стек заполняется в направлении уменьшения адресов. Адрес вершины стека (последней заполненной ячейки стека) можно загрузить в регистр H:X с помощью команды TSX (см. раздел 3).

Часть адресного пространства занята ячейками служебного ПЗУ, в котором содержится программу-монитор, которая реализует необходимые процедуры при работе микроконтроллера в режиме отладки (см. раздел 6), обеспечивая возможность контроля его внутреннего состояния. Это масочно-программируемое ПЗУ, содержимое которого записывается в процессе изготовления микроконтроллера.

В старших позициях адресного пространства располагаются вектора начального запуска и прерываний (см. раздел 5).

$0000

$003F

Регистры периферийных и служебных модулей (64 байт)

$0040

$023F

ОЗУ данных

(512 байт)

$0080

$7FFF

Не используется

(32 192 байт)

$8000

$FDFF

Flash-память

(32 256 байт)

$FE00

Регистр SBSR

$FE01

Регистр SRSR

$FE02

Резервировано

$FE03

Регистр SBFCR

$FE04

Регистр INT1

$FE05

Регистр INT2

$FE06

Регистр INT3

$FE07

Резервировано

$FE08

Регистр FLCR

$FE09

Регистр BRKh

$FE0A

Регистр BRKl

$FE0B

Регистр BRKSCR

$FE0C

Регистр LVISR

$FE0D

$FE1F

Не используется

(19 байт)

$FE20

$FE52

ПЗУ – монитор отладки

(307 байт)

$FE53

$FF7D

Не используется

(43 байт)

$FF7E

Регистр FLBPR

$FF7F

$FFDB

Не используется

(19 байт)

$FFDC

$FFFF

Вектора запуска и прерываний

(36 байт)

Рис.14. Карта памяти для микроконтроллера MC68HC908GP32

Таблица 15. Адреса регистров периферийных модулей

Адрес

Регистр

Назначение

$0000

PORTA

Регистры данных

Портов

A, B, C, D

$0001

PORTB

$0002

PORTC

$0003

PORTD

$0004

DDRA

Регистры направления передачи портов A,B,C,D

$0005

DDRB

$0006

DDRC

$0007

DDRD

$0008

PORTE

Регистр данных порта E

$0009-0B

Не используются

$000C

DDRE

Регистры управления портами

E, A, C, D

$000D

PTAPUE

$000E

PTCPUE

$000F

PTDPUE

$0010

SPCR

Регистры синхронного порта SPI08

$0011

SPSR

$0012

SPDR

$0013

SCC1

Регистры асинхронного порта SCI08

$0014

SCC2

$0015

SCC3

$0016

SCS1

$0017

SCS2

$0018

SCDR

$0019

SCBR

$001A

KBSCR

Регистры модуляKBI08

$001B

KBIER

$001C

TBCR

Регистр базового таймера TBM08

$001D

INTSCR

Регистр прерываний

$001E

CONFIG2

Регистры конфигурации

$001F

CONFIG1

$0020

T1SC

Регистры таймерного модуля

TIM08-A

$0021-22

T1CNTh-l

$0023-24

T1MODh-l

$0025

T1SC0

$0026-27

T1CH0h-l

$0028

T1SC1

$0029-2A

T1CH1h-l

$002B

T1SC

Регистры таймерного модуля

TIM08-B

$002C-2D

T1CNTh-l

$002E-2F

T1MODh-l

$0030

T1SC0

$0031-32

T1CH0h-l

$0033

T1SC1

$0034-35

T1CH1h-l

$0036

PCTL

Регистры генераторного модуля

CGM08

$0037

PBWC

$0038-39

PMSh-l

$003A

PMRS

$003B

PMDS

$003C

ADSCR

Регистры

модуля

ADC08

$003D

ADR

$003E

ADCLK

Стирание и программирование Flash-памяти. Микроконтроллер 68HC908GP32 имеет внутреннюю Flash-память, содержимое которой может стираться и записываться при работе в режиме отладки или в процессе выполнения прикладной программы. Допускается до 10000 циклов стирания-программирования Flash-памяти. При этом необходимое повышенное напряжение обеспечивается внутренним преобразователем, поэтому не требуется подключение дополнительных внешних источников напряжения.

Запись Flash-памяти в режиме отладки производится с помощью команд WRITE, IWRITE, как описано в разделе 6. В процессе выполнения программы возможности стирания и записи Flash-памяти определяются содержимым регистра управления FLCR и регистра FBPR, определяющего адреса блоков, доступных для стирания-записи (рис.16).

Микроконтроллер MC68HC908GP32 содержат один модуль Flash-памяти, который размещается в адресном простанстве в виде единого массива объемом 32256 байт (см. рис.14). Этот модуль состоит из блоков размеров 64 байт, которые делятся на две страницы по 32 байт. Таким образом модуль Flash-памяти в этом микроконтроллере содержит 512 блоков. В исходном состоянии (до записи) содержимое всех ячеек Flash-памяти равно $FF.

7

6

5

4

3

2

1

0

0

0

0

0

HVEN

MASS

ERASE

PGM

а). FLCR (адрес $FE08)

7

6

5

4

3

2

1

0

BPR7

BPR6

BPR5

BPR4

BPR3

BPR2

BPR1

BPR0 / 0

б). FBPR (адрес $FF7E)

Рис.16. Формат содержимого регистров FLCR, FBPR, определяющих режим работы Flash-памяти

Содержимое регистров FLCR, FBPR приведено на рис. 16. Отдельные биты в регистре управления FLCR (рис.16,а) имеют следующее назначение:

HVEN – при установке значения HVEN=1 разрешает подачу повышенного напряжения для стирания блока или записи содержимого страницы Flash-памяти;

MASS – определяет режим стирания: при значении MASS=0 производится стирание всего модуля Flash-памяти, при MASS=1 – стирание адресуемого блока;

ERASE – при установке значения ERASE=1 реализуется режим стирания;

PGM - при установке значения PGM=1 реализуется режим программирования.

После запуска микроконтроллера значения всех битов в регистре FLCR равны 0. Установка этих битов в 1 производится при реализации алгоритмов стирания-записи Flash-памяти. При этом установка значения бита HVEN=1 pазрешается только после задания режима стирания (установка ERASE=1) или программирования (PGM=1). Бит MASS может быть установлен в 1 только при значении бита HVEN=1. Биты ERASE, PGM не могут одновременно иметь значение 1 (реализуется либо режим стирания, либо режим записи). После запуска микроконтроллера, когда устанавливаются значения битов ERASE=PGM=0, реализуется режим обычного считывания Flash-памяти.

Регистр адреса защиты FLBPR (рис. 16,б) содержит биты BPR7-0, определяющие адрес защиты Ap, начиная с которого ячейки Flash-памяти являются защищенными - недоступными для операций стирания-программирования.

Для модели 68HC908GP32 значение этого адреса: Ap = 1(BPR7-0)0000000,

где биты BPR7-0 указывают разряды A14-7 адреса Ap, в котором старший бит A15=1, а семь младших битов A6-0=0000000. Например, при значении BPR7-0 = $05 = 00000101 будет запрещено стирание-программирование ячеек Flash-памяти, начиная с адреса Ap=1 00000101 0000000 = $8280 до $FFFF. При значении BPR7-0=$00 все ячейки Flash-памяти защищены от стирания-программирования, при BPR7-0=$FF все ячейки Flash-памяти доступны для стирания-программирования.

Стирание содержимого Flash-памяти производится следующим образом.

  1. Устанавливается значение бита стирания ERASE=1 и значение бита MASS в соответствии с реализуемым режимом стирания: MASS=0 - стирание всего модуля Flash-памяти, MASS=1 – стирание адресуемого блока.

  2. С помощью команды STA прозводится запись произвольного байта в любую ячейку, находящуюся в стираемом массиве Flash-памяти: модуле или блоке (адресация массива).

  3. Реализуется программная задержка длительностью 10 мкс.

  4. Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенного напряжения на ячейки Flash-памяти в стираемом массиве.

  5. Реализуется программная задержка длительностью 1 мс при стирании блока (бит MASS=1) или 4 мс при стирании всего модуля (бит MASS=0).

  6. Устанавливается значение бита стирания ERASE=0.

  7. Реализуется программная задержка длительностью 5 мкс при стирании блока (бит MASS=1) или 100 мкс при стирании всего модуля (бит MASS=0).

  8. Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).

  9. Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.

Программироование Flash-памяти производится побайтно в пределах одной страницы размером 32 байт. Для этого выполняется следующая процедура.

  1. Устанавливается значение бита программирования PGM=1.

  2. С помощью команды STA прозводится запись произвольного байта в любую ячейку программируемой страницы.

  3. Реализуется программная задержка длительностью 10 мкс.

  4. Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенного напряжения на ячейки Flash-памяти программируемой страницы.

  5. Реализуется программная задержка длительностью 5 мкс.

  6. С помощью команды STA прозводится запись байта в одну из ячеек программируемой страницы.

  7. Реализуется программная задержка длительностью 30 мкс.

  8. При повторении операций 6,7 производится запись всех байтов на данной странице.

  9. Устанавливается значение бита стирания PGM=0.

  10. Реализуется программная задержка длительностью 5 мкс.

  11. Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).

  12. Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.