ФЭНДОМ


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

Блок управления системой (SCB, system control block), являющийся частью пространства управления системой, содержит большую часть регистров, управляющих работой собственно процессора. Кроме них, для управления используются ещё несколько регистров, входящих прямо в состав процессорного ядра.

Доступ ко всем регистрам всегда осуществляется только выровненными полными словами, если в описании регистра явно не сказано иное. Попытка невыровненного доступа либо обращение к отдельному байту или полуслову приведёт к непредсказуемым последствиям. Доступ возможен только для привилегированного кода.

Перечень всех регистров SCB приведён в следующей таблице, а их подробные описания даны ниже в соответствующих подразделах.

Адрес Обозначение Доступ Значение после сброса Описание
E000ED00 CPUID
RO
определяется производителем
Основной регистр идентификации процессора
E000ED04 ICSR
RW
00000000
Регистр состояния и управления прерываниями
E000ED08 VTOR
RW
см. примечание 1
Регистр адреса таблицы векторов прерываний
E000ED0C AIRCR
RW
см. примечание 2
Регистр управления сбросами и прерываниями
E000ED10 SCR
RW
00000000
Регистр управления системой
E000ED14 CCR
RW
00000000
Регистр управления и конфигурации
E000ED18 SHPR1
RW
00000000
Регистр приоритетов системных обработчиков 1; отсутствует в ARMv6-M
E000ED1C SHPR2
RW
00000000
Регистр приоритетов системных обработчиков 2
E000ED20 SHPR3
RW
00000000
Регистр приоритетов системнвх обработчиков 3
E000ED24 SHCSR
RW
00000000
Регистр состояния и управления системными обработчиками
E000ED28 CFSR
RW
00000000
Регистр состояния отказов с настраиваемыми приоритетами; отсутствует в ARMv6-M
E000ED2C HFSR
RW
00000000
Регистр состояния серьёзного отказа; отсутствует в ARMv6-M
E000ED30 DFSR
RW
см. примечание 3
Регистр состояния отладочных отказов, см. раздел «Отладочные регистры»
E000ED34 MMFAR
RW4
не определено
Регистр адреса отказа памяти; отсутствует в ARMv6-M
E000ED38 BFAR
RW4
не определено
Регистр адреса отказа шины; отсутствует в ARMv6-M
E000ED3C AFSR
RW
не определено
Вспомогательный регистр состояния отказов. Определяется реализацией; отсутствует в ARMv6-M
E000ED40

E000ED84

RO
Регистры идентификации процессора и его средств
E000ED88 CPACR
RW
не определено
Регистр управления доступом к сопроцессорам; отсутствует в ARMv6-M
E000ED8C Зарезервировано

Примечания. 1. Конкретная реализация может предусмотреть средства для принудительной установки регистра VTOR в определённое начальное значение. Если таких средств нет, при сбросе он будет обнуляться.
2. Состояние регистра AIRCR после сброса определяется реализацией, однако его биты 10:8 (поле PRIGROUP) будут равны нулю.
3. Регистр DFSR устанавливается в 0 только сбросом по включению питания.
4. Регистры MMFAR и BFAR в документации определены как доступные для чтения и записи, однако более логичным является доступ только для чтения.

Помимо регистров, входящих в состав SCB, важную роль в управлении вычислительной системой играют некоторые другие регистры, не вошедшие в отдельную категорию, а также регистры контроллера прерываний, таймера и устройства защиты памяти. В процессорах, имеющих FPU, к ним добавляются регистры управления FPU. Последние документация ARM относит к регистрам SCB, хотя они, как и другие перечисленные здесь регистры различных технических средств, занимают адреса, относящиеся к другим областям SCS.

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

Основной регистр идентификации процессора CPUID

Адрес: E000ED00
Доступ: только чтение
Наличие: всегда

ARM M-profile CPUID register

Формат основного регистра идентификации процессора в версии ARMv7-M

Этот регистр служит одним из средств идентификации процессора, на котором выполняется программа. Назначение его полей:

