Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Архитектура и структурная организация микроконтроллеров семейства CORTEX-M. Учебное пособие
.pdf
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. В состав микроконтроллера входят следующие
устройства:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
