OSDev Wiki
Advertisement

Общие сведения[]

В эту группу вошли регистры, не вошедшие формально в блок управления системой (SCB), но выполняющие подобные ему функции по управлению процессором и прерываниями.

Доступ к этим регистрам возможен только для привилегированного кода и только выровненными словами. Исключением является регистр STIR, доступ к которому может быть разрешён для непривилегированного кода.

Список регистров приведён в следующей таблице.

Адрес Обозначение Доступ Значение после сброса Описание
E000E000
RW
00000000
Главный регистр управления, зарезервирован
E000E004
ICTR
RO
IMP
Регистр типа контроллера прерываний
E000E008
ACTLR
RW
IMP
Вспомогательный регистр управления
E000E00C
CPPWR
RW
00000000
Регистр управления питанием сопроцессоров
E000EF00
STIR
WO
Регистр программного запроса прерываний
E000EF04

E000EF4C

Зарезервированы.
E000EF50
ICIALLU
WO ???
Регистр инвалидации кэша команд в Cortex-M7.
E000EF54

E000EF5C

Зарезервированы.
E000EF60
DCISW
WO ???
Регистр обслуживания кэша данных в Cortex-M7
E000EF64

E000EF8C

Зарезервировано
E000EF90

E000EFCC

Определяются реализацией.
E000EFD0
PID4
RO
Регистр идентификации периферии 4.
E000EFD4
PID5
RO
Регистр идентификации периферии 5.
E000EFD8
PID6
RO
Регистр идентификации периферии 6.
E000EFDC
PID7
RO
Регистр идентификации периферии 7.
E000EFE0
PID0
RO
Регистр идентификации периферии 0.
E000EFE4
PID1
RO
Регистр идентификации периферии 1.
E000EFE8
PID2
RO
Регистр идентификации периферии 2.
E000EFEC
PID3
RO
Регистр идентификации периферии 3.
E000EFF0
CID0
RO
Регистр идентификации компонентов 0.
E000EFF4
CID1
RO
Регистр идентификации компонентов 1.
E000EFF8
CID2
RO
Регистр идентификации компонентов 2.
E000EFFC
CID3
RO
Регистр идентификации компонентов 3.

Описание регистров[]

Регистр типа контроллера прерываний ICTR[]

Адрес: E000E004.
Доступ: только чтение, только слово, привилегированный.
Начиная с ARMv8.1-M, доступность регистра для непривилегированных отладочных доступов при установленном бите DAUTHCTRL_S.UIDAPEN или DAUTHCTRL_NS.UIDAPEN определяется реализацией.
Наличие: отсутствует в ARMv6-M, всегда имеется в ARMv7-M и ARMv8-M.
Безопасность (ARMv8-M): безопасное ПО может обратиться к небезопасной версии регистра по адресу E002E004. Для небезопасного ПО и отладчика по последнему адресу всегда считывается нуль.
Регистр не имеет отдельных версий для разных состояний безопасности.

ARM M-profile ICTR

Формат регистра типа контроллера прерываний

Разряды Доступ Обозначение Функция
31:4
Зарезервированы.
3:0
RO
INTLINESNUM
Общее число линий прерываний, поддерживаемое данной реализацией, заданное группами по 32. Число линий равно 32 * (INTLINESNUM + 1).

Для ARMv7-M оговаривается, что значение 1111 соответствует максимально возможному числу линий — 496.
В многопроцессорной системе первые 32 линии прерываний являются индивидуальными для каждого процессора, остальные — разделяемыми

Вспомогательный регистр управления ACTLR[]

Адрес: E000E008.
Доступ: в ARMv6-M и ARMv7-M определяется реализацией; в ARMv8-M – только привилегированный, полным словом.
Начиная с ARMv8.1-M, реализация определяет, будет ли игнорироваться отладочная запись при работающем процессоре.
Наличие: всегда.
Безопасность (ARMv8-M): безопасное ПО может обратиться к небезопасной версии регистра по адресу E002E008. Для небезопасного ПО и отладчика по последнему адресу всегда считывается нуль.
Наличие отдельных версий для разных состояний безопасности определяется реализацией.