Разряды Обозначение Функция
31:24
IMPLEMENTER Код разработчика, выданный компанией ARM. Сама ARM для своих разработок использует код 41
23:20
VARIANT Номер варианта архитектуры, определяемый реализацией
19:16
ARCHITECTURE Код версии архитектуры. Содержит значение 1100 для ARMv6-M и 1111 для ARMv7-M
15:4
PARTNO Номер компонента, определяемый реализацией
3:0
REVISION Номер ревизии, определяемый реализацией

Некоторые возможные значения этого регистра:

  • 410CC210 — Cortex-M1 r0p0
  • 410CC211 — Cortex-M1 r0p1
  • 411CC210 — Cortex-M1 r1p0
  • 410FD214 – Cortex-M33 patch 4

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

Адрес: E000ED04
Доступ: обычный
Наличие: всегда

ARM M-profile ICSR

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

Разряды Доступ Обозначение Функция
31
RW
NMIPENDSET Чтение:
  • 0 — запрос на вызов обработчика NMI не установлен
  • 1 — запрос на вызов обработчика NMI установлен

Запись:

  • 0 — игнорируется
  • 1 — вызывает появление запроса NMI

Руководство по архитектуре ничего не говорит о возможности сброса запроса NMI, однако ядро Cortex-M1 сбрасывает этот запрос при записи единицы в бит AIRCR.VECTCLRACTIVE.

30:29
Зарезервированы
28
RW
PENDSVSET Чтение:
  • 0 — запроса прерывания PendSV нет
  • 1 — запрос прерывания PendSV ожидает обработки

Запись:

  • 0 — игнорируется
  • 1 — выдача запроса прерывания PendSV

Результат одновременной записи единиц в биты PENDSVSET и PENDSVCLR непредсказуем.

В ядре Cortex-M1 этот бит присутствует лишь в случае, если поддерживаются системные расширения.

27
WO
PENDSVCLR Запись:
  • 0 — игнорируется
  • 1 — сброс ожидающего запроса прерывания PendSV

Результат одновременной записи единиц в биты PENDSVSET и PENDSVCLR непредсказуем.

В ядре Cortex-M1 этот бит присутствует лишь в случае, если поддерживаются системные расширения.

26
RW
PENDSTSET Чтение:
  • 0 — запроса прерывания SysTick нет
  • 1 — запрос прерывания SysTick ожидает обработки

Запись:

  • 0 — игнорируется
  • 1 — выдача запроса прерывания SysTick

Результат одновременной записи единиц в биты PENDSTSET и PENDSTCLR непредсказуем.

В версии ARMv6-M этот бит не реализован, если отсутствует системный таймер. В частности, он отсутствует в ядре Cortex-M1, если последнее не поддерживает системные расширения.

25
WO
PENDSTCLR Запись:
  • 0 — игнорируется
  • 1 — сброс ожидающего запроса прерывания SysTick

Результат одновременной записи единиц в биты PENDSTSET и PENDSTCLR непредсказуем.

В версии ARMv6-M этот бит не реализован, если отсутствует системный таймер. В частности, он отсутствует в ядре Cortex-M1, если последнее не поддерживает системные расширения.

24
Зарезервирован
23
RO
ISRPREEMPT Показывает, будет ли при выходе из отладочного останова начата обработка ожидающего прерывания:
  • 0 — обработка прерывания не начнётся
  • 1 — обработка прерывания начнётся

В версии ARMv6-M этот бит не реализован, если отсутствует поддержка отладочных возможностей.

22
RO
ISRPENDING Показывает, имеется ли ожидающее обработки внешнее прерывание, поступившее от контроллера прерываний:
  • 0 — внешних прерываний, ожидающих обработки, нет
  • 1 — имеется по крайней мере одно ожидающее обработки внешнее прерывание

В версии ARMv6-M этот бит не реализован, если отсутствует поддержка отладочных возможностей.

21
Зарезервирован
20:12
RO
VECTPENDING Номер самого приоритетного из ожидающих прерываний (без учёта воздействия бита PRIMASK.PM). Если таковых нет, содержит нуль.

