OSDev Wiki
Advertisement

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

В целом поддержка отладки не является обязательной; кроме того, возможный уровень отладки зависит от версии архитектуры (так, ARMv6-M не предусматривает возможности трассировки выполнения программы).

Регистры, управляющие отладочными средствами и отражающие их состояние, распределены между следующими устройствами на PPB:

Все отладочные компоненты стандартизированы спецификацией ARM CoreSight. Каждый из них занимает один или несколько смежных 4-килобайтовых блоков адресного пространства. Последние адреса последнего блока адресного пространства компонента заняты стандартными регистрами Coresight, к которым относятся, в частности, регистры идентификации периферийного устройства и компонента, позволяющие однозначно определить данный компонент.

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

Отладчик обращается к отладочным регистрам через порт отладочного доступа (DAP, debug access port). ARM делит DAP на две части: отладочный порт (DP), обеспечивающий подключение внешнего отладчика, и порт доступа (AP), позволяющий получить доступ к шине, к которой подключены отладочные компоненты. Отладчик, подключённый к DP, через него обращается к AP, а последний обеспечивает доступ к отладочным компонентам. Среди аппаратных ресурсов AP, доступных отладчику, имеется регистр, содержащий адрес таблицы ПЗУ верхнего уровня, которая является исходной точкой для определения топологии отладочных средств.

Имеет ли доступ к большей части отладочных регистров только отладчик или же они доступны и процессору, определяется реализацией. Как правило, в процессорах M-профиля для их упрощения и удешевления и DAP, и процессор для обращения к регистрам используют физически одну и ту же шину, и поэтому процессор может обращаться к отладочным регистрам наравне с отладчиком.

Доступ к отладочным регистрам возможен только в привилегированном состоянии и должен производиться выровненными словами.

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

Регистры SCB и DCB[]

Регистр состояния отладочных отказов DFSR[]

Назначение

  • Показывает наступившие отладочные события.

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

  • Только привилегированный доступ (отказ при попытке непривилегированного доступа).
  • Доступ только к целому слову (непредсказуемый результат при доступе к полуслову или байту).
  • В версии ARMv8-M без основного расширения и в ARMv6-M доступность для программы определяется реализацией; в остальных вариантах доступ для программы имеется всегда.
  • В версии ARMv8.1-M DAP может использовать непривилегированные доступы к этому регистру, если установлен бит DAUTHCTRL.UIDAPEN для любого из режимов безопасности.

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

  • В ARMv8-M без основного расширения и в ARMv6-M имеется только при поддержке отладки (при её отсутствии считывается и записывается как нуль); в ARMv8-M с основным расширением и ARMv7-M имеется всегда.

Атрибуты

  • Адрес E000ED30, доступ на чтение и запись (запись единицы сбрасывает соответствующий разряд).
  • Небезопасная версия доступна безопасному коду по адресу E002ED30.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DFSR register
Разряды Доступ Обозначение Функция
31:6
Зарезервировано.
5
R/WC
PMU
Этот бит установлен, если наступило событие PMU, и сброшен в противном случае.

Реализован только начиная с ARMv8.1-M при наличии PMU.

Холодным сбросом обнуляется.

4
R/WC
EXTERNAL
Этот бит установлен, если поступил внешний запрос на отладку.

Холодным сбросом обнуляется.

3
R/WC
VCATCH
Этот бит установлен, если произошло событие совпадения вектора (vector catch).

Равен нулю, если отладочные остановы не поддерживаются.

Холодным сбросом обнуляется.

2
R/WC
DWTTRAP
Этот бит установлен, если произошло событие слежения за данными (watchpoint).

Равен нулю, если DWT отсутствует.

Холодным сбросом обнуляется.

1
R/WC
BKPT
Этот бит установлен, если встречена точка останова (breakpoint).

Холодным сбросом обнуляется.

0
R/WC
HALTED
Этот бит установлен, если произошло событие отладочного останова или отладочного шага. Его значение непредсказуемо, если регистр считывается командой, выполняемой в пошаговом режиме.

Холодным сбросом обнуляется.

Регистр управления аутентификацией отладки DAUTHCTRL[]

Назначение

  • Обеспечивает возможность программного переопределения работы интерфейса аутентификации, определяемого реализацией.

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

  • Только привилегированный доступ (отказ при непривилегированном доступе).
  • Для версии ARMv8.1-M доступы возможны байтами, полусловами и целым словом.
  • Отладчик доступа не имеет (регистр считывается как 0, запись игнорируется).

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

  • Появился в ARMv8-M.
  • Имеется только при поддержке отладки с остановом или основного расширения, в противном случае считывается как 0, а запись игнорируется.

Атрибуты

  • Адрес E000EE04.
  • При наличии расширения безопасности для доступа безопасного кода к небезопасной версии регистра используется адрес E002EE04, который считывается и записывается как нуль для небезопасного кода и для отладчика.
  • Биты UIDEN и UIDAPEN реализованы отдельно для безопасного и небезопасного состояний, остальные биты реализованы только для безопасного состояния.
ARM M-profile DAUTHCTRL register
Разряды Доступ Обозначение Функция
31:11
Зарезервировано.
10
RW
UIDEN
Разрешение отладки непривилегированного кода:
  • 0 – режим отладки функционирует обычным образом;
  • 1 – разрешена отладка непривилегированного кода при запрещённой отладке привилегированного кода.