Назначение разрядов этого регистра определяется реализацией. Несколько известных вариантов приведено ниже.

Формат ACTLR для процессорных ядер Cortex-M0 и Cortex-M0+[]

Ядра Cortex-M0 и Cortex-M0+ фактически не содержат регистр ACTRL: любая запись по его адресу игнорируется, а чтение возвращает нули.

Формат ACTLR для процессорного ядра Cortex-M1[]

Cortex-M1 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M1

Разряды Доступ Обозначение Функция
31:5
Зарезервированы.
4
RW
ITCMUAEN

Управление доступом к тесно связанной памяти команд (ITCM) через верхнюю область адресов (начиная с адреса 10000000):

  • 1 — доступ к ITCM разрешён;
  • 0 — доступ к ITCM запрещён, обращения по данным адресам передаются на внешнюю шину.

При сбросе устанавливается равным состоянию соответствующего конфигурационного входа процессорного ядра.

3
RW
ITCMLAEN

Управление доступом к ITCM через нижнюю область адресов (начиная с адреса 00000000):

  • 1 — доступ к ITCM разрешён;
  • 0 — доступ к ITCM запрещён, обращения по данным адресам передаются на внешнюю шину.

При сбросе устанавливается равным состоянию соответствующего конфигурационного входа процессорного ядра.

2:0
Зарезервированы.

Когда бит ITCMUAEN или ITCMLAEN установлен, обращения процессора по адресам, попадающим в соответствующий диапазон ITCM,вызывают доступы к ITCM. Когда бит сброшен, обращения по тем же адресам передаются на внешнюю шину. Таким образом, потенциально одним и тем же адресам могут соответствовать ячейки памяти как в ITCM, так и в памяти, доступной через внешнюю шину.

Формат ACTLR для процессорного ядра Cortex-M3[]

Cortex-M3 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M3

В ядре Cortex-M3 регистр ACTLR позволяет при необходимости отключить определённые особенности выполнения команд, призванные повысить производительность. При сбросе все они разрешены, а содержимое регистра равно нулю.

Приведённая информация относится к версии r2p0. TRM для версии r2p1 воспроизводит в этой и ряде других частей TRM на ядро Cortex-M4, что, очевидно, является ошибкой; по всей вероятности, ACTLR в r2p1 не отличается от r2p0. В более ранних ядрах отсутствует как минимум бит DISDEFWBUF, упоминаемый в списке ошибок (см. ошибку 838469).

Разряды Доступ Обозначение Функция
31:3
Зарезервированы.
2
RW
DISFOLD

Запрет сворачивания команды IT, т. е. начала выполнения первой команды в блоке IT в то время, когда выполнение самой команды IT ещё не завершено. Сворачивание должно быть запрещено, если необходимо обеспечить время выполнения IT-блоков с точностью до такта, поскольку при разрешённом сворачивании оно может колебаться.

1
RW
DISDEFWBUF

Запрет использования буфера записи, т. е. обеспечение завершения записи в память до начала выполнения следующей команды. Может быть полезно при отладке, поскольку отказы шины (прерывания BusFault) при включенном буфере записи могут быть неточными, а при выключенном будут точными.

0
RW
DISMCYCINT

Запрет прерывания многотактовых команд. Этот запрет потенциально увеличивает время реакции на прерывания, поскольку запрещает прерывание выполнения таких команд, как LDM и STM.

Формат ACTLR для процессорного ядра Cortex-M4[]

Cortex-M4 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M4

В ядре Cortex-M4 регистр ACTLR позволяет при необходимости отключить определённые особенности выполнения команд, призванные повысить производительность. При сбросе все они разрешены, а содержимое регистра равно нулю.

Разряды Доступ Обозначение Функция
31:10
Зарезервированы.
9
RW
DISOOFP

Запрет завершения команд с плавающей запятой вне очереди по отношению к целочисленным командам.

8
RW
DISFPCA

Запрет автоматического обновления бита CONTROL.FPCA.

При записи в регистр значение этого бита не должно изменяться или же он может быть сброшен, но не установлен (т. е., по сути, запретить автоматическое обновление бита CONTROL.FPCA нельзя).