В ядре Cortex-M1 это поле присутствует лишь в случае, если поддерживаются системные расширения, хотя документация на архитектуру ARMv6-M ничего по этому поводу не говорит.

11
RO
RETTOBASE В версии ARMv7-M в режиме обработчика показывает, имеется ли ещё какое-либо активное прерывание, помимо обрабатываемого в данный момент:
  • 0 — имеется как минимум одно другое активное прерывание
  • 1 — других активных прерываний нет

В режиме потока значение этого бита не определено.

В версии ARMv6-M этот бит зарезервирован.

10:9
Зарезервированы
8:0
RO
VECTACTIVE Номер прерывания, чей обработчик выполняется в данный момент; 0 для режима потока. Значение этого поля совпадает с битами 8:0 регистра IPSR.

Это поле реализовано лишь в случае, если процессор поддерживает отладочные средства. TRM на ядро Cortex-M1 подобного указания не содержит, однако исходный код данного ядра подтверждает утверждение руководства по архитектуре.

Регистр адреса таблицы векторов прерываний VTOR

Адрес: E000ED08
Доступ: обычный
Наличие: всегда

ARM M-profile VTOR

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

Разряды Обозначение Функция
31:7
TBLOFF Старшие разряды адреса таблицы векторов
6:0
Зарезервированы

В некоторых реализациях один или два старших бита поля TBLOFF могут быть жёстко заведены на 0, что ограничивает выбор положения таблицы векторов в памяти. Чтобы проверить возможности размещения таблицы векторов, программа может записать в регистр VTOR все единицы, а затем считать из него реально записанное значение.

Некоторые реализации (как минимум для архитектуры ARMv6-M) вообще не содержат физического регистра VTOR. В этом случае считывание из него вернёт нулевое значение, а запись игнорируется.

Адрес таблицы векторов для должен быть выровнен на границу, соответствующую размеру таблицы. Так, если используется не более 16 векторов внешних прерываний, достаточно выравнивания на границу 32 слов, поскольку таблица будет содержать 16 стандартных векторов плюс до 16 векторов внешних прерываний. Если используется большее число внешних прерываний, выравнивание должно быть соответствующим образом увеличено.

Примечание. В ранних версиях документации писалось, что поле TBLOFF содержит смещение таблицы векторов; отсюда произошли аббревиатуры VTOR и TBLOFF. Позднее вместо некорректного для данного случая термина «смещение» стали применять правильный «адрес», однако обозначения регистра и поля оставили без изменений.

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

Назначение

  • Управляет некоторыми аспектами обработки прерываний.

Ограничения на использование

  • Только привилегированный доступ (отказ при попытке непривилегированного доступа).
  • Доступ только к целому слову (непредсказуемый результат при доступе к полуслову или байту).

Конфигурации

  • Реализован всегда.

Атрибуты

  • Адрес E000ED0C, доступ на чтение и запись.
  • При наличии расширения безопасности для доступа безопасного кода к небезопасной версии регистра используется адрес E002ED0C. При обращении небезопасного кода или отладчика по этому адресу считывается нуль, а запись игнорируется.
  • Регистр имеет отдельные экземпляры для безопасного и небезопасного состояний для полей PRIGROUP и DIT.
ARM M-profile AIRCR

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

Разряды Доступ Обозначение Функция
31:16
RW/RO
VECTKEY
VECTKEYSTAT
Чтение: в ARMv6-M значение не определено, в остальных версиях – константа FA05.

Запись: в ARMv6-M значение может (но не обязано) игнорироваться, в остальных версиях оно является ключом, определяющим действительность записи в другие биты данного регистра: если оно не равно 05FA, запись игнорируется.

15
RO
ENDIANNESS
Указывает на принятый в данной реализации порядок следования байтов данных в памяти (за исключением SCS):
  • 0 — «младший–старший»;
  • 1 — «старший–младший».
14
RW/RO
PRIS
Управление приоритетами небезопасных прерываний:
  • 0 – небезопасные прерывания имеют обычные приоритеты;
  • 1 – приоритеты небезопасных прерываний уменьшаются.