В версиях до ARMv8.1-M и при отсутствии UDE заверзервирован и равен нулю.

Этот бит имеет безопасную и небезопасную версии. Установка бита безопасного режима разрешает отладку непривилегированного кода как в безопасном, так и в небезопасном режиме, бита небезопасного режима – только в небезопасном режиме.

При тёплом сбросе обнуляется.

9
RW
UIDAPEN
Разрешение непривилегированных доступов со стороны DAP:
  • 0 – непривилегированные доступы DAP запрещены;
  • 1 – непривилегированные доступы DAP разрешены.

В версиях до ARMv8.1-M и при отсутствии UDE заверзервирован и равен нулю.

Этот бит имеет безопасную и небезопасную версии. Непривилегированные доступы DAP разрешаются, если установлен хотя бы один из этих двух битов.

При холодном сбросе обнуляется.

8
RW
FSDMA
Принудительное разрешение безопасного прерывания DebugMonitor даже если отладочный останов в безопасном режиме запрещён:
  • 0 – возможность безопасного прерывания DebugMonitor определяется другими средствами;
  • 1 – отладочное прерывание DebugMonitor разрешено.

В версиях до ARMv8.1-M заверзервирован и равен нулю.

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

При тёплом сбросе обнуляется.

7:4
Зарезервировано.
3
RW
INTSPNIDEN
Разрешение неинвазивной отладки безопасного режима:
  • 0 – отладка запрещена;
  • 1 – отладка разрешена.

Переопределяет разрешение, поступающее от внешнего интерфейса аутентификцаии. Игнорируется, если бит SPNIDENSEL сброшен.

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

При холодном сбросе обнуляется.

2
RW
SPNIDENSEL
Выбор способа разрешения неинвазивной отладки безопасного режима:
  • 0 – возможность отладки определяется внешним интерфейсом аутентификации, определяемым реализацией. При использовании аутентификационного интерфейса CoreSight эта возможность управляется сигналом SPNIDEN;
  • 1 – возможность отладки управляется программно битом INTSPNIDEN.

Состояние этого бита и внешнего интерфейса игнорируется при установленном бите DHCSR_S.S_SDE.

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

При холодном сбросе обнуляется.

1
RW
INTSPIDEN
Разрешение инвазивной отладки безопасного режима:
  • 0 – отладка запрещена;
  • 1 – отладка разрешена.

Переопределяет разрешение, поступающее от внешнего интерфейса аутентификцаии. Игнорируется, если бит SPIDENSEL сброшен.

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

При холодном сбросе обнуляется.

0
RW
SPIDENSEL
Выбор способа разрешения инвазивной отладки безопасного режима:
  • 0 – возможность отладки определяется внешним интерфейсом аутентификации, определяемым реализацией. При использовании аутентификационного интерфейса CoreSight эта возможность управляется сигналом SPIDEN;
  • 1 – возможность отладки управляется программно битом INTSPIDEN.

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

При холодном сбросе обнуляется.

Регистр состояния и управления отладочными остановами DHCSR[]

Назначение

  • Управляет отладкой.

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

  • Только привилегированный доступ (отказ при непривилегированном доступе).
  • Доступ только к слову (непредсказуемый результат при доступе к полуслову или байту).
  • Начиная с ARMv8.1-M, при установке бита DAUTHCTRL.UIDAPEN для любого режима безопасности возможны непривилегированные доступы от DAP.
  • Доступность для программы определяется реализацией (при отсутствии доступа считывается и записывается нуль).

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

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

Атрибуты

  • Адрес E000EDF0.
  • Небезопасная версия доступна безопасному коду по адресу E002EDF0.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DHCSR register
Разряды Доступ Обозначение Функция
31:16
WO
DBGKEY
Ключ доступа к регистру на запись. Должен быть равен A05F, в противном случае запись в регистр игнорируется.
26
RC
S_RESTART_ST
Этот бит имеется только в ARMv8-M.

Будучи установленным, этот бит показывает, что с момента предыдущего чтения регистра процессор выходил из состояния останова (либо по причине сброса бита C_HALT, либо из-за поступления внешнего запроса на пуск).

Если запись нуля в C_HALT производится в момент, когда процессор не находится в состоянии останова, нельзя предсказать, будет ли установлен этот бит. Нельзя предсказать также его значение, если отладка запрещена (бит C_DEBUGEN сброшен).

Если одновременно приходят запросы на сброс бита C_HALT и на останов процессора, процессор формально выходит из состояния останова и тут же останавливается вновь, что приводит к установке бита S_RESTART_ST.

При чтении этот бит сбрасывается.

25
RC
S_RESET_ST
Будучи установленным, этот бит показывает, что с момента последнего чтения регистра DHCSR выполнялся сброс процессора.

При чтении этот бит сбрасывается.

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

24
RC
S_RETIRE_ST
Будучи установленным, этот бит показывает, что с момента последнего чтения регистра DHCSR процессор выполнил хотя бы одну команду.

При чтении этот бит сбрасывается.

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

23
RO
S_FPD
Этот бит появился в ARMv8.1-M и показывает, доступны ли отладчику (через регистр DCRSR) в текущем состоянии процессора регистры данных FPU, FPSCR и VPR:
  • 0 – регистры доступны;
  • 1 – регистры считываются как 0, а запись игнорируется.