7:3
Зарезервированы.
2
RW
DISFOLD

Запрет сворачивания команды IT, т. е. начала выполнения первой команды в блоке IT в то время, когда выполнение самой команды IT ещё не завершено. Сворачивание должно быть запрещено, если необходимо обеспечить время выполнения IT-блоков с точностью до такта, поскольку при разрешённом сворачивании оно может колебаться.

1
RW
DISDEFWBUF

Запрет использования буфера записи, т. е. обеспечение завершения записи в память до начала выполнения следующей команды. Может быть полезно при отладке, поскольку отказы шины (прерывания BusFault) при включенном буфере записи могут быть неточными, а при выключенном будут точными.

0
RW
DISMCYCINT

Запрет прерывания многотактовых команд. Этот запрет потенциально увеличивает время реакции на прерывания, поскольку запрещает прерывание выполнения таких команд, как LDM и STM.

Формат ACTLR для процессорного ядра Cortex-M7[]

Cortex-M7 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M7

В ядре Cortex-M7 регистр ACTLR позволяет при необходимости отключить определённые особенности выполнения команд, призванные повысить производительность. При сбросе все они разрешены.

Разряды Доступ Обозначение Функция
31:29
Зарезервированы.
28
RW
DISFPUISSOPT

В документации функции бита не указаны; судя по его обозначению, в состоянии 1 он запрещает некие оптимизации при запуске команд FPU на выполнение.

27
RW
DISCRITAXIRUW

Запрет критических операций «чтения под записью» на шине AXI:

  • 0 — обычная работа, обеспечивает обратную совместимость с нулевой ревизией данного ядра;
  • 1 — считывание памяти устройства или строго упорядоченной памяти, а также эксклюзивное считывание разделяемой памяти в канале AXIM AR не начинается, пока все уже выданные операции записи на AXI не будут завершены.
26
RW
DISDYNADD

Запрет динамического назначения для команд сложения и вычитания. Когда установлен, все такие команды выполняются на одном исполнительном блоке (EX2); когда сброшен, некоторые команды могут выполняться на EX1.

25:21
RW
DISISSCH1

Маска команд, которые не могут быть запущены в канале 1:

  • 21 — прямые переходы;
  • 22 — косвенные переходы, кроме загрузки в PC;
  • 23 — загрузка в PC;
  • 24 — целочисленные MAC и MUL;
  • 25 — VFP.
20:16
RW
DISDI

Маска видов команд в канале 0, запрещающих инициирование двух команд:

  • 21 — прямые переходы;
  • 22 — косвенные переходы, кроме загрузки в PC;
  • 23 — загрузка в PC;
  • 24 — целочисленные MAC и MUL;
  • 25 — VFP.
15
RW
DISCRITAXIRUR

Запрет критического «чтения под чтением» на шине AXI. Когда установлен, считывание из памяти устройства или строго упорядоченной памяти, а также эксклюзивное считывание разделяемой памяти не начинается, пока все уже выполняющиеся на AXI операции считывания не будут завершены.

14
RW
DISBTACALLOC

Запрет добавления новых элементов в кэш адресов переходов. Уже имеющиеся элементы могут обновляться, как обычно.

13
RW
DISBTACREAD

Запрет использования кэша адресов переходов; работает только статический предсказатель ветвлений.

12
RW
DISITMATBFLUSH

Запрет опорожнения ATB в ITM и DWT. Этот бит жёстко установлен.

11
RW
DISRAMODE

Запрет динамического выделения при чтении для областей памяти с обратной записью и выделением при чтении.

10
RW
FPEXCODIS

Запрет выдачи исключений GPU.

9:3
Зарезервированы.
2
RW
DISFOLD

Назначение бита не описано; судя по названию, запрещает «свёртку» команд.

1:0
Зарезервированы.

Формат ACTLR для процессорного ядра Cortex-M23[]

Cortex-M23 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M23

Разряды Доступ Обозначение Функция
31:30
Зарезервированы.
29
RW
EXTEXCLALL
  • 0 — команды эксклюзивной загрузки и записи используют глобальный монитор лишь в случае, когда доступ обращён к разделяемому региону (определяется атрибутами MPU или картой памяти по умолчанию);
  • 1 — команды эксклюзивной загрузки и записи используют глобальный монитор всегда, даже если доступ обращён к неразделяемому региону.

