
- •Общая структура и номенклатура микроконтроллеров
- •Микроконтроллер 68hc908gp32
- •3. Процессорный модуль cpu08
- •5. Начальный запуск и обработка прерываний.
- •6. Режимы работы микроконтроллеров
- •7. Организация и программирование памяти
- •8. Конфигурация микроконтроллеров
- •9. Модуль сторожевого таймера cop08
- •10. Параллельные порты ввода-вывода данных.
- •11. Модуль асинхронного последовательного интерфейса sci08
- •12. Модуль синхронного последовательного интерфейса spi08
- •13. Таймерные модули
- •14. Модуль аналого-цифрового преобразователя adc08.
- •15. Модуль обслуживания клавиатуры kbi08
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-памяти производится следующим образом.
Устанавливается значение бита стирания ERASE=1 и значение бита MASS в соответствии с реализуемым режимом стирания: MASS=0 - стирание всего модуля Flash-памяти, MASS=1 – стирание адресуемого блока.
С помощью команды STA прозводится запись произвольного байта в любую ячейку, находящуюся в стираемом массиве Flash-памяти: модуле или блоке (адресация массива).
Реализуется программная задержка длительностью 10 мкс.
Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенного напряжения на ячейки Flash-памяти в стираемом массиве.
Реализуется программная задержка длительностью 1 мс при стирании блока (бит MASS=1) или 4 мс при стирании всего модуля (бит MASS=0).
Устанавливается значение бита стирания ERASE=0.
Реализуется программная задержка длительностью 5 мкс при стирании блока (бит MASS=1) или 100 мкс при стирании всего модуля (бит MASS=0).
Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).
Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.
Программироование Flash-памяти производится побайтно в пределах одной страницы размером 32 байт. Для этого выполняется следующая процедура.
Устанавливается значение бита программирования PGM=1.
С помощью команды STA прозводится запись произвольного байта в любую ячейку программируемой страницы.
Реализуется программная задержка длительностью 10 мкс.
Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенного напряжения на ячейки Flash-памяти программируемой страницы.
Реализуется программная задержка длительностью 5 мкс.
С помощью команды STA прозводится запись байта в одну из ячеек программируемой страницы.
Реализуется программная задержка длительностью 30 мкс.
При повторении операций 6,7 производится запись всех байтов на данной странице.
Устанавливается значение бита стирания PGM=0.
Реализуется программная задержка длительностью 5 мкс.
Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).
Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.