Этот бит реализован лишь в процессорах с расширением безопасности и существует лишь в безопасной версии регистра. Возможность записи в него определяется реализацией.

Тёплый сброс обнуляет этот бит.

13
RW/RO
BFHFNMINS
Управление режимом обработки прерываний NMI, HardFault и BusFault:
  • 0 – прерывания обрабатываются в безопасном режиме;
  • 1 – прерывания могут обрабатываться в небезопасном режиме.

Этот бит реализован лишь в процессорах с расширением безопасности (при его отсутствии в ARMv8-M он равен 1) и существует в одном экземпляре. Возможность записи в данный бит при безопасном доступе определяется реализацией; небезопасные доступы могут лишь считывать его значение.

Если одновременно установлены биты BFHFNMINS и PRIS, последствия будут непредсказуемы.

Тёплый сброс обнуляет этот бит.

12:11
Зарезервировано.
10:8
RW
PRIGROUP
Это поле управляет группированием приоритетов прерываний.

В версиях ARMv8-M без основного расширения и ARMv6-M группирование не поддерживается, и эти разряды зарезервированы.

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

Тёплый сброс обнуляет это поле.

7:6
Зарезервировано.
5
RW/RO
IESB
Управление неявным барьером синхронизации ошибок (ESB):
  • 0 – неявный ESB запрещён;
  • 1 – неявный ESB имеет место при входе и выходе из прерывания и при отложенном сохранении контекста FPU. Кроме того, неточные прерывания BusFault будут вызывать повышение приоритета подобно точным отказам, но, поскольку реальное место возникновения такого отказа неизвестно, всё равно в качестве причины прерывания будет указываться неточный отказ.

Если бит BFHFNMINS сброшен, данный бит небезопасным доступом считывается как нуль.

Этот бит появился в ARMv8-M с поддержкой RAS, причём возможность его программного изменения определяется реализацией.

Тёплый сброс обнуляет этот бит (если это возможно).

4
RW
DIT
Управление независимым от данных временем выполнения команд (DIT):
  • 0 – архитектура не даёт каких-либо гарантий относительно времени выполнения команд;
  • 1 – архитектура гарантирует, что команды, время выполнения которых определено как не зависящее от данных, действительно являются таковыми.

Этот бит появился в ARMv8-M с поддержкой DIT. Возможность его программного изменения, а при невозможности изменения его состояние определяется реализацией.

Своя копия данного бита существует у каждого из состояний безопасности.

Тёплый сброс обнуляет этот бит (если это возможно).

3
RW
SYSRESETREQS
Разрешение сброса небезопасным кодом:
  • 0 – сброс посредством установки бита SYSRESETREQ может быть запрошен из обоих состояний безопасности;
  • 1 – сброс может быть запрошен только из безопасного состояния.

Этот бит присутствует лишь в процессорах с расширением безопасности и недоступен для небезопасного кода.

Тёплый сброс обнуляет этот бит.

2
RW/RO
SYSRESETREQ
Запрос выполнения тёплого сброса:
  • 0 — запроса на сброс нет;
  • 1 — выдача запроса на сброс.

В процессорах с расширением безопасности небезопасная запись в этот бит игнорируется, если установлен бит SYSRESETREQS.

Документация на ARMv6-M указывает данный бит как доступный только для записи, на ARMv8-M — как на доступный для чтения и записи; для ARMv7-M информация не приводится.

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

Тёплый сброс обнуляет этот бит.

1
WO
VECTCLRACTIVE
Сброс состояния активности прерываний:
  • 0 — сброс не выполняется.
  • 1 — выполнение сброса активных прерываний, включая обнуление регистра IPSR и перевод процессора в режим потока.

В процессорах с расширением безопасности состояние активности небезопасных прерываний при записи единицы в этот бит сбрасывается только в случае, если бит DHCSR.S_NSUIDE сброшен. Активность безопасных прерываний сбрасывается, если бит DHCSR.S_SUIDE сброшен, а бит DHCSR.S_SDE установлен.