22
RO
S_SUIDE
Этот бит имеется только в ARMv8.1-M с расширением безопасности и UDE.

Показывает, разрешён ли отладочный останов непривилегированного безопасного кода:

  • 0 – отладочный останов либо запрещён вообще, либо разрешён не только для непривилегированного кода;
  • 1 – отладочный останов безопасного непривилегированного кода разрешён, безопасного привилегированного – запрещён.

Пока процессор находится в состоянии отладочного останова, этот бит не изменяется.

21
RO
S_NSUIDE
Этот бит имеется только в ARMv8.1-M с UDE.

Показывает, разрешён ли отладочный останов непривилегированного небезопасного кода:

  • 0 – отладочный останов либо запрещён вообще, либо разрешён не только для непривилегированного кода;
  • 1 – отладочный останов небезопасного непривилегированного кода разрешён, небезопасного привилегированного – запрещён.

Пока процессор находится в состоянии отладочного останова, этот бит не изменяется.

20
RO
S_SDE
Этот бит имеется только в ARMv8-M с расширением безопасности и показывает, разрешена ли потенциально отладка безопасного кода:
  • 0 – отладка безопасного кода запрещена;
  • 1 – отладка безопасного кода разрешена.

Этот бит не изменяет своё состояние, пока процессор находится в состоянии отладки.

19
RO
S_LOCKUP
Единица в этом разряде показывает, что процессор перешёл в состояние блокировки. Когда отладчик выполняет останов процессора, этот бит сбрасывается.
18
RO
S_SLEEP
Единица в этом разряде показывает, что процессор находится в состоянии сна.

Для пробуждения процессора отладчик должен либо дождаться наступления прерывания или пробуждающего события, либо установить бит C_HALT.

17
RO
S_HALT
Единица в этом разряде показывает, что процессор находится в остановленном (отладочном) состоянии.
16
RO
S_REGRDY
Этот бит используется для индикации завершения операции чтения или записи регистров процессора через регистр DCRDR: его установленное состояние показывает, что обмен с DCRDR завершён либо не запрашивался.

Если процессор не находится в остановленном состоянии, значение данного бита непредсказуемо. Согласно документации на ARMv8-M, оно непредсказуемо и после тёплого сброса.

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

15:7
Зарезервировано.
6
RW
C_PMOV
Этот бит имеется лишь в ARMv8.1-M с PMU и управляет остановом процессора при переполнении счётчика PMU:
  • 0 – никаких действий не выполняется;
  • 1 – если бит C_DEBUGEN установлен, то при генерации счётчиком PMU прерывания по переполнению производится останов процессора с установкой битов C_HALT и DFSR.PMU.

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

5
RW
C_SNAPSTALL
Этот бит может присутствовать только в ARMv8-M с основным расширением, но является необязательным: конкретная реализация может всегда удерживать его сброшенным.

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

Поведение процессора непредсказуемо, если одновременно с установкой бита C_SNAPSTALL отладчик не устанавливает биты C_DEBUGEN и C_HALT. Если все три разряда устанавливаются одновременно, а процессор ещё не находится в состоянии отладки, он перейдёт в него сразу после завершения выполнения (в том числе путём принудительного прекращения) текущей команды.

Если в процессоре реализовано расширение безопасности и либо бит S_SDE сброшен, либо бит S_SUIDE установлен, запись в этот разряд игнорируется.

Если отладочный останов запрещён (в том числе если сброшен бит C_DEBUGEN) или если установлен бит S_NSUIDE, состояние этого разряда игнорируется (процессор считает, что он сброшен).

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

Холодный сброс очищает этот бит.

4
Зарезервировано.
3
RW
C_MASKINTS
Этот бит устанавливается для запрета входа в обработчики прерываний внешних, PendSV и SysTick.

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

  • перед записью в регистр уже установлены оба бита S_HALT и C_HALT, а данная запись одновременно с изменением бита C_MASKINTS записывает единицу в C_HALT;
  • отладочный останов запрещён и производится запись нуля в бит C_MASKINTS.

Таким образом, нельзя одной операцией записи обнулять бит C_HALT и изменять значение бита C_MASKINTS.

Если имеется расширение безопасности и либо сброшен бит S_SDE, либо установлен бит S_SUIDE, состояние C_MASKINTS не влияет на безопасные прерывания.

Если отладочный останов запрещён или если бит S_NSUIDE установлен, состояние этого бита процессором игнорируется.

Если бит C_DEBUGEN сброшен, состояние бита C_MASKINTS, полученное при чтении регистра, не определено.

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

2
RW
C_STEP
Запись единицы в этот разряд разрешает выполнение шага программы (одной команды).

Изменение состояния этого бита приводит к непредсказуемым результатам, если не соблюдается любое из следующих условий:

  • перед записью, изменяющей состояние бита C_STEP, оба бита S_HALT и C_HALT уже установлены;
  • отладочный останов запрещён или C_STEP уже сброшен и производится запись нуля в C_STEP.

Состояние этого бита игнорируется, если отладочный останов запрещён либо если при наличии расширения безопасности процессор при сброшенном бите S_SDE находится в безопасном состоянии.

Если бит C_DEBUGEN сброшен, состояние бита C_STEP, полученное при чтении регистра, не определено.

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

1
RW
C_HALT
Запись нуля в этот разряд выводит процессор из состояния отладочного останова, запись единицы вызывает вход в останов.

