Перейти к содержанию

Регистры EPPB RP2350

Регистры Raspberry Pi на расширенной частной шине EPPB ядра Cortex-M33 в RP2350: выбор прерываний, которые приходят как немаскируемое прерывание NMI, и нестандартные настройки сна.

EPPB — часть частной шины Cortex-M33, на которой Raspberry Pi разместила регистры для своих функций. Копия этих регистров есть у каждого ядра, и сбрасываются они при тёплом сбросе ядра (даташит RP2350, раздел 3.7.5.1).

NMI_MASK0 и NMI_MASK1 выбирают, какие прерывания — 0–31 и 32–51 — подаются на ядро как NMI. В заголовке pico-sdk для NMI_MASK1 написано «0 though 51», в таблице даташита — 32–51; регистр занимает 20 бит, что соответствует прерываниям 32–51. В SLEEPCTRL бит LIGHT_SLEEP оставляет запрос тактирования в обычном сне — пробуждение на 5 тактов быстрее, а WICENREQ просит, чтобы следующий глубокий сон был сном с контроллером пробуждения WIC.

ЭкземплярБазовый адрес
EPPB0xE008 0000

Регистры блока

РегистрСмещениеНазначениеПосле сброса
M33_EPPB_NMI_MASK00x00Прерывания 0–31, которые приходят как NMI0x0000 0000
M33_EPPB_NMI_MASK10x04Прерывания 32–51, которые приходят как NMI0x0000 0000
M33_EPPB_SLEEPCTRL0x08Нестандартные настройки сна0x0000 0002

M33_EPPB_NMI_MASK0 — прерывания 0–31, которые приходят как NMI

Смещение 0x00, адрес 0xE008 0000, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: M33_EPPB_NMI_MASK0_…

Значение занимает регистр целиком, отдельных полей нет.

M33_EPPB_NMI_MASK1 — прерывания 32–51, которые приходят как NMI

Смещение 0x04, адрес 0xE008 0004, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: M33_EPPB_NMI_MASK1_…

Отдельных полей нет: значение занимает биты 19:0, остальные биты не используются.

M33_EPPB_SLEEPCTRL — нестандартные настройки сна

Смещение 0x08, адрес 0xE008 0008, после сброса 0x0000 0002. Макросы pico-sdk: M33_EPPB_SLEEPCTRL_…

1514131211109876543210
—WICENACKWICENREQLIGHT_SLEEP
  • WICENACK (бит 2, только чтение, после сброса 0x0) — Контроллер прерываний принял изменение WICENREQ.
  • WICENREQ (бит 1, чтение и запись, после сброса 0x1) — Следующий глубокий сон — с контроллером пробуждения WIC; перед сном дождитесь WICENACK.
  • LIGHT_SLEEP (бит 0, чтение и запись, после сброса 0x0) — Не снимать запрос тактирования в обычном сне — пробуждение на 5 тактов быстрее; на глубокий сон не влияет.

Частые вопросы

Как сделать прерывание RP2350 немаскируемым?

Установите его бит в NMI_MASK0 (прерывания 0–31) или NMI_MASK1 (32–51) блока EPPB того ядра, которое должно получать NMI. Регистры у каждого ядра свои и сбрасываются при тёплом сбросе ядра.

Источники

  1. Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 3.7.5.1: список регистров, назначение полей, тип доступа и значения после сброса
  2. Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause

Нашли ошибку в регистрах?

Другие регистры RP2350

Статьи и термины