Этот бит сбрасывается автоматически. Запись единицы, если процессор не находится в отладочном останове, в ARMv6-M и ARMv7-M приведёт к непредсказуемым результатам; в ARMv8-M она будет проигнорирована.

В ядре Cortex-M1 запись 1 в этот разряд приводит к сбросу не только активных, но и ожидающих запросов прерываний NMI и HardFault, хотя документация на архитектуру не упоминает о такой возможности. Кроме того, его установка вызывает сброс состояния блокировки процессора.

В версии ARMv8-M этот бит показан как доступный для чтения-записи, однако там же оговорено, что из него всегда считывается нуль, т. е. реально он доступен только на запись.

0
WO
VECTRESET
Запрос выполнения локального сброса:
  • 0 — запрос отсутствует;
  • 1 — выдача запроса.

Этот бит используется лишь в версии ARMv7-M; в других версиях он зарезервирован.

Этот бит сбрасывается автоматически. Если при записи 1 процессор не находится в отладочном останове, а также если этот бит устанавливается совместно с битом SYSRESETREQ, результаты будут непредсказуемы.

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

Адрес: E000ED10
Доступ: обычный
Наличие: всегда в ARMv7-M, только при поддержке управления питанием в командах WFI и WFE в ARMv6-M

ARM M-profile SCR

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

Разряды Обозначение Функция
31:5 Зарезервированы
4 SEVONPEND Определяет, является ли появление ожидающего запроса прерывания сигналом пробуждения для команды WFE:
  • 0 — не является
  • 1 — является
3 Зарезервирован
2 SLEEPDEEP Определяет, в насколько глубокий сон может погружаться процессор при переходе в ожидание:
  • 0 — обычный сон, быстрое пробуждение
  • 1 — глубокий сон, медленное пробуждение

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

1 SLEEPONEXIT Определяет, необходимо ли переходить в сон по завершении последнего активного обработчика прерывания:
  • 0 — нет, перехода в сон не будет
  • 1 — да, по завершении последнего обработчика процессор переходит в сон
0 Зарезервирован

Регистр управления и конфигурации CCR

Адрес: E000ED14
Доступ: обычный в ARMv7-M, только чтение в ARMv6-M
Наличие: всегда

ARM M-profile CCR

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

Разряды Обозначение Функция
31:19 Зарезервированы
18 BP Управляет работой предсказателя переходов:
  • 0 — предсказатель переходов выключен
  • 1 — предсказатель переходов включён

Если предсказатель переходов отсутствует, этот бит всегда будет равен нулю. Если он присутствует и не может быть выключен, этот бит всегда будет равен единице.

17 IC Управляет работой кэша команд:
  • 0 — кэш выключен
  • 1 — кэш включён

Если кэш команд отсутствует, этот бит всегда будет равен нулю.

16 DC Управляет работой кэша данных и/или общего кэша команд и данных:
  • 0 — кэш выключен
  • 1 — кэш включён

Если кэш данных и общий кэш отсутствуют, этот бит всегда будет равен нулю.

15:10 Зарезервированы
9 STKALIGN Определяет, необходимо ли при входе в обработчик прерывания принудительно выравнивать стек на границу двойного слова:
  • 0 — нет, не надо
  • 1 — да, надо

Если процессор имеет и использует FPU, стек всегда выравнивается на границу двойного слова независимо от состояния этого разряда.

Конкретная реализация версии ARMv7-M может сделать этот бит неизменяемым; ARM рекомендует в таких случаях использовать принудительное выравнивание на границу двойного слова.

Версия ARMv6-M всегда обеспечивает принудительное выравнивание, а этот бит доступен только для чтения, возвращая единицу.

8 BFHFNMIGN Определяет, необходимо ли вырабатывать прерывание при точном отказе во время доступа к данным в обработчике NMI или HardFault:
  • 0 — да, надо, что приведёт к возникновению блокировки
  • 1 — нет, отказ должен игнорироваться

В версии ARMv6-M этот бит зарезервирован.

