ФЭНДОМ


Регистры управления FPU доступны только для привилегированного кода и только как выровненные слова.

Адрес Обозначение Доступ Значение после сброса Описание
E000EF30 FPSID
?
?
Регистр системной идентификации FPU
E000EF34 FPCCR
RW
см. прим.
Регистр управления контекстом FPU
E000EF38 FPCAR
RW
не определено
Регистр адреса контекста FPU
E000EF3C FPDSCR
RW
00000000
Регистр управления состоянием FPU по умолчанию
E000EF40 MVFR0
RO
10110021
Регистр 0 возможностей FPU
E000EF44 MVFR1
RO
11000011
Регистр 1 возможностей FPU
E000EF48 MVFR2
RO
00000000
или
00000040
Регистр 2 возможностей FPU

Примечания. 1. Формально регистра с адресом E000EF30 не существует. Тем не менее, ядро Cortex-M3 реализует его под именем FPSID (хотя в комментариях он и помечен как зарезервированный).

2. При сбросе биты 31 (ASPEN) и 30 (LSPEN) регистра FPCCR устанавливаются, бит 0 (LSPACT) сбрасывается, значение остальных битов не определено.

3. Регистр MVFR2 считывается как 00000000, если вещественная арифметика двойной точности не реализована, и как 00000040, если она поддерживается. Формально в ядре Cortex-M3 он не реализован, хотя остальные регистры FPU имеются, однако фактически свою функцию выполняет, поскольку в такой ситуации на шину будет считываться нулевое значение.

Описание регистров управления FPU

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

Назначение

  • Содержит информацию, управляющую работой FPU.

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

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

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

  • Присутствует только при наличии FPU или MVE.

Атрибуты

  • Адрес E000EF34, доступ на чтение и запись.
  • При наличии расширения безопасности для доступа безопасного кода к небезопасной версии регистра используется адрес E002EF34. При обращении небезопасного кода или отладчика по этому адресу считывается нуль, а запись игнорируется.
  • Регистр имеет отдельные экземпляры для безопасного и небезопасного состояний для битов ASPEN, UFRDY, SPLIMVIOL, MMRDY, THREAD, USER, LSPACT. Биты LSPEN, LSPENS, CLRONRET, CLRONRETS, TS, MONRDY, SFRDY, BFRDY, HFRDY, S имеются в одном экземпляре.
  • Начиная с версии ARMv8.1-M, в зависимости от реализации запись в этот регистр со стороны отладчика может выполняться или игнорироваться, если процессор не находится в состоянии останова.
  • Документация на ARMv7-M запрещает программе изменять биты ASPEN и LSPEN, если доступ к FPU разрешён соответствующими битами регистра CPACR либо если установлен бит CONTROL.FPCA. Документация на ARMv8-M подобного запрета не содержит.
ARM M-profile FPCCR
Разряды Доступ Обозначение Функция
31
RW
ASPEN Разрешение автоматического сохранения и восстановления контекста FPU при прерываниях:
  • 0 — автоматическое сохранение и восстановление запрещено; выполнение команд FPU не влияет на бит CONTROL.FPCA;
  • 1 — автоматическое сохранение и восстановление разрешено; успешное выполнение любой команды FPU устанавливает бит CONTROL.FPCA.

У каждого режима безопасности имеется своя версия этого бита.

С появлением версии ARMv8.1-M возможность обнуления этого бита объявлена устаревшей.

После сброса этот бит равен единице.

30
S:RW, NS:RW/RO
LSPEN Разрешение отложенного сохранения контекста FPU:
  • 0 — отложенное сохранение запрещено;
  • 1 — отложенное сохранение разрешено.

Этот бит является общим для обоих режимов безопасности. Он не может быть изменён небезопасным кодом, если бит LSPENS установлен.

После сброса этот бит равен единице.