При наличии расширения безопасности этот бит имеет независимые версии для безопасного и небезопасного режимов.

28:0
Зарезервированы.

Формат ACTLR для процессорного ядра Cortex-M33[]

Файл:Cortex-M33 ACTLR.png

Формат вспомогательного регистра управления для ядра Cortex-M33

Разряды Доступ Обозначение Функция
31:30
Зарезервированы.
29
RW
EXTEXCLALL
  • 0 — команды эксклюзивной загрузки и записи используют глобальный монитор лишь в случае, когда доступ обращён к разделяемому региону (определяется атрибутами MPU или картой памяти по умолчанию);
  • 1 — команды эксклюзивной загрузки и записи используют глобальный монитор всегда, даже если доступ обращён к неразделяемому региону.

При наличии расширения безопасности этот бит имеет независимые версии для безопасного и небезопасного режимов.

28:14
Зарезервированы.
13
RW
SBIST

Устанавливается при использовании STL (библиотека тестирования ПО); по завершении использования STL сбрасывается.

12
RW
DISITMATBFLUSH

Когда установлен, запрещает опорожнение ITM/DWT ATB.

11
Зарезервирован.
10
RW
FPEXCODIS

Когда установлен, запрещает выход запроса прерывания от FPU.

9
RW
DISOOFP

Когда установлен, запрещает внеочередное завершение команд с плавающей запятой по отношению к остальным командам.

8:3
Зарезервированы.
2
RW
DISFOLD

Когда установлен, запрещает запуск двух команд за такт.

1
Зарезервирован.
0
RW
DISMCYCINT

Когда установлен, запрещает прерывание выполнения многотактовых команд.

Формат ACTLR для процессорного ядра Cortex-M55[]

Cortex-M55 ACTLR

Формат вспомогательного регистра управления для ядра Cortex-M55

Разряды Доступ Обозначение Функция
31:28
Зарезервированы.
27
RW
DISCRITAXIRUW

Когда установлен, считывание из памяти устройства или эксклюзивное считывание из разделяемой памяти на шине AXI не начинается, пока все ранее начатые операции записи не будут завершены.

26:18
Зарезервированы.
17:16
RW
DISDI

Запрещает те или иные возможности одновременного запуска двух команд:

  • 00 — разрешён запуск любых двух команд одновременно (если такой запуск не запрещён вообще битом DISFOLD);
  • 01 — запрещён запуск двух арифметических команд;
  • 10 — запрещена перестановка линий выполнения;
  • 11 — запрещены запуск двух арифметических команд и перестановка линий выполнения.
15
RW
DISCRITAXIRUR

Когда установлен, считывание из памяти устройства или эксклюзивное считывание из разделяемой памяти на шине AXI не начинается, пока все ранее начатые операции считывания не будут завершены.

14:13
Зарезервированы.
12
RW
DISITMATBFLUSH

Когда установлен, запрещает опорожнение ITM/DWT ATB.

11
RW
DISNWAMODE

Когда установлен, запрещает выделение кэш-памяти при записи.

10
RW
FPEXCODIS

Когда установлен, запрещает выход запроса прерывания от FPU.

9:8
Зарезервированы.
7
RW
DISOLAP

Запрещает совмещение при выполнении команд.

6
RW
DISOLAPS

Запрещает совмещение скалярных команд.

5
Зарезервирован.
4
RW
DISLO

Запрещает циклы с малыми накладными расходами.

3
RW
DISLOLEP

Запрещает предсказание циклов с малыми накладными расходами.

2
RW
DISFOLD

Когда установлен, запрещает запуск двух команд за такт.

1:0
Зарезервированы.

Регистр управления питанием сопроцессоров CPPWR[]

Адрес: E000E00C.
Доступ: только привилегированный, полным словом.
Начиная с версии ARMv8.1-M, отладочная запись в этот регистр при работающем процессоре может игнорироваться, что определяется реализацией. Наличие: только ARMv8-M с основным расширением.
Безопасность (ARMv8-M): безопасное ПО может обратиться к небезопасной версии регистра по адресу E002E00C. Для небезопасного ПО и отладчика по последнему адресу всегда считывается нуль.
Регистр не имеет отдельных версий для разных состояний безопасности.