7:5 Зарезервированы
4 DIV_0_TRP Управляет возникновением отказа при делении на 0:
  • 0 — деление на 0 не вызывает отказа
  • 1 — деление на 0 вызывает отказ

В версии ARMv6-M этот бит зарезервирован.

3 UNALIGN_TRP Управляет возникновением отказа при выполнении невыровненного доступа:
  • 0 — невыровненный доступ не вызывает отказа
  • 1 — невыровненный доступ вызывает отказ

В версии ARMv6-M этот бит всегда равен единице.

2 Зарезервирован
1 USERSETMPEND Управляет доступом непривилегированного кода к регистру STIR:
  • 0 — непривилегированный код не имеет доступа к регистру STIR
  • 1 — непривилегированный код имеет доступ к регистру STIR

В версии ARMv6-M этот бит зарезервирован.

0 NONBASETHRDENA Управляет возможностью входа процессора в режим потока при приоритете выполнения, отличном от базового:
  • 0 — попытка перейти в режим потока при приоритете выполнения выше базового вызовет отказ
  • 1 — переход в режим потока при приоритете выполнения выше базового возможен

В версии ARMv6-M этот бит зарезервирован.

Регистры приоритетов системных обработчиков SHPR1, SHPR2, SHPR3

Адрес: E000ED18, E000ED1C, E000ED20
Доступ: байтами, полусловами, словами в ARMv7-M, только словами в ARMv6-M
Наличие: SHPR1 отсутствует в ARMv6-M, остальные регистры присутствуют всегда

ARM M-profile SHPR1

Формат регистра приоритета системных обработчиков 1

ARM M-profile SHPR2

Формат регистра приоритета системных обработчиков 2

ARM M-profile SHPR3

Формат регистра приоритета системных обработчиков 3

Все три регистра имеют одинаковую структуру и разделены на четыре 8-разрядных поля, каждое из которых задаёт приоритет соответствующего обработчика прерывания. Регистр SHPR1 определяет приоритеты прерываний с номерами 4–7, SHPR2 — с номерами 8–11, SHPR3 — с номерами 12–15. Число реально используемых разрядов в каждом поле может быть меньше 8 и определяется реализацией.

В версии ARMv6-M регистр SHPR1 отсутствует, в регистре SHPR2 используются только биты 31:30 (приоритет SVCall), в регистре SHPR3 – биты 31:30 и 23:22 (приоритеты SysTick и PendSV соответственно).

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

Адрес: E000ED24
Доступ: обычный
В архитектуре ARMv7-M доступ к этому регистру возможен и для программы, и для отладчика. В архитектуре ARMv6-M возможность доступа к этому регистру со стороны программы определяется реализацией (например, она отсутствует в ядре Cortex-M1).
Наличие: всегда в ARMv7-M, только при поддержке отладки в ARMv6-M

ARM M-profile SHCSR

Формат регистра состояния и управления системными обработчиками

В версии AMRv6-M без поддержки отладки этот регистр отсутствует, при наличии такой поддержки он имеется, однако включает единственный бит — SVCALLPENDED (разряд 15); все другие биты этого регистра в этой конфигурации являются зарезервированными. В ядре Cortex-M1 одной поддержки отладки для включения данного регистра мало, необходима также поддержка расширений для ОС. Формально это может считаться ошибкой, однако фактически разницы нет, поскольку команда SVC включается только при наличии поддержки ОС.

Разряды Обозначение Функция
31:19 Зарезервированы
18 USGFAULTENA 1 — прерывание UsageFault разрешено
17 BUSFAULTENA 1 — прерывание BusFault разрешено
16 MEMFAULTENA 1 — прерывание MemFault разрешено
15 SVCALLPENDED 1 — прерывание SVCall ожидает начала обработки
14 BUSFAULTPENDED 1 — прерывание BusFault ожидает начала обработки
13 MEMFAULTPENDED 1 — прерывание MemFault ожидает начала обработки
12 USGFAULTPENDED 1 — прерывание UsageFault ожидает начала обработки
11 SYSTICKACT 1 — прерывание SysTick активно
10 PENDSVACT 1 — прерывание PendSV активно
9 Зарезервирован
8 MONITORACT 1 — прерывание Debug Monitor активно
7 SVCALLACT 1 — прерывание SVCall активно
6:4 Зарезервированы
3 USGFAULTACT 1 — прерывание UsageFault активно
2 Зарезервирован
1 BUSFAULTACT 1 — прерывание BusFault активно
0 MEMFAULTACT 1 — прерывание MemFault активно