Процессор сам устанавливает этот бит, если наступает отладочное событие, требующее перехода в останов.

Состояние этого бита игнорируется, если:

  • отладка любого кода запрещена;
  • в процессоре с расширением безопасности бит S_SDE сброшен и процессор находится в безопасном состоянии.

Если бит C_DEBUGEN сброшен, состояние бита C_HALT, полученное при чтении регистра, не определено.

После тёплого сброса этот бит сброшен.

0
RW
C_DEBUGEN
Управление возможностью отладочного останова:
  • 0 – отладочный останов запрещён;
  • 1 – отладочный останов разрешён.

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

Когда этот бит сброшен, процессор игнорирует состояние битов C_MASKINTS, C_STEP и C_HALT, а считываемое значение этих трёх битов и бита S_RESTART_ST непредсказуемо.

Запись в этот бит может выполняться только отладчиком.

Холодный сброс обнуляет этот разряд.

Регистр программной блокировки доступа к SCS DLAR[]

Назначение

  • Даёт возможность программно заблокировать или разрешить доступ программе к регистрам SCS.

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

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

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

  • Присутствует, только если реализована идентификация CoreSight и необязательный механизм программной блокировки. При отсутствии считывается и записывается как нуль.

Атрибуты

  • Адрес E000EFB0, доступ только для записи.
  • Небезопасная версия доступна безопасному коду по адресу E002EFB0.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DLAR register
Разряды Доступ Обозначение Функция
31:0
WO
KEY
Запись значения C5ACCE55 снимает блокировку, любого другого — устанавливает её. Пока блокировка активна, любые доступы на запись игнорируются, а доступы на чтение не вызывают побочных эффектов (например, сброса битов, которые обычно сбрасываются при их считывании).

Из документации остаётся неясным, запрещается доступ только к регистрам управления отладкой (спецификация CoreSight, вообще говоря, подразумевает именно это) или же ко всем регистрам SCS, кроме самого DLAR.

Регистр состояния программной блокировки доступа к SCS DLSR[]

Назначение

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

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

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

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

  • Присутствует, только если реализована идентификация CoreSight и необязательный механизм программной блокировки. При отсутствии считывается и записывается как нуль.

Атрибуты

  • Адрес E000EFB4, доступ только для записи.
  • Небезопасная версия доступна безопасному коду по адресу E002EFB4.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DLSR register
Разряды Доступ Обозначение Функция
31:3
Зарезервировано.
2
RO
nTT
Всегда равен нулю, указывая, что регистр DLAR является 32-разрядным.
1
RO
SLK
Состояние программной блокировки:
  • 0 – блокировка снята, программа имеет доступ к регистрам;
  • 1 – блокировка активна. Попытки программы выполнить запись в регистры игнорируются; считывание регистров не вызывает побочных эффектов.

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

0
RO
SLI
Признак поддержки возможности программной блокировки:
  • 0 – блокировка не поддерживается;
  • 1 – блокировка поддерживается.

Регистр выбора регистра ядра DCRSR[]

Назначение

  • Обеспечивает возможность выбора регистра процессора, доступ к которому будет выполнен через регистр DCRDR.

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

  • Только привилегированный доступ (отказ при непривилегированном доступе).
  • Начиная с ARMv8.1-M, регистр доступен для непривилегированных обращений со стороны DAP, если установлен бит DAUTHCTRL.UIDAPEN для любого режима безопасности.
  • Доступ только к слову (непредсказуемый результат при доступе к полуслову или байту).
  • Запись в регистр, если процессор не остановлен, игнорируется.
  • Регистр доступен только для отладчика.

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

  • Присутствует только при поддержке отладки.

Атрибуты

  • Адрес E000EDF4, доступ только для записи.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DCRSR register
Разряды Доступ Обозначение Функция
31:17
Зарезервировано.
16
RW
REGWnR
Тип доступа к выбранному регистру:
  • 0 – чтение;
  • 1 – запись.
15:7
Зарезервировано.
6:0
RW
REGSEL
Код выбора регистра:
  • 00–0C – регистры общего назначения R0–R12;
  • 0D – текущий указатель стека;
  • 0E – LR;
  • 0F – регистр адреса возобновления выполнения программы после выхода из отладочного режима (так называемый DebugReturnAddress);
  • 10 – XPSR, если отладка привилегированного кода разрешена, EAPSR в противном случае;
  • 11 – MSP (доступ возможен лишь в случае, если отладка привилегированного кода разрешена);
  • 12 – PSP;
  • 14 – комбинированное значение битов регистров CONTROL[7:0], FAULTMASK[7:0], BASEPRI[7:0], PRIMASK[7:0] (доступ возможен лишь в случае, если отладка привилегированного кода разрешена);
  • 18 – MSP_NS (доступ возможен лишь для процессора с расширением безопасности, если отладка небезопасного привилегированного кода разрешена);
  • 19 – PSP_NS (доступ возможен лишь для процессора с расширением безопасности);
  • 1A – MSP_S (доступ возможен лишь для процессора с расширением безопасности, если отладка безопасного привилегированного кода разрешена);
  • 1B – PSP_S (доступ возможен лишь для процессора с расширением безопасности, если отладка безопасного непривилегированного кода разрешена);
  • 1C – MSPLIM_S (доступ возможен лишь для процессора с расширением безопасности, если отладка безопасного привилегированного кода разрешена);
  • 1D – PSPLIM_S (доступ возможен лишь для процессора с расширением безопасности, если отладка безопасного непривилегированного кода разрешена);
  • 1E – MSPLIM_NS (доступ возможен лишь для ARMv8-M с основным расширением, если отладка небезопасного привилегированного кода разрешена);
  • 1F – PSPLIM_NS (доступ возможен лишь для ARMv8-M с основным расширением);
  • 21 – FPSCR (доступ возможен лишь при наличии FPU или MVE);
  • 22 – комбинированное значение битов регистров CONTROL_S[7:0], FAULTMASK_S[7:0], BASEPRI_S[7:0], PRIMASK_S[7:0] (доступ возможен лишь для процессора с расширением безопасности, если отладка безопасного привилегированного кода разрешена);
  • 23 – комбинированное значение битов регистров CONTROL_NS[7:0], FAULTMASK_NS[7:0], BASEPRI_NS[7:0], PRIMASK_NS[7:0] (доступ возможен лишь для процессора с расширением безопасности, если отладка небезопасного привилегированного кода разрешена);
  • 24 – VPR (доступ возможен лишь при наличии MVE);
  • 40–5F – регистры FPU S0–S31 (доступ возможен лишь при наличии FPU или MVE).

