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

Архитектура и структурная организация микроконтроллеров семейства CORTEX-M. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
21
3. Организация ядра микроконтроллера
Ядро микроконтроллера Cortex-M3 состоит из двух основных частей (рис.
3.1):
• процессорное ядро Cortex-M3, реализующее исполнение команд;
• системные периферийные устройства, обрамляющие процессорное яд­ро и предназначенные для системного управления, обменов и отладки.
3.1. Процессорное ядро микроконтроллера
Процессорное ядро Cortex-M3 является 32-разрядным RISC-процессором
с поддержкой набора команд Thumb-2. Ядро Cortex-M3 способно выполнять
большинство инструкций за один цикл. Это достигается с помощью трехсту-
пенчатого конвейера. Также поддерживается предсказание переходов для ми-
нимизации количества перезагрузок конвейера.
Процессорное ядро реализует Гарвардскую архитектуру с разными трак-
тами обращения в память программ и память данных. Для ускорения исполне-
ния команд применяется трехуровневый конвейер, что обеспечивает для боль-
шей части команд исполнение за 1 такт синхронизации процессора.
Уровень 1 конвейера реализует предвыборку до 3 команд с последующей
покомандной передачей в блок дешифрации.
На уровне 2 команды дешифрируются и передаются на исполнение в
АЛУ. для команд условного перехода предсказывается переход.
Исполнение команд осуществляется на уровне 3 конвейера, включающем
АЛУ простейших арифметических и логических операций, а также аппаратные
умножитель 32 х 32 и делитель.
Во время выполнения одной инструкции, следующая - дешифрируется, а третья - считывается из памяти. Этот механизм эффективен при исполнении линейных последовательностей команд. Если требуется выполнить переход, то, прежде чем продолжить выполнение кода программы, потребуется очистка и перезагрузка конвейера, что снижает производительность процессора.
Рис. 3.1 Ядро микроконтроллера CORTEX-M3
Ядро CORTEX-M3
Уровень 3 (исполнение)
Уровень 2 (дешифрация)
Уровень 1 (выборка)
Блок предвыборки команд
PREFETCH
(Буфер FIFO на 3 команды)
Блок выборки команд
FETCH
Блок дешифрации команд
DECODE
Блок генерации адресов
AGU
Блок предсказания пе-
реходов
BRANCH
Фаза адресации
ADDRESS PHASE AND
WRITEBACK
Блоки умножения и
деления
MULTIPLY, DEVIDE
Сдвиг SHIFT
АЛУ операций, выч.
факт. адресов перехода
ALU, BRANCH
Фаза чтения/записи
ADDRESS PHASE AND
WRITEBACK
Блок чтения/записи
Ком
INSTRUCTIONS
Данные
DATA
CORTEX-M3
Процессорное ядро
CORTEX-M3
Блок прерываний
NVIC,
Системный таймер
SYSTICK,
Блок системного
управления
SCB
Команды
Отладочный
блок
DWT
Коммутатор шин контроллера
BUS MATRIX
Отладочный
блок
FPB
Данные
Мост
AHB-AP
Внутренний ин-
терфейс PPB
Отладочные
интерфейсы
JTAG или SWD
Сигналы внеш-
него управления
и прерываний
Высокоскоростные шины для обмена с ОП и ПУ
Адресное
пространство
команд
I D S
Адресное
пространство
команд для чт/зап в ре-
жимах отлад-
ки
Системное
адресное
данных, ПУ,
внешней
памяти
Блок
защиты
памяти
MPU
анды
23
Во избежание этого, трехступенчатый конвейер Cortex оснащен логикой пред­сказания переходов. Это означает, что при достижении инструкции условного перехода выполняется упреждающая выборка и, в результате, оба назначения инструкции условного перехода будут доступны для исполнения и снижение производительности не произойдет.
3.2. Системные устройства ядра микроконтроллера
В ядре микроконтроллера предусмотрены следующие системные устрой-
ства, обеспечивающие различные режимы его функционирования и взаимодей-
ствия с другими устройствами микроконтроллера:
Блок системного управления SCB обеспечивает доступ к информации о
конфигурации и управление работой системы. Регистры блока управле-
ния системой содержат сигналы управления и состояния различных
устройств, подключенных к блоку. Регистры программно доступны про-
цессору через внутренний интерфейс PPB (Private Peripheral Bus).
Системный таймер SysTick, обеспечивающий формирование временных
интервалов с использованием аппаратного счетчика.
Блок прерываний NVIC (Nested Vectored Interrupt Controller), реализую-
щий аппаратную поддержку обработки запросов на прерывания.
Блок аппаратной защиты памяти MPU (Memory Protection Unit ) исполь-
зуется для поддержки модели непривилегированного и привилегирован-
ного выполнения программного обеспечения. Это требует организации
защиты памяти для контроля прав доступа. Блок позволяет разделить
карту памяти на регионы и задать их положение, размер, разрешение на
доступ и другие атрибуты.
Отладочные блоки FPB (Flash Patch and Breakpoint), DWT (Data
Watchpoint and Trace), обеспечивающие пошаговый режим, точки остано-
ва, трассировку и другие отладочные режимы. Подробные сведения по перечисленным устройствам в составе ядра мик- роконтроллера можно найти в литературе [1-4]. Ниже приведены краткие све-
24
Таблица 3.1
Регистры блока SCB
Базовый адрес
и смещение
Имя
Тип
Значение после
сброса
Описание
0xE000E000
InterruptType
0x008
ACTLR
RW
0x00000000
Дополнительный регистр управ-
ления
0xE000ED00
Блок управления системой SCB
0x000
CPUID
RO
0x412FC230
Регистр идентификации процес-
сора
0x004
ICSR
RW
0x00000000
Регистр управления прерывания-
ми
0x008
VTOR
RW
0x00000000
Регистр смещения таблицы векто-
ров прерываний
дения по блоку системного управления, системному таймеру и блоку прерыва­ний.
3.2.1. Блок системного управления SCB
Основными функциями блока являются:
программное управление сбросом на различных уровнях, ведение базовых адресов при обработке исключений, управление системными исключениями (кроме внешних прерываний, об-
рабатываемых блоком NVIC),
различные функции управления и контроля состояния устройств, включая
сопроцессор,
управление питанием – режим sleep, формирование состояния об отказах, формирование состояния в отладочных режимах.
Перечень, адреса и краткая информация о назначении регистров блока системного управления представлены в таблице 3.1. Программный доступ к ре­гистрам SCB реализуется только в привилегированном режиме. Для изменения уровня исполнения программы на привилегированный необходимо обращение в регистр CONTROL. С этой целью в Thread режиме в непривилегированном программном обеспечении может быть использована инструкция SVC для вы­полнения supervisor call и передачи управления привилегированной программе.
25
0x00C
AIRCR
RW
0xFA050000
Регистр управления прерывания-
ми и программного сброса
0x010
SCR
RW
0x00000000
Регистр управления системой
0x014
CCR
RW
0x00000200
Регистр конфигурации и управле-
ния
0x018
SHPR1
RW
0x00000000
Регистр №1 приоритета систем-
ных обработчиков
0x01C
SHPR2
RW
0x00000000
Регистр №2 приоритета систем-
ных обработчиков
0x020
SHPR3
RW
0x00000000
Регистр №3 приоритета систем-
ных обработчиков
0x024
SHCRS
RW
0x00000000
Регистр управления и состояния
системных обработчиков
0x028
CFSR
RW
0x00000000
Регистр состояния отказов с кон-
фигурируемым приоритетом
0x028
MMSR
RW
0x00
Регистр состояния отказов досту-
па к памяти
0x029
BFSR
RW
0x00
Регистр состояния отказов досту-
па к шине
0x02A
UFSR
RW
0x0000
Регистр состояния отказов, вы­званных ошибками программиро-
вания
0x02C
HFSR
RW
0x00000000
Регистр состояния тяжелого отка-
за
0x034
MMAR
RW
Не определено
Регистр адреса отказа доступа к
памяти
0x038
BFAR
RW
Не определено
Регистр адреса отказа доступа к
3.2.2. Системный таймер
Системный таймер SysTick реализован на основе 24-х разрядного вычи-
тающего счетчика. Управление таймером осуществляется с использованием ре-
гистров, перечисленных в таблице 3.2. Начальное перезагружаемое значение счетчика задается в поле RELOAD в регистре LOAD. По каждому фронту син-
хросигнала счетчик декрементируется. Текущее состояние счетчика отражается
в поле CURRENT в регистре VAL. При достижении 0 по следующему фронту синхросигнала таймер перезагружается из поля RELOAD и счёт продолжается.
Системный таймер работает от процессорного синхросигнала. После включения питания автоматически запускается встроенный генератор HSI, вы­рабатывающий тактовую частоту 8 МГц. Когда процессор остановлен для от­ладки, таймер не декрементируется.
Управление таймером осуществляется сигналами, заданными в регистре
CTRL (табл. 3.2):
26
Таблица 3.2
Регистры SYSTICK
Регистры
SYSTICK
Адрес
Доступ
Кодирование
31 - 24
23 - 17
16
15 - 3
2 1 0
CTRL
0xE000E010
чтение/
запись
-
COUNT
FLAG
-
CLK
SOURCE
TICK
INT
ENA
BLE
LOAD
0xE000E014
чтение/
запись
-
RELOAD
VAL
0xE000E018
чтение/
запись
-
CURRENT
CAL
0xE000E01C
чтение
-
TENMS
ENABLE - разрешает работу таймера: 0 - работа таймера запрещена; 1 -
работа таймера разрешена.
COUNTFLAG - устанавливается в 1, если таймер досчитал до нуля с по-
следнего момента чтения. Программное обеспечение может использовать
бит COUNTFLAG, чтобы определить, досчитал таймер до нуля или нет.
CLKSOURCE задает источник синхросигнала: 0 - LSI , 1 HCLK. TICKINT - разрешает запрос на прерывание от системного таймера: 0 -
таймер досчитает до нуля и прерывание не возникнет; 1 - таймер досчи-
тывает до нуля и возникает запрос на прерывание.
Регистр CAL предназначен для задания калибровочного значения TENMS= 0х0002904h (10500
), что позволяет генерировать базовое время 1 мс
10
с частотой 10.5 МГц (84/8=10.5 МГц).
Момент срабатывания таймера может быть определен программным спо-
собом путем циклического опроса сигнала COUNTFLAG, либо по сигналу прерывания SysTick, формируемого при обнулении таймера.
3.2.3. Блок прерываний NVIC
Контроллер прерываний NVIC (Nested Vectored Interrupt Controller) обес­печивает обработку 8 системных прерываний и исключений и до 240 внешних прерываний (IRQ - interrupt request). Используются до 8 уровней приоритетов
запросов и механизм вложенных прерываний. Интеграция контроллера преры-
ваний в ядро позволяет реализовать быстрый переход к обработчикам прерыва-
ний (interrupt service routines ISR) за счет аппаратного сохранения регистров в
27
стеке, выполняемого одной инструкций множественной записи и считывания
памяти. В таблице 3.3 приведен перечень запросов на прерывания и их пара­метры. В таблицах 3.4, 3.5 приведено описание регистров управления блоком прерываний. Разрешения и запрет прерываний осуществляется установкой соответ­ствующих бит в регистрах ISER, ICER. Для разрешения прерывания в соответствующем ему регистре ISERi необходимо задать бит SETENA:
Запись 0 – не влияет, 1 – разрешение прерывания;
Чтение 0 – прерывание запрещено, 1 – прерывание разрешено. Для запрета прерывания в соответствующем ему регистре ICERi необ­ходимо задать бит CLRENA:
Запись 0 – не влияет, 1 – запрет прерывания;
Чтение 0 – прерывание запрещено, 1 – прерывание разрешено.
Если прерывание не может быть обработано немедленно, например, при
наличии более приоритетного прерывания, возможен его перевод в режим ожи-
дания с использованием регистров ISPR. Для перевода прерывания в режим ожидания в соответствующем ему регистре ISPRi необходимо задать бит SETPEND:
1 – перевод прерывания в режим ожидания;
0 – перевод прерывания в режим ожидания не производится.
Отмена режима ожидания осуществляется с использованием регистров IСPR. Для отмены режима ожидания прерывания в соответствующем ему ре- гистре ICPRi необходимо задать бит CLRPEND:
1 – отмена режима ожидания;
0 – отмена режима ожидания не производится. Для слежения за состоянием прерываний используются биты ACTIVE в регистрах IABR. Эти регистры доступны только для чтения: 0 – прерывание не активно; 1 – прерывание активно и обслуживается, либо активно и ожидает обслужива- ния.
28
Таблица 3.3
Перечень запросов на прерывания и их параметры
Прерывания
Источник запроса на прерывание
Адрес вектора обработчика
Приоритет
-
-
0x00000000
-
Начальное значение указа­теля стека
RESET
Включение питания и горя­чий сброс
0x00000004
-3, наивысший
Внутренние си­стемные прерыва­ния ядра микро-
контроллера
NMI
Не используется
0x00000008
-2
Hard Fault
0x0000000C
-1
Memory Management Fault
MPU
0x00000010
0-7 (конфиг.)
Bus Fault
ЯДРО
0x00000014
0-7 (конфиг.)
Usage Fault
сбои при выполнении ин-
струкции
0x00000018
0-7 (конфиг.)
-
Резерв
SVCall
По команде SVC
0x0000002C
0-7 (конфиг.)
-
Резерв
-
PendSV
0x00000038
0-7 (конфиг.)
SysTick
SysTick
0x0000003C
0-7 (конфиг.)
IRQ0
CAN1
0x00000040
0-7 (конфиг.)
Прерывания от пери­ферийных устройств микроконтроллера
IRQ1
CAN2
0x00000044
0-7 (конфиг.)
IRQ2
USB
0x00000048
0-7 (конфиг.)
IRQ3…IRQ4
Резерв
0-7 (конфиг.)
IRQ5
DMA
0x00000054
0-7 (конфиг.)
IRQ6
UART1
0x00000058
0-7 (конфиг.)
IRQ7
UART2
0x0000005С
0-7 (конфиг.)
IRQ8
SSP1
0x00000064
0-7 (конфиг.)
IRQ9
Резерв
0-7 (конфиг.)
IRQ10
I2C
0x00000068
0-7 (конфиг.)
IRQ11
POWER
0x0000006С
0-7 (конфиг.)
IRQ12
WWDG
0x00000074
0-7 (конфиг.)
IRQ13
Резерв
0-7 (конфиг.)
IRQ14
Timer 1
0x00000078
0-7 (конфиг.)
IRQ15
Timer 2
0x0000007С
0-7 (конфиг.)
IRQ16
Timer 3
0x00000080
0-7 (конфиг.)
IRQ17
ADC
0x00000088
0-7 (конфиг.)
IRQ18
Резерв
0-7 (конфиг.)
IRQ19
COMP
0x0000008С
0-7 (конфиг.)
IRQ20
SSP2
0x000000A8
0-7 (конфиг.)
IRQ21 … IRQ26
Резерв
0-7 (конфиг.)
IRQ27
BACKUP
0x000000AC
0-7 (конфиг.)
IRQ28
EXT_INT1
0x000000B0
0-7 (конфиг.)
PA0, PB11
Внешние прерывания
IRQ29
EXT_INT2
0x000000B4
0-7 (конфиг.)
PB10, PC12
IRQ30
EXT_INT3
0x000000B8
0-7 (конфиг.)
PD15, PE15
IRQ31
EXT_INT4
0x000000BC
0-7 (конфиг.)
PB9, PC13
IRQ32… IRQ240
Резерв
29
Таблица 3.4
Регистры управления NVIC
ISER
Сигналы разреше­ния прерываний
SETENA
Регистр
ISER7
ISER6
ISER5
ISER4
ISER3
ISER2
ISER1
ISER0
Адрес
0xE000E11C
0xE000E118
0xE000E114
0xE000E110
0xE000E10C
0xE000E108
0xE000E104
0xE000E100
№ прерывания
239 - 224
223 - 192
191- 150
149 - 128
127 - 96
95 - 64
63 - 32
31 - 0
ICER
Сигналы запрета прерываний
CLRENA
Регистр
IСER7
IСER6
IСER5
IСER4
IСER3
IСER2
IСER1
IСER0
Адрес
0xE000E19C
0xE000E198
0xE000E194
0xE000E190
0xE000E18C
0xE000E188
0xE000E184
0xE000E180
№ прерывания
239 - 224
223 - 192
191- 150
149 - 128
127 - 96
95 - 64
63 - 32
31 - 0
ISPR
Сигналы установки состояния ожида­ния для прерыва­ния
SETPEND
Регистр
ISPR7
ISPR6
ISPR5
ISPR4
ISPR3
ISPR2
ISPR1
ISPR0
Адрес
0xE000E21C
0xE000E218
0xE000E214
0xE000E210
0xE000E20C
0xE000E208
0xE000E204
0xE000E200
№ прерывания
239 - 224
223 - 192
191- 150
149 - 128
127 - 96
95 - 64
63 - 32
31 - 0
ICPR
Сигналы сброса состояния ожида­ния для прерыва­ния
CLRPEND
Регистр
ICPR7
ICPR 6
ICPR 5
ICPR4
ICPR3
ICPR2
ICPR1
ICPR0
Адрес
0xE000E29C
0xE000E298
0xE000E294
0xE000E290
0xE000E28C
0xE000E288
0xE000E284
0xE000E280
№ прерывания
239 - 224
223 - 192
191- 150
149 - 128
127 - 96
95 - 64
63 - 32
31 - 0
IABR
Регистр активных прерываний
Регистр
IABR7
IABR6
IABR5
IABR4
IABR33
IABR2
IABR1
IABR0
Адрес
0xE000E31C
0xE000E318
0xE000E314
0xE000E310
0xE000E30C
0xE000E308
0xE000E304
0xE000E300
№ прерывания
239 - 224
223 - 192
191- 150
149 - 128
127 - 96
95 - 64
63 - 32
31 - 0
Таблица 3.5
Регистры приоритетов прерываний и запроса программного прерывания
IP
Приоритеты прерываний
№ реги­стра
Адрес реги­стра
Приоритеты запросов
31 - 24
23 - 16
15 - 8
7 - 0
IP0
0xE000E400
IP[3]
IP[2]
IP[1]
IP[0]
IP1
0xE000E404
IP[7]
IP[6]
IP[5]
IP[4]
IP2
0xE000E408
IP[11]
IP[10]
IP[9]
IP[8]
IP3
0xE000E40C
IP[15]
IP[14]
IP[13]
IP[12]
IP4
0xE000E410
IP[19]
IP[18]
IP[17]
IP[16]
IP5
0xE000E414
IP[23]
IP[22]
IP[21]
IP[20]
IP6
0xE000E418
IP[27]
IP[26]
IP[25]
IP[24]
IP7
0xE000E41C
-
-
IP[29]
IP[28]
STIR
Формировани запроса про­граммного прерывания
0xE000EF00
-
INTID
30
Рис.4.1 Структурная схема микроконтроллера CORTEX-M3
Системные устройства
Внутренняя память
Аналоговые вхо-
ды/выходы
Последовательные
интерфейсы
Bas Mfnrix
Коммутатор
шин
AHB
Ядро
микроконтроллера
CORTEX-M3
ПЗУ команд (BOOT)
ROM 256 Х 32
ППЗУ команд
EEPROM 4 Х 8К Х 32
FLASH
ОЗУ данных RAM 8К Х 32
Внешняя системная
шина
EXTERNAL SYSTEM BUS
Блок прямого
доступа в память
DMA
I
D
S
M
Сторожевой таймер
WDT
Блок батарейного
домена
BKP
Блок детектора напря-
жения питания PVD
Контроллер тактовой
частоты
RST_CLK
Мост AHB/APB
2 х UART
RS-232
USB
SPI
I2C
АЦП
ADC
2 х CAN
АЦП
ADC
АЦП
ADC
Таймеры
Timer 1
Timer 3
Timer 2
Порт A
MDR_PORTA
Порт B
MDR_PORTB
Порт C
MDR_PORTC
Порт D
MDR_PORTD
Порт E
MDR_PORTE
Порт F
MDR_PORTF
JTAG
Интерфейс с внешней памятью и ПУ
USB
(интерфейс,
питание)
Прерыввания
GPIO
Цифровые входы/выходы
общего назначения
Управление портами
GPIO
PA
PB
PC
PD
PE
PF
Управление
Интерфейс периферийных устройств PHB
4. Организация микроконтроллера CORTEX-M3
4.1. Структурная организация микроконтроллера
Обобщенная структурная организация микроконтроллера CORTEX-M3 представлена на рис. 4.1. В состав микроконтроллера входят следующие устройства:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]