Разряды, указывающие нахождение прерывания в состоянии ожидания, устанавливаются аппаратно при появлении соответствующего запроса (или при его программной установке) и сбрасываются при вызове обработчика (или при программном сбросе запроса). Разряды, указывающие нахождение прерывания в активном состоянии, устанавливаются при вызове обработчика и остаются установленными до тех пор, пока не произойдёт возврат из соответствующего обработчика (или не будут сброшены признаки всех активных прерываний). Они остаются установленными, если обработчик оказывается прерванным обработчиком более приоритетного запроса.

Программа может не только считывать, но и записывать любые разряды этого регистра, изменяя с помощью этого текущее состояние обработки прерываний. Это может привести к нарушению принципов обработки прерываний, предусмотренных архитектурой. Возможность программной записи предусмотрена в отладочных целях.

Регистр состояния отказов с настраиваемыми приоритетами CFSR

Адрес: E000ED28
Доступ: байтами, полусловами и словами; запись единицы сбрасывает соответствующий бит
Наличие: только ARMv7-M

ARM M-profile CFSR

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

Разряды Обозначение Функция
31:16 UsageFault Индикаторы активных причин возникновения прерывания UsageFault
15:8 BusFault Индикаторы активных причин возникновения прерывания BusFault
7:0 MemManage Индикаторы активных причин возникновения прерывания MemManage

Технически регистр CFSR состоит из трёх независимых регистров: MMFSR, BFSR и UFSR.

Регистр состояния прерывания MemManage MMFSR

Адрес: E000ED28
Доступ: байтовый; запись единицы сбрасывает соответствующий бит
Наличие: только ARMv7-M

ARM M-profile MMFSR

Формат регистра состояния прерывания MemManage

Разряды Обозначение Функция
7 MMFARVALID 1 — содержимое регистра MMAR корректно
6 Зарезервирован
5 MLSPERR 1 — при отложенном сохранении состояния FPU возникло прерывание MemManage
4 MSTKERR 1 — при входе в обработчик какого-либо прерывания возникло прерывание MemManage
3 MUNSTKERR 1 — при выходе из обработчика какого-либо прерывания возникло прерывание MemManage
2 Зарезервирован
1 DACCVIOL 1 — обнаружено нарушение прав доступа к данным; адрес данных, к которым происходило обращение, находится в MMAR
0 IACCVIOL 1 — попытка недопустимой выборки и исполнения команды. Отказ возникает лишь в случае, если производится попытка реально выполнить команду

Регистр состояния прерывания BusFault BFSR

Адрес: E000ED29
Доступ: байтовый; запись единицы сбрасывает соответствующий бит
Наличие: только ARMv7-M

ARM M-profile BFSR

Формат регистра состояния прерывания BusFault

Разряды Обозначение Функция
7 BFARVALID 1 — содержимое регистра BFAR корректно
6 Зарезервирован
5 LSPERR 1 — BusFault возник при отложенном сохранении состояния FPU
4 STKERR 1 — BusFault возник при попытке входа в обработчик какого-либо прерывания
3 UNSTKERR 1 — BusFault возник при попытке выхода из обработчика какого-либо прерывания
2 IMPRECISERR 1 — возник неточный отказ при обращении к данным
1 PRECISERR 1 — произошёл точный отказ при обращении к данным; адрес отказа занесён в BFAR
0 IBUSERR 1 — обнаружен отказ при попытке выборки команды. Прерывание возникает лишь в случае, если предпринимается попытка реально выполнить эту команду

Регистр состояния прерывания UsageFault UFSR

Адрес: E000ED2A
Доступ: байтами и полусловами; запись единицы сбрасывает соответствующий бит
Наличие: только ARMv7-M