29
S:RW, NS:RES0
LSPENS Управление возможностью изменения бита LSPEN в небезопасном состоянии:
  • 0 – бит LSPEN может быть прочитан и записан в обоих состояниях безопасности;
  • 1 – бит LSPEN может быть прочитан в обоих состояниях безопасности, а записан – только в безопасном состоянии.

Этот бит доступен только коду безопасного режима.

Этот бит появился в ARMv8-M. При отсутствии расширения безопасности он всегда равен нулю.

После сброса этот бит равен нулю.

28
S:RW, NS:RW/RO
CLRONRET Управление очисткой сохранённых регистров FPU вызывающей программы (S0–S15, FPSCR и VPR) при возврате из обработчика прерывания, в том числе при сцеплении прерываний:
  • 0 – обнуление не выполняется;
  • 1 – обнуление выполняется, если при возврате из прерывания бит CONTROL.FPCA установлен, а бит FPCCR_S.LSPACT сброшен.

Этот бит является общим для обоих режимов безопасности. Он может быть изменён из небезопасного режима только при сброшенном бите CLRONRETS.

Этот бит появился в ARMv8-M.

После сброса этот бит равен нулю.

27
S:RW, NS:RES0
CLRONRETS Управление возможностью изменения бита CLRONRET в небезопасном состоянии:
  • 0 – бит CLRONRET может быть прочитан и записан в обоих состояниях безопасности;
  • 1 – бит CLRONRET может быть прочитан в обоих состояниях безопасности, а записан – только в безопасном состоянии.

Этот бит доступен только коду безопасного режима.

Этот бит появился в ARMv8-M. При отсутствии расширения безопасности он всегда равен нулю.

После сброса этот бит равен нулю.

26
S:RW, NS:RES0
TS Указывает, считаются ли регистры FPU относящимися к безопасному состоянию:
  • 0 – регистры FPU не считаются относящимися к безопасному состоянию, даже если процессор находится в безопасном состоянии; по этой причине при входе в обработчик прерывания регистры FPU S16–S31 прерванного кода не сохраняются;
  • 1 – регистры FPU считаются относящимися к безопасному состоянию, если в момент начала входа в обработчик прерывания процессор находился в безопасном состоянии; в этом случае производится немедленное или отложенное сохранение регистров FPU S16–S31.

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

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

Этот бит появился в ARMv8-M. При отсутствии расширения безопасности он всегда равен нулю.

После сброса этот бит равен нулю.

25:11
Зарезервировано
10
RO
UFRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание UsageFault в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Каждый режим безопасности имеет свою версию этого бита.

Этот бит появился в ARMv8-M.

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

9
RO
SPLIMVIOL Изменяется в момент входа в обработчик прерывания и служит индикатором нарушения границы стека областью отложенного сохранения контекста FPU:
  • 0 — нарушения нет;
  • 1 — граница стека нарушена, поэтому отложенное сохранение выполняться не будет. Однако, если прерывание, при входе в обработчик которого была выделена данная область сохранения, произошло в безопасном режиме и бит TS установлен, содержимое регистров FPU будет обнулено, что приведёт к потере его контекста.

Каждый режим безопасности имеет свою версию этого бита.

Этот бит появился в ARMv8-M.

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

8
S:RO, NS:RO/RES0
MONRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание DebugMonitor в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Этот бит является общим для обоих состояний безопасности. Если бит DEMCR.SDME установлен, небезопасный код при чтении данного бита получает 0.

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

7
S:RO, NS:RES0
SFRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание SecureFault в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Этот бит доступен только коду безопасного режима.

Этот бит появился в ARMv8-M. При отсутствии расширения безопасности он всегда равен нулю.

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

6
S:RO, NS:RO/RES0
BFRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание BusFault в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Этот бит является общим для обоих состояний безопасности. Если бит AIRCR.BFHFNMINS сброшен, небезопасный код при чтении данного бита получает 0.

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

5
RO
MMRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание MemManage в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Каждый режим безопасности имеет свою версию этого бита.

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