При записи любого другого кода поведение процессора непредсказуемо.

При наличии расширения безопасности регистры FPSCR, VPR и S0–S31 недоступны:

  • при выполнении небезопасного доступа, если отладка безопасного кода запрещена (бит DHCSR.S_SDE сброшен), а регистры FPU/MVE содержат данные безопасного режима (бит FPCCR_S.S установлен);
  • при выполнении небезопасного доступа, если регистр NSASR запрещает небезопасные доступы к регистрам FPU/MVE;
  • для состояния безопасности, в котором осуществляется попытка доступа, разрешена только отладка непривилегированного кода, а бит FPCCR.LSPACT для этого состояния безопасности установлен.

Регистр данных регистра ядра DCRDR[]

Назначение

  • Обеспечивает доступ к регистру процессора, выбранного через регистр DCRSR.

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

  • Только привилегированный доступ (отказ при непривилегированном доступе).
  • Начиная с ARMv8.1-M, регистр доступен для непривилегированных обращений со стороны DAP, если установлен бит DAUTHCTRL.UIDAPEN для любого режима безопасности.
  • Доступ только к слову (непредсказуемый результат при доступе к полуслову или байту).
  • Регистр доступен только для отладчика.

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

  • Присутствует только при поддержке отладки.

Атрибуты

  • Адрес E000EDF8, доступ только для записи.
  • Небезопасная версия доступна безопасному коду по адресу E002EDF8.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DCRDR register
Разряды Доступ Обозначение Функция
31:0
RW
DBGTMP
Буфер данных, обеспечивающий считывание или запись значения выбранного регистра процессора.

Регистр управления отладочными прерываниями и монитором DEMCR[]

Назначение

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

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

  • Только привилегированный доступ (отказ при непривилегированном доступе).
  • Начиная с ARMv8.1-M, регистр доступен для непривилегированных обращений со стороны DAP, если установлен бит DAUTHCTRL.UIDAPEN для любого режима безопасности.
  • Доступ только к слову (непредсказуемый результат при доступе к полуслову или байту). Начиная с ARMv8.1-M, возможен доступ полусловами и байтами.
  • В ARMv8-M без основного расширения и ARMv6-M доступность регистра для ПО определяется реализацией. В ARMv8-M с основным расширением и ARMv7-M регистр доступен и для отладчика, и для ПО.

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

  • В ARMv8-M без основного расширения и ARMv6-M присутствует только при поддержке отладки; в ARMv8-M с основным расширением и ARMv7-M присутствует всегда.

Атрибуты

  • Адрес E000EDFC, доступ только для записи.
  • Небезопасная версия доступна безопасному коду по адресу E002EDFC.
  • Регистр не имеет отдельных экземпляров для безопасного и небезопасного состояний.
ARM M-profile DEMCR register
Разряды Доступ Обозначение Функция
31:25
Зарезервировано.
24
RW
TRCENA
Разрешение трассировки:
  • 0 – средства DWT, PMU и ITM отключены;
  • 1 – средства DWT, PMU и ITM включены.

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

Обнуление этого бита не обязательно останавливает генерацию событий. Чтобы гарантировать прекращение их генерации, программа должна сначала обнулить биты управления средствами DWT, PMU и ITM, затем убедиться, что все сгенерированные события удалены из буфера и лишь после этого сбрасывать бит TRCENA.

Как этот бит влияет на обработку трассировки, зависит от реализации.

ARM рекомендует устанавливать данный бит при использованиии ETM, даже если ни один из трёх перечисленных блоков не используется.

В документации на ARMv7-M указывается, что влияние этого разряда на TPIU, ETM и другие компоненты системы, связанные с трассировкой, определяется реализацией. Когда он сброшен, из регистров DWT и ITM будут считываться неопределённые значения, а будет ли при этом игнорироваться запись в указанные блоки, определяется реализацией. Заметим, что PMU в версии ARMv7-M отсутствует.

В документации на ARMv6-M этот бит обозначен как DWTENA, что связано с отсутствием в этой версии PMU и ITM.