ARM M-profile UFSR

Формат регистра состояния прерывания UsageFault

Разряды Обозначение Функция
15:10 Зарезервированы
9 DIVBYZERO 1 — попытка деления на 0
8 UNALIGNED 1 — попытка невыровненного доступа
7:4 Зарезервированы
3 NOCP 1 — попытка доступа к отсутствующему или выключенному сопроцессору
2 INVPC 1 — ошибочное значение EXC_RETURN
1 INVSTATE 1 — попытка выполнения команды при неверном значении бита T или поля IT регистра EPSR
0 UNDEFINSTR 1 — попытка выполнить неизвестную или привилегированную команду

Регистр состояния прерывания HardFault HFSR

Адрес: E000ED2C
Доступ: запись 1 очищает соответствующий бит
Наличие: только ARMv7-M

ARM M-profile HFSR

Формат регистра состояния серьёзных ошибок

Разряды Обозначение Функция
31 DEBUGEVT 1 — произошло отладочное событие, обновлено содержимое регистра DFSR
30 FORCED 1 — произошло повышение приоритета синхронного прерывания до HardFault
29:2 Зарезервированы
1 VECTTBL 1 — ошибка при попытке считать содержимое таблицы векторов прерываний
0 Зарезервирован

Регистр адреса отказа памяти MMFAR

Адрес: E000ED34
Доступ: только чтение?
Наличие: только ARMv7-M

ARM M-profile MMFAR

Формат регистра адреса ошибки MemManage

Разряды Обозначение Функция
31:0 ADDRESS Адрес, при попытке обращения по которому возникло прерывание MemManage, вызванное обнаруженным MPU нарушением защиты памяти. Если выполнялся невыровненный доступ, в регистре MMFAR будет находиться адрес, реально вызвавший нарушение защиты; он может не совпадать с адресом, использованным в команде

В документации регистр MMFAR описан как имеющий доступ на чтение и запись, однако логично предположить, что он доступен только на чтение, поскольку он хранит адрес, обращение к которому вызвало прерывание, что устанавливается аппаратно.

Регистр адреса отказа шины BFAR

Адрес: E000ED38
Доступ: только чтение?
Наличие: только ARMv7-M

ARM M-profile BFAR

Формат регистра адреса отказа шины

Разряды Обозначение Функция
31:0 ADDRESS Адрес данных, при обращении по которому возник точный отказ BusFault. Если отказ произошёл при невыровненном доступе, в BFAR будет находиться адрес, использованный командой, вызвавшей отказ; он не обязательно совпадает с реальным адресом обращения

В документации регистр BFAR описан как имеющий доступ на чтение и запись, однако логично предположить, что он доступен только на чтение, поскольку он хранит адрес, обращение к которому вызвало отказ, что устанавливается аппаратно.

Вспомогательный регистр состояния отказов AFSR

Адрес: E000ED3C
Доступ: определяется реализацией
Наличие: определяется реализацией; в ARMv6-M всегда отсутствует

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

Регистр управления доступом к сопроцессорам CPACR

Адрес: E000ED88
Доступ: обычный
Наличие: только ARMv7-M

ARM M-profile CPACR

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

Каждое из реализованных двухбитовых полей этого регистра определяет возможность использования сопроцессора с соответствующим номером. Возможные значения поля управления доступом:

  • 00 — доступ запрещён;
  • 01 — разрешён доступ только привилегированному коду;
  • 10 — зарезервировано;
  • 11 — разрешён полный доступ.

Сопроцессоры CP0–CP7 определяются реализацией. Сопроцессоры CP8–CP15 зарезервированы компанией ARM; в архитектуре ARMv6-M они всегда отсутствуют, а в архитектуре ARMv7-M может иметься FPU, функционал которого реализуют сопроцессоры CP10 и CP11. Когда он реализован и используется, поля управления доступом к CP10 и CP11 должны содержать одинаковые значения.

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

Регистр состояния прерывания SecureFault SFSR

Регистр адреса отказа безопасности SFAR

Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.