4
RO
HFRDY Изменяется в момент входа в обработчик прерывания и показывает, была ли программа, выполнявшаяся в момент выделения стекового кадра под контекст FPU, способна установить прерывание HardFault в состояние ожидания:
  • 0 — не способна;
  • 1 — способна.

Этот бит является общим для обоих состояний безопасности. Если бит AIRCR.BFHFNMINS сброшен, небезопасный код при чтении данного бита получает 0.

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

3
RO
THREAD Изменяется в момент входа в обработчик прерывания и показывает режим процессора в момент выделения кадра стека под контекст FPU:
  • 0 — режим обработчика;
  • 1 — режим потока.

Каждый режим безопасности имеет свою версию этого бита.

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

2
S:RO, NS:RES0
S Изменяется при выделении области под отложенное сохранение контекста FPU (одновременно с установкой бита LSPACT) или при выполнении команды MFPU или MVE. Показывает, к какому состоянию безопасности относится контекст FPU:
  • 0 — к небезопасному;
  • 1 — к безопасному.

Этот бит доступен только коду безопасного режима.

Этот бит появился в ARMv8-M. При отсутствии расширения безопасности он всегда равен нулю.

После сброса этот бит установлен.

1
RO
USER Изменяется в момент входа в обработчик прерывания и показывает уровень привилегий программы, выполнявшейся в момент выделения кадра стека под контекст FPU:
  • 0 — привилегированный код;
  • 1 — непривилегированный код.

Каждый режим безопасности имеет свою версию этого бита.

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

0
RO
LSPACT Устанавливается в момент входа в обработчик прерывания и показывает, активно ли отложенное сохранение контекста FPU:
  • 0 — не активно;
  • 1 — активно.

Когда этот бит установлен, при попытке выполнить любую команду FPU процессор сначала выполняет отложенное сохранение контекста FPU в ранее выделенной области сохранения в стеке (её адрес находится в регистре FPCAR, куда он заносится одновременно с установкой данного бита), затем сбросит этот бит и лишь затем выполнит заданную команду.

Каждый режим безопасности имеет свою версию этого бита.

После сброса этот бит равен нулю.

Для битов UFRDY, MONRDY, SFRDY, BFRDY, MMRDY и HFRDY способность программы установить соответствующее прерывание в состояние ожидания означает, что данное прерывание разрешено, а приоритет выполнения программы в момент начала входа в обработчик прерывания был достаточно низок, чтобы при возникновении данное прерывание было установлено в состояние ожидания (с последующим переходом в активное состояние при отсутствии более приоритетных ожидающих прерываний). Установка этих битов не означает, что соответствующее прерывание находится в состоянии ожидания, а лишь показывает принципиальную возможность этого. Данные разряды используются при обработке прерываний, которые могут возникнуть при выполнении отложенного сохранения контекста FPU.

Регистр адреса контекста FPCAR

Адрес: E000EF38
Доступ: обычный
Наличие: только при наличии FPU

ARM M-profile FPCAR
Разряды Доступ Обозначение Функция
31:3
RO
ADDRESS Адрес выделенной в стеке области сохранения контекста FPU. Этот адрес указывает на слово памяти, выделенное под регистр S0, и заносится в FPCAR одновременно с установкой бита FPCCR.LSPACT при входе в обработчик прерывания
2:0
Зарезервировано

Регистр управления состоянием FPU по умолчанию FPDSCR

Адрес: E000EF3C
Доступ: обычный
Наличие: только при наличии FPU

ARM M-profile FPDSCR
Разряды Доступ Обозначение Функция
31:27
Зарезервировано
26
RW
AHP Значение по умолчанию для бита FPSCR.AHP
25
RW
DN Значение по умолчанию для бита FPSCR.DN
24
RW
FZ Значение по умолчанию для бита FPSCR.FZ
23:22
RW
RMode Значение по умолчанию для бита FPSCR.RMode
31:27
Зарезервировано
Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.