Холодный сброс обнуляет этот бит.

23
WO
MONPRKEY
Ключ записи в биты MON_PEND и MON_REQ:
  • 0 – значения, записываемые в указанные биты, не игнорируются;
  • 1 – значения, записываемые в указанные биты, игнорируются.

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

22
Зарезервировано.
21
RW
UMON_EN
Разрешение непривилегированного монитора:
  • 0 – прерывание DebugMon управляется битом MON_EN;
  • 1 – прерывание DebugMon может быть ожидающим при выполнении непривилегированного кода.

Попытка непривилегированной записи в этот бит со стороны DAP игнорируется.

Если бит SDME сброшен, небезопасные обращения на считывание возвращают для данного бита нулевое значение, а небезопасные обращения на запись игнорируются.

Этот бит присутствует лишь в ARMv8.1-M с IDE.

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

20
RO
SDME
Разрешение отладочного монитора для безопасного состояния:
  • 0 – в безопасном состоянии отладочные события запрещены; прерывание DebugMon обрабатывается в небезопасном состоянии;
  • 1 – в безопасном состоянии отладочные события разрешены; прерывание DebugMon обрабатывается в безопасном состоянии.

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

Этот бит реализован лишь в ARMv8-M при наличии основного расширения и расширения безопасности.

19
RW
MON_REQ
Запрос монитора.

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

Этот бит отсутствует в ARMv8-M без основного расширения и ARMv6-M.

Тёплый сброс очищает этот бит.

18
RW
MON_STEP
Запрос пошагового выполнения программы под управлением обработчика прерывания DebugMon:
  • 0 – пошаговое выполнение не запрашивается;
  • 1 – запрашивается выполнение одной команды.

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

Этот бит отсутствует в ARMv8-M без основного расширения и ARMv6-M.

Тёплый сброс очищает этот бит.

17
RW
MON_PEND
Признак ожидающего запроса DebugMon и установка/сброс этого запроса:
  • 0 – сброс/отсутствие запроса;
  • 1 – установка/наличие запроса.

Этот разряд управляет состоянием ожидания запроса DebugMon независимо от состояния битов MON_EN и UMON_EN.

Этот бит отсутствует в ARMv8-M без основного расширения и ARMv6-M.

Тёплый сброс очищает этот бит.

16
RW
MON_EN
Разрешение прерывания DebugMon:
  • 0 – прерывание запрещено;
  • 1 – прерывание разрешено.

Если отладочное событие останавливает процессор, значение этого разряда игнорируется.

Непривилегированные обращения на запись от DAP не изменяют этот бит.

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

Этот бит отсутствует в ARMv8-M без основного расширения и ARMv6-M.

Тёплый сброс очищает этот бит.

15:12
Зарезервировано.
11
RW
VC_SFERR
Останов по прерыванию SecureFault:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE).

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

Холодный сброс обнуляет этот бит.

10
RW
VC_HARDERR
Останов по прерыванию HardFault:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_HARDERR лишь в случае, если прерывание HardFault адресуется безопасному режиму).

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

Холодный сброс обнуляет этот бит.

9
RW
VC_INTERR
Останов по прерываниям, связанным с возникновением отказов при отложенном сохранении контекста FPU, с нарушением границ стека и с сохранением либо восстановлением контекста при входе или выходе из обработчика прерывания:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_INTERRлишь в случае, если соответствующее прерывание адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

8
RW
VC_BUSERR
Останов по прерыванию BusFault:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_BUSERR лишь в случае, если прерывание BusFault адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

7
RW
VC_STATERR
Останов по прерыванию UsageFault, вызванному неправильной информацией, например, попыткой выполнения несуществующей команды:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_STATERR лишь в случае, если прерывание адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

6
RW
VC_CHKERR
Останов по прерыванию UsageFault, вызванному нарушением выравнивания либо делением на нуль:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_CHKERR лишь в случае, если прерывание адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

5
RW
VC_NOCPERR
Останов по прерыванию UsageFault, вызванному недопустимой попыткой доступа к сопроцессору:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_NOCPERR лишь в случае, если прерывание адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

4
RW
VC_MMERR
Останов по прерыванию MemManage:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

Значение этого разряда игнорируется, если отладочный останов запрещён вообще (соответствующим внешним сигналом либо сброшенным битом DHCSR.C_DEBUGEN) либо если запрещён останов привилегированного кода (установлен любой из битов DHCSR.S_NSUIDE или DHCSR.S_SUIDE либо сброшен бит DHCSR.S_SDE; два последних бита имеются лишь в процессорах с расширением безопасности и вызывают игнорирование состояния VC_MMERR лишь в случае, если прерывание адресуется безопасному режиму).

Этот бит реализован только в ARMv8-M с основным расширением и ARMv7-M, если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

3:1
Зарезервировано.
0
RW
VC_CORERESET
Останов по тёплому сбросу:
  • 0 – останов запрещён;
  • 1 – останов разрешён.

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

Этот бит реализован только если отладочный останов поддерживается.

Холодный сброс обнуляет этот бит.

Регистры компонентов CoreSight[]