ARM M-profile CPPWR

Формат регистра управления питанием сопроцессоров

Разряды Доступ Обозначение Функция
31:24
Зарезервированы.
23
RW
SUS11

Этот разряд доступен только в безопасном состоянии и должен программироваться в состояние, совпадающее с состоянием бита SUS10 (см. ниже), в противном случае его итоговое значение неизвестно. Само по себе оно игнорируется.
Если SUS10 не реализован, то SUS11 также не реализован.
При считывании из небезопасного режима всегда возвращается нуль, запись игнорируется.

22
RW
SU11

Этот разряд должен программироваться в состояние, совпадающее с состоянием бита SU10 (см. ниже), в противном случае его итоговое значение неизвестно. Само по себе оно игнорируется.
Если SU10 не реализован, то и SU11 также не реализован.
Если в SUS10 занесена единица, считывание SU11 из небезопасного режима возвращает нуль, а запись в него игнорируется.

21
RW
SUS10

Этот разряд определяет доступность бита SU10 из небезопасного состояния:

  • 0 – бит SU10 доступен обоим состояниям безопасности;
  • 1 – бит SU10 доступен только безопасному состоянию.

Если SU10 не реализован, то SUS10 также не реализован.
При считывании из небезопасного режима всегда возвращается нуль, запись игнорируется.

20
RW
SU10

Этот разряд определяет, разрешено ли FPU и MVE переходить в неизвестное состояние:

  • 0 – состояние FPU и MVE всегда должно оставаться известным;
  • 1 – FPU и MVE могут переходить в неизвестное состояние.

Технически установленное значение этого бита разрешает полностью отключать электропитание FPU и MVE.
Если в SUS10 занесена единица, считывание SU11 из небезопасного режима возвращает нуль, а запись в него игнорируется.
Поддержка бита SU10 определяется реализацией (наличием или отсутствием FPU).

19:16
Зарезервированы.
15,13,...1
RW
SUS7:0

Эти биты доступны только в безопасном режиме и управляют доступностью соответствующих битов SU7:0 из небезопасного режима:

  • 0 – соответствующий бит SU доступен для небезопасного режима;
  • 1 – соответствующий бит SU недоступен для небезопасного режима.

Если некоторый бит SU не реализован, соответствующий бит SUS также не реализован.

14,12,...0
RW
SU7:0

Эти биты определяют, должен ли соответствующий сопроцессор сохранять известное состояние:

  • 0 – соответствующий сопроцессор должен оставаться в известном состоянии;
  • 1 – соответствующий сопроцессор может переходить в неизвестное состояние.

Технически эти биты управляют возможностью отключения электропитания соответствующих сопроцессоров.
Если в соответствующий разряд SUS занесена единица, считывание SU из небезопасного режима возвращает нуль, а запись в него игнорируется.
Поддержка того или иного бита SU определяется реализацией (наличием или отсутствием соответствующего сопроцессора).

Хотя в документации это и не сказано явно, биты SUS отсутствуют (всегда равны нулю), если процессор не имеет расширения безопасности.

Регистр программного запроса прерываний STIR[]

Адрес: E000EF00.
Доступ: только запись; может быть разрешён доступ для непривилегированного кода (см. бит CCR.USERSETMPEND). Не имеет отдельных версий для разных режимов безопасности.
Наличие: только ARMv8-M с основным расширением и ARMv7-M.

ARM M-profile STIR

Формат регистра программного запроса прерываний

Разряды Доступ Обозначение Функция
31:9
Зарезервированы.
8:0
WO
INTID

Задаёт номер прерывания, которое должно быть выдано. Записываемая сюда величина равна номеру соответствующего прерывания минус 16, т. е. стандартные архитектурные прерывания (HardFault и т. д.) вызвать с помощью этого механизма нельзя.

Регистр состояния отказов RAS RFSR[]

Регистры идентификации периферии и компонентов[]

Advertisement