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

Регистры 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: после сброса счётчики выключены для экономии энергии, а бит включения позволяет точно начать и остановить замер вокруг нужного фрагмента кода.

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

В RP2040 блок BUSCTRL устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры BUSCTRL RP2040».

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

РегистрСмещениеНазначениеПосле сброса
BUSCTRL_BUS_PRIORITY0x00Приоритеты ведущих устройств на шине0x0000 0000
BUSCTRL_BUS_PRIORITY_ACK0x04Подтверждение смены приоритетов0x0000 0000
BUSCTRL_PERFCTR_EN0x08Включение счётчиков событий; после сброса выключены0x0000 0000
BUSCTRL_PERFCTRn0x0C + n · 0x08Счётчик событий шины n0x0000 0000
BUSCTRL_PERFSELn0x10 + n · 0x08Выбор события для счётчика n0x0000 001F

BUSCTRL_BUS_PRIORITY — приоритеты ведущих устройств на шине

Смещение 0x00, адрес 0x4006 8000, после сброса 0x0000 0000. Макросы pico-sdk: BUSCTRL_BUS_PRIORITY_…

1514131211109876543210
—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
0x0siob_proc1_stall_upstream
0x1siob_proc1_stall_downstream
0x2siob_proc1_access_contested
0x3siob_proc1_access
0x4siob_proc0_stall_upstream
0x5siob_proc0_stall_downstream
0x6siob_proc0_access_contested
0x7siob_proc0_access
0x8apb_stall_upstream
0x9apb_stall_downstream
0xAapb_access_contested
0xBapb_access
0xCfastperi_stall_upstream
0xDfastperi_stall_downstream
0xEfastperi_access_contested
0xFfastperi_access
0x10sram9_stall_upstream
0x11sram9_stall_downstream
0x12sram9_access_contested
0x13sram9_access
0x14sram8_stall_upstream
0x15sram8_stall_downstream
0x16sram8_access_contested
0x17sram8_access
0x18sram7_stall_upstream
0x19sram7_stall_downstream
0x1Asram7_access_contested
0x1Bsram7_access
0x1Csram6_stall_upstream
0x1Dsram6_stall_downstream
0x1Esram6_access_contested
0x1Fsram6_access
0x20sram5_stall_upstream
0x21sram5_stall_downstream
0x22sram5_access_contested
0x23sram5_access
0x24sram4_stall_upstream
0x25sram4_stall_downstream
0x26sram4_access_contested
0x27sram4_access
0x28sram3_stall_upstream
0x29sram3_stall_downstream
0x2Asram3_access_contested
0x2Bsram3_access
0x2Csram2_stall_upstream
0x2Dsram2_stall_downstream
0x2Esram2_access_contested
0x2Fsram2_access
0x30sram1_stall_upstream
0x31sram1_stall_downstream
0x32sram1_access_contested
0x33sram1_access
0x34sram0_stall_upstream
0x35sram0_stall_downstream
0x36sram0_access_contested
0x37sram0_access
0x38xip_main1_stall_upstream
0x39xip_main1_stall_downstream
0x3Axip_main1_access_contested
0x3Bxip_main1_access
0x3Cxip_main0_stall_upstream
0x3Dxip_main0_stall_downstream
0x3Exip_main0_access_contested
0x3Fxip_main0_access
0x40rom_stall_upstream
0x41rom_stall_downstream
0x42rom_access_contested
0x43rom_access

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

Почему счётчики событий шины RP2350 не считают?

После сброса они выключены: установите регистр PERFCTR_EN в 1. Затем выберите событие в PERFSELn и обнулите счётчик записью любого значения в PERFCTRn.

Источники

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

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

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

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