Регистры BUSCTRL RP2350
Регистры управления системной шиной RP2350: приоритет каждого ведущего — двух ядер, чтения и записи DMA — при арбитраже и четыре счётчика событий шины с общим включением.
Ядра и DMA обращаются к памяти и периферии через коммутационную матрицу AHB5. Когда два ведущих обращаются к одному порту, первым проходит ведущий с высоким приоритетом; BUS_PRIORITY задаёт его для ядра 0, ядра 1, чтения и записи DMA, а BUS_PRIORITY_ACK подтверждает, что все арбитры приняли новые приоритеты (даташит RP2350, раздел 12.15.4).
Четыре 24-битных счётчика PERFCTR0–3 насыщаются, а не переполняются, и обнуляются записью любого значения; каждый считает одно из 20 событий, выбранное в PERFSELn, — обращения к порту матрицы или обращения с ожиданием. Новое по сравнению с RP2040 — регистр PERFCTR_EN: после сброса счётчики выключены для экономии энергии, а бит включения позволяет точно начать и остановить замер вокруг нужного фрагмента кода.
| Экземпляр | Базовый адрес |
|---|---|
| BUSCTRL | 0x4006 8000 |
В RP2040 блок BUSCTRL устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры BUSCTRL RP2040».
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| BUSCTRL_BUS_PRIORITY | 0x00 | Приоритеты ведущих устройств на шине | 0x0000 0000 |
| BUSCTRL_BUS_PRIORITY_ACK | 0x04 | Подтверждение смены приоритетов | 0x0000 0000 |
| BUSCTRL_PERFCTR_EN | 0x08 | Включение счётчиков событий; после сброса выключены | 0x0000 0000 |
| BUSCTRL_PERFCTRn | 0x0C + n · 0x08 | Счётчик событий шины n | 0x0000 0000 |
| BUSCTRL_PERFSELn | 0x10 + n · 0x08 | Выбор события для счётчика n | 0x0000 001F |
BUSCTRL_BUS_PRIORITY — приоритеты ведущих устройств на шине
Смещение 0x00, адрес 0x4006 8000, после сброса 0x0000 0000. Макросы pico-sdk: BUSCTRL_BUS_PRIORITY_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | DMA_W | — | DMA_R | — | PROC1 | — | PROC0 | ||||||||
- DMA_W (бит 12, чтение и запись, после сброса 0x0) — Приоритет записи DMA: 1 — высокий.
- DMA_R (бит 8, чтение и запись, после сброса 0x0) — Приоритет чтения DMA: 1 — высокий.
- PROC1 (бит 4, чтение и запись, после сброса 0x0) — Приоритет ядра 1: 1 — высокий.
- PROC0 (бит 0, чтение и запись, после сброса 0x0) — Приоритет ядра 0: 1 — высокий.
BUSCTRL_BUS_PRIORITY_ACK — подтверждение смены приоритетов
Смещение 0x04, адрес 0x4006 8004, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: BUSCTRL_BUS_PRIORITY_ACK_…
Отдельных полей нет: значение занимает бит 0, остальные биты не используются.
BUSCTRL_PERFCTR_EN — включение счётчиков событий; после сброса выключены
Смещение 0x08, адрес 0x4006 8008, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: BUSCTRL_PERFCTR_EN_…
Отдельных полей нет: значение занимает бит 0, остальные биты не используются.
BUSCTRL_PERFCTRn — счётчик событий шины n
4 регистра, n = 0…3: смещение 0x0C + n · 0x08, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: BUSCTRL_PERFCTRn_…
Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.
BUSCTRL_PERFSELn — выбор события для счётчика n
4 регистра, n = 0…3: смещение 0x10 + n · 0x08, после сброса 0x0000 001F, чтение и запись. Макросы pico-sdk: BUSCTRL_PERFSELn_…
Отдельных полей нет: значение занимает биты 6:0, остальные биты не используются.
| Значение | Имя в pico-sdk |
|---|---|
| 0x0 | siob_proc1_stall_upstream |
| 0x1 | siob_proc1_stall_downstream |
| 0x2 | siob_proc1_access_contested |
| 0x3 | siob_proc1_access |
| 0x4 | siob_proc0_stall_upstream |
| 0x5 | siob_proc0_stall_downstream |
| 0x6 | siob_proc0_access_contested |
| 0x7 | siob_proc0_access |
| 0x8 | apb_stall_upstream |
| 0x9 | apb_stall_downstream |
| 0xA | apb_access_contested |
| 0xB | apb_access |
| 0xC | fastperi_stall_upstream |
| 0xD | fastperi_stall_downstream |
| 0xE | fastperi_access_contested |
| 0xF | fastperi_access |
| 0x10 | sram9_stall_upstream |
| 0x11 | sram9_stall_downstream |
| 0x12 | sram9_access_contested |
| 0x13 | sram9_access |
| 0x14 | sram8_stall_upstream |
| 0x15 | sram8_stall_downstream |
| 0x16 | sram8_access_contested |
| 0x17 | sram8_access |
| 0x18 | sram7_stall_upstream |
| 0x19 | sram7_stall_downstream |
| 0x1A | sram7_access_contested |
| 0x1B | sram7_access |
| 0x1C | sram6_stall_upstream |
| 0x1D | sram6_stall_downstream |
| 0x1E | sram6_access_contested |
| 0x1F | sram6_access |
| 0x20 | sram5_stall_upstream |
| 0x21 | sram5_stall_downstream |
| 0x22 | sram5_access_contested |
| 0x23 | sram5_access |
| 0x24 | sram4_stall_upstream |
| 0x25 | sram4_stall_downstream |
| 0x26 | sram4_access_contested |
| 0x27 | sram4_access |
| 0x28 | sram3_stall_upstream |
| 0x29 | sram3_stall_downstream |
| 0x2A | sram3_access_contested |
| 0x2B | sram3_access |
| 0x2C | sram2_stall_upstream |
| 0x2D | sram2_stall_downstream |
| 0x2E | sram2_access_contested |
| 0x2F | sram2_access |
| 0x30 | sram1_stall_upstream |
| 0x31 | sram1_stall_downstream |
| 0x32 | sram1_access_contested |
| 0x33 | sram1_access |
| 0x34 | sram0_stall_upstream |
| 0x35 | sram0_stall_downstream |
| 0x36 | sram0_access_contested |
| 0x37 | sram0_access |
| 0x38 | xip_main1_stall_upstream |
| 0x39 | xip_main1_stall_downstream |
| 0x3A | xip_main1_access_contested |
| 0x3B | xip_main1_access |
| 0x3C | xip_main0_stall_upstream |
| 0x3D | xip_main0_stall_downstream |
| 0x3E | xip_main0_access_contested |
| 0x3F | xip_main0_access |
| 0x40 | rom_stall_upstream |
| 0x41 | rom_stall_downstream |
| 0x42 | rom_access_contested |
| 0x43 | rom_access |
Частые вопросы
Почему счётчики событий шины RP2350 не считают?
После сброса они выключены: установите регистр PERFCTR_EN в 1. Затем выберите событие в PERFSELn и обнулите счётчик записью любого значения в PERFCTRn.
Источники
- Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.15.4.3: список регистров, назначение полей, тип доступа и значения после сброса
- Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause
Нашли ошибку в регистрах?
Другие регистры RP2350
- Все регистры RP2350Блоки периферии и базовые адреса
- SHA256 — ускоритель SHA-256SHA256_CSR, SHA256_WDATA, SHA256_SUMn
- TICKS — генераторы тиковTICKS_PROC0_CTRL, TICKS_PROC0_CYCLES, TICKS_PROC0_COUNT, TICKS_PROC1_CTRL, TICKS_PROC1_CYCLES, TICKS_PROC1_COUNT
- TRNG — генератор случайных чиселTRNG_RNG_IMR, TRNG_RNG_ISR, TRNG_RNG_ICR, TRNG_TRNG_CONFIG, TRNG_TRNG_VALID, TRNG_EHR_DATA0
- GLITCH_DETECTOR — детектор сбоевGLITCH_DETECTOR_ARM, GLITCH_DETECTOR_DISARM, GLITCH_DETECTOR_SENSITIVITY, GLITCH_DETECTOR_LOCK, GLITCH_DETECTOR_TRIG_STATUS, GLITCH_DETECTOR_TRIG_FORCE
- HSTX — быстрый последовательный выводHSTX_CTRL_CSR, HSTX_CTRL_BITn, HSTX_CTRL_EXPAND_SHIFT, HSTX_CTRL_EXPAND_TMDS
- HSTX_FIFO — FIFO быстрого выводаHSTX_FIFO_STAT, HSTX_FIFO_FIFO
- QMI — интерфейс QSPI-памятиQMI_DIRECT_CSR, QMI_DIRECT_TX, QMI_DIRECT_RX, QMI_M0_TIMING, QMI_M0_RFMT, QMI_M0_RCMD
- XIP_AUX — быстрый порт FIFO XIPXIP_AUX_STREAM, XIP_AUX_QMI_DIRECT_TX, XIP_AUX_QMI_DIRECT_RX
- BOOTRAM — регистры загрузочной памятиBOOTRAM_WRITE_ONCE0, BOOTRAM_WRITE_ONCE1, BOOTRAM_BOOTLOCK_STAT, BOOTRAM_BOOTLOCKn
- CORESIGHT_TRACE — FIFO трассировкиCORESIGHT_TRACE_CTRL_STATUS, CORESIGHT_TRACE_TRACE_CAPTURE_FIFO
- EPPB — регистры ядра от Raspberry PiM33_EPPB_NMI_MASK0, M33_EPPB_NMI_MASK1, M33_EPPB_SLEEPCTRL
- OTP — однократно программируемая памятьOTP_SW_LOCKn, OTP_SBPI_INSTR, OTP_SBPI_WDATA_0, OTP_SBPI_WDATA_1, OTP_SBPI_WDATA_2, OTP_SBPI_WDATA_3
- POWMAN — менеджер питанияPOWMAN_BADPASSWD, POWMAN_VREG_CTRL, POWMAN_VREG_STS, POWMAN_VREG, POWMAN_VREG_LP_ENTRY, POWMAN_VREG_LP_EXIT
- ACCESSCTRL — права доступа к шинеACCESSCTRL_LOCK, ACCESSCTRL_FORCE_CORE_NS, ACCESSCTRL_CFGRESET, ACCESSCTRL_GPIO_NSMASK0, ACCESSCTRL_GPIO_NSMASK1, ACCESSCTRL_ROM
- TIMER — системные таймерыTIMER_TIMEHW, TIMER_TIMELW, TIMER_TIMEHR, TIMER_TIMELR, TIMER_ALARMn, TIMER_ARMED
- WATCHDOG — сторожевой таймерWATCHDOG_CTRL, WATCHDOG_LOAD, WATCHDOG_REASON, WATCHDOG_SCRATCHn
- ADC — аналого-цифровой преобразовательADC_CS, ADC_RESULT, ADC_FCS, ADC_FIFO, ADC_DIV, ADC_INTR
- PWM — широтно-импульсная модуляцияPWM_CHn_CSR, PWM_CHn_DIV, PWM_CHn_CTR, PWM_CHn_CC, PWM_CHn_TOP, PWM_EN
- XOSC — кварцевый генераторXOSC_CTRL, XOSC_STATUS, XOSC_DORMANT, XOSC_STARTUP, XOSC_COUNT
- PLL — умножители частотыPLL_CS, PLL_PWR, PLL_FBDIV_INT, PLL_PRIM, PLL_INTR, PLL_INTE
- PADS_BANK0 — электрические настройки GPIOPADS_BANK0_VOLTAGE_SELECT, PADS_BANK0_GPIOn, PADS_BANK0_SWCLK, PADS_BANK0_SWD
- PADS_QSPI — электрические настройки выводов QSPIPADS_QSPI_VOLTAGE_SELECT, PADS_QSPI_GPIO_QSPI_SCLK, PADS_QSPI_GPIO_QSPI_SD0, PADS_QSPI_GPIO_QSPI_SD1, PADS_QSPI_GPIO_QSPI_SD2, PADS_QSPI_GPIO_QSPI_SD3
- RESETS — сброс подсистемRESETS_RESET, RESETS_WDSEL, RESETS_RESET_DONE
- PSM — автомат включения питанияPSM_FRCE_ON, PSM_FRCE_OFF, PSM_WDSEL, PSM_DONE
- SYSINFO — сведения о чипеSYSINFO_CHIP_ID, SYSINFO_PACKAGE_SEL, SYSINFO_PLATFORM, SYSINFO_GITREF_RP2350
- ROSC — кольцевой генераторROSC_CTRL, ROSC_FREQA, ROSC_FREQB, ROSC_RANDOM, ROSC_DORMANT, ROSC_DIV
- SYSCFG — системные настройкиSYSCFG_PROC_CONFIG, SYSCFG_PROC_IN_SYNC_BYPASS, SYSCFG_PROC_IN_SYNC_BYPASS_HI, SYSCFG_DBGFORCE, SYSCFG_MEMPOWERDOWN, SYSCFG_AUXCTRL
- XIP_CTRL — кеш выполнения из флеш-памятиXIP_CTRL, XIP_STAT, XIP_CTR_HIT, XIP_CTR_ACC, XIP_STREAM_ADDR, XIP_STREAM_CTR
- USB — контроллер USBUSB_ADDR_ENDP, USB_ADDR_ENDPn, USB_MAIN_CTRL, USB_SOF_WR, USB_SOF_RD, USB_SIE_CTRL
- PIO — программируемый ввод-выводPIO_CTRL, PIO_FSTAT, PIO_FDEBUG, PIO_FLEVEL, PIO_TXFn, PIO_RXFn
- DMA — прямой доступ к памятиDMA_CHn_READ_ADDR, DMA_CHn_WRITE_ADDR, DMA_CHn_TRANS_COUNT, DMA_CHn_CTRL_TRIG, DMA_CHn_AL1_CTRL, DMA_CHn_AL1_READ_ADDR
- SIO — однотактный ввод-вывод ядерSIO_CPUID, SIO_GPIO_IN, SIO_GPIO_HI_IN, SIO_GPIO_OUT, SIO_GPIO_HI_OUT, SIO_GPIO_OUT_SET
- CLOCKS — тактированиеCLOCKS_CLK_GPOUT0_CTRL, CLOCKS_CLK_GPOUTn_DIV, CLOCKS_CLK_GPOUTn_SELECTED, CLOCKS_CLK_GPOUT1_CTRL, CLOCKS_CLK_GPOUT2_CTRL, CLOCKS_CLK_GPOUT3_CTRL
- IO_BANK0 — мультиплексор GPIOIO_BANK0_GPIOn_STATUS, IO_BANK0_GPIOn_CTRL, IO_BANK0_IRQSUMMARY_PROC0_SECURE0, IO_BANK0_IRQSUMMARY_PROC0_SECURE1, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE0, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE1
- IO_QSPI — мультиплексор выводов QSPI и USBIO_QSPI_USBPHY_DP_STATUS, IO_QSPI_USBPHY_DP_CTRL, IO_QSPI_USBPHY_DM_STATUS, IO_QSPI_USBPHY_DM_CTRL, IO_QSPI_GPIO_QSPI_SCLK_STATUS, IO_QSPI_GPIO_QSPI_SCLK_CTRL
- M33 — системные регистры Cortex-M33M33_ITM_STIMn, M33_ITM_TER0, M33_ITM_TPR, M33_ITM_TCR, M33_INT_ATREADY, M33_INT_ATVALID