Каждое отладочное устройство, соответствующее спецификации идентификации периферии ARM (ARM peripheral identification specification), имеет набор регистров идентификации, занимающих последние 8 или 12 слов последнего 4-килобайтового блока, выделенного данному устройству. Различают регистры идентификации компонента (CIDR) и регистры идентификации периферийного устройства (PIDR). Все регистры идентификации доступны только на чтение только полными выровненными словами. Их расположение в последнем блоке адресного пространства устройства показано в следующей таблице.

Смещение Обозначение Значение
FD0
PIDR4
определяется реализацией (см. ниже)
FD4
PIDR5
00000000
FD8
PIDR6
00000000
FDC
PIDR7
00000000
FE0
PIDR0
определяется реализацией (см. ниже)
FE4
PIDR1
определяется реализацией (см. ниже)
FE8
PIDR2
определяется реализацией (см. ниже)
FEC
PIDR3
определяется реализацией (см. ниже)
FF0
CIDR0
0000000D
FF4
CIDR1
определяется реализацией (см. ниже)
FF8
CIDR2
00000005
FFC
CIDR3
000000B1

Регистры PIDR4–PIDR7 отсутствовали в ранних компонентах, а формат регистров PIDR0–PIDR3 у них отличался от современного. Подробнее это описано ниже в соответствующем подразделе.

В зависимости от класса компонента (определяется содержимым разрядов CIDR1[7:4]) компонент имеет те или иные дополнительные стандартные регистры, описанные в следующих подразделах:

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

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

ARM CID registers

Отображение значения идентификатора компонента на регистры CID

Биты CIDR1[7:4] указывают класс компонента, все остальные разряды идентификатора имеют одно и то же значение, являющееся сигнатурой устройства, соответствующего спецификации ARM CoreSight. Возможные значения указанных битов перечислены в следующей таблице.

Значение Описание
0
Общий компонент верификации
1
Таблица ПЗУ
2–8
зарезервировано
9
Отладочный компонент
A
зарезервировано
B
Блок тестирования периферии (PTB)
C
зарезервировано
D
Компонент DESS (OptimoDE Data Engine SubSystem)
E
Общий компонент IP
F
Периферийное устройство CoreLink (ранее использовалось название PrimeCell) или системный компонент

Для классов 1 и 9 (таблицы ПЗУ и отладочные компоненты) спецификация CoreSight определяет требования к регистрам идентификации периферийного устройства. Для остальных классов эти требования, если имеются, задаются соответствующими спецификациями.

Регистры идентификации периферийного устройства PIDR0–PIDR7[]

Новые устройства[]

Подобно регистрам CIDR, младшие байты регистров PIDR формируют 64-разрядный идентификатор периферийного устройства, большая часть разрядов которого образует фиксированную сигнатуру. Отображение байтов PIDR на значение идентификатора показано на рисунке.

ARM PID registers

Отображение значения идентификатора периферийного устройства на регистры PID

В следующей таблице описано назначение непостоянных разрядов идентификатора периферийного устройства для случая, когда флаг PIDR2.JEDEC (бит 3 регистра PIDR2) установлен, что соответствует современным устройствам.

Биты Обозначение Описание
PIDR4[7:4]
PIDR4.SIZE
Количество блоков по 4 Кбайта в адресном пространстве данного устройства, выраженное степенью двойки (нуль соответствует одному блоку, единица — двум, двойка — четырём и т. д.).
PIDR1[7:4]
PIDR2[2:0]
PIDR4[3:0]
PIDR1.DES_0
PIDR2.DES_1
PIDR4.DES_2
Идентификатор разработчика данного компонента. Для компонентов, разработанных ARM, эти поля содержат следующие значения: 0100 (PIDR4.DES_2), 011 (PIDR2.DES_1) и 1011 (PIDR1.DES_0).
PIDR3[7:4]
PIDR3.REVAND
Номер ревизии производителя. Изначально устанавливается равным нулю и увеличивается по мере внесения исправлений в оборудование.
PIDR3[3:0]
PIDR3.CMOD
Номер модификации, внесённой в приобретённое IP-ядро устройство самим покупателем. Если покупатель лишён такой возможности, это поле всегда содержит нуль.
PIDR2[7:4]
PIDR2.REVISION
Версия (ревизия) устройства. Отсчёт начинается с нуля.
PIDR2[3]
PIDR2.JEDEC
Флаг использования идентификационного кода JEP106, для современных устройств всегда установлен. Когда этот бит сброшен (в старых устройствах), регистры PIDR4–PIDR7 отсутствуют, а формат регистров PIDR0–PIDR3 отличается от показанного на рисунке выше и описываемого данной таблицей.
PIDR0[7:0]
PIDR1[3:0]
PIDR0.PART_0
PIDR1.PART_1
Номер компонента (part number), присваиваемый его разработчиком. Для компонентов класса 9 (отладочные компоненты) допустимо использовать один и тот же номер для разных компонентов при условии, что они имеют разный тип устройства (DEVTYPE). Тем не менее, рекомендуется каждому компоненту присваивать уникальный номер.

Старые устройства[]

Старые устройства (флаг PIDR2.JEDEC, т. е. бит PIDR2[3], сброшен) могут использовать смещения FD0–FDC, в которых в новых устройствах находятся регистры PIDR4–PIDR7, по своему усмотрению. Регистры PIDR0–PIDR3 таких устройств содержат поля, описанные в следующей таблице. Как и в случае новых устройств, используются только младшие байты регистров, три старших байта каждого регистра зарезервированы и должны быть равны нулю.

Биты Описание
PIDR0[7:0]
Присвоенный разработчиком номер компонента (part number), разряды 7:0.
PIDR1[7:4]
ASCII-идентификатор разработчика, разряды 3:0. Для ARM это поле равно 0001.
PIDR1[3:0]
Присвоенный разработчиком номер компонента, разряды 11:8.
PIDR2[7:4]
Номер версии (ревизии) устройства.
PIDR2[3]
Флаг типа идентификатора разработчика, равен нулю.
PIDR2[2:0]
ASCII-идентификатор разработчика, разряды 6:4. Для ARM это поле равно 100.
PIDR3[7:0]
Регистр конфигурации, описывающий параметры, использованные при построении данного устройства. Например, он может отражать ширину шины, для которой собрано устройство.

Компоненты CoreSight[]

Стандартные регистры компонентов CoreSight[]

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

Смещение Доступ Обозначение Назначение
F00
RW
ITCTRL
Регистр управления режимом интеграции
FA0
RW
CLAIMSET
Claim Tag Set register
FA4
RW
CLAIMCLR
Claim Tag Clear register
FA8
RO
DEVAFF0
Регистр 0 сродства устройства
FAC
RO
DEVAFF1
Регистр 1 сродства устройства
FB0
WO
LOC
Регистр блокирующего доступа
FB4
RO
LSR
Регистр состояния блокировки
FB8
RO
AUTHSTATUS
Регистр состояния аутентификации
FBC
RO
DEVARCH
Регистр архитектуры устройства
FC0
RO
DEVID2
Регистр 2 конфигурации устройства
FC4
RO
DEVID1
Регистр 1 конфигурации устройства
FC8
RO
DEVID
Регистр конфигурации устройства
FCC
RO
DEVTYPE
Регистр идентификации типа устройства

Регистр ITCTRL[]

Регистр CLAIMSET[]

Регистр CLAIMCLR[]

Регистры DEVAFF[]

Регистр LOC[]

Регистр LSR[]

Регистр AUTHSTATUS[]

Регистр DEVARCH[]

Регистры DEVID[]

Регистр DEVTYPE[]

Блок трассировки и слежения за данными (DWT)[]

Блок точек останова (BPU)[]

Таблица ПЗУ[]

Содержимое таблицы ПЗУ позволяет отладчику убедиться в наличии или отсутствии тех или иных отладочных средств и получить необходимые базовые адреса.

Система может содержать несколько таблиц ПЗУ, каждая из которых занимает 4 Кбайта и размещена на соответствующей границе. Попытки записи в таблицу ПЗУ игнорируются.

Общий формат таблицы ПЗУ выглядит следующим образом:

Смещение Размер Обозначение Описание
000
3840
Элементы таблицы размером 4 байта каждый
F00
204
Зарезервированная область
FCC
4
MEMTYPE
Регистр MEMTYPE
FD0
32
PID4–PID7, PID0–PID3
Регистры идентификации периферийного устройства
FF0
16
CID0–CID3
Регистры идентификации компонента

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

Элементы таблицы[]

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

Биты Название поля Описание
31:12
Смещение
Это поле определяет адрес последнего 4-килобайтового блока адресов, относящихся к компоненту, относительно адреса начала данной таблицы ПЗУ и представляет из себя число со знаком. Базовый адрес компонента равен сумме базового адреса таблицы ПЗУ и значения этого поля, дополненного справа двенадцатью нулями.

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

11:9
Зарезервировано
8:4
Идентификатор домена питания
Определяет домен питания, к которому относится данный компонент. Это поле поддерживает до 32 доменов и действительно только в случае, если бит 2 установлен; в противном случае это поле содержить нуль
3
Зарезервировано
2
Домен питания корректен
Этот бит указывает, корректен ли идентификатор домена питания в разрядах 8:4. Идентификатор корректен, когда этот разряд установлен
1
Формат
Этот бит всегда установлен
0
Элемент используется
Когда установлен, этот бит показывает, что данный элемент используется

Отладочный компонент имеет адресное пространство, состоящее из целого числа 4-килобайтовых блоков. Поле смещения в элементе таблицы ПЗУ позволяет получить адрес последнего из этих блоков. В конце данного блока (начиная со смещения FD0) располагаются регистры идентификации периферийного устройства и компонента (PID и CID), позволяющие однозначно определить тип данного компонента. Число 4-килобайтовых блоков, занимаемых компонентом, определяется битами PID4[4:7] (их нулевое значение соответствует одному блоку).

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

Элемент может указывать на другую таблицу ПЗУ. Таким образом, возможно построение иерархии таблиц.

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

Регистр MEMTYPE[]

Регистр MEMTYPR содержит только один значащий разряд — бит 0:

  • когда бит 0 сброшен, это означает, что все допустимые адреса на шине, на которой находится таблица ПЗУ, описаны этой таблицей. Попытка обратиться к другим адресам приведёт к непредсказуемым последствиям;
  • когда бит 1 установлен, это означает, что на шине определены области адресов, не описываемые таблицей ПЗУ. Положение, размеры и типы этих областей определены какими-либо стандартными средствами быть не могут. Предполагается, что отладочное ПО способно установить карту памяти, опираясь, например, на предоставленную пользователем информацию о конкретном типе процессора.

Компоненты CoreLink/PrimeCell и системные компоненты[]

Advertisement