Регистры SIO RP2350
Регистры SIO RP2350: быстрое управление GPIO0–47, линиями USB и QSPI, FIFO и колокольчики для обмена между ядрами, 32 спинлока, интерполяторы, 64-битный таймер платформы RISC-V и кодер TMDS — с отдельными банками для защищённого и незащищённого кода.
Содержание
- Регистры блока
- SIO_CPUID
- SIO_GPIO_IN
- SIO_GPIO_HI_IN
- SIO_GPIO_OUT
- SIO_GPIO_HI_OUT
- SIO_GPIO_OUT_SET
- SIO_GPIO_HI_OUT_SET
- SIO_GPIO_OUT_CLR
- SIO_GPIO_HI_OUT_CLR
- SIO_GPIO_OUT_XOR
- SIO_GPIO_HI_OUT_XOR
- SIO_GPIO_OE
- SIO_GPIO_HI_OE
- SIO_GPIO_OE_SET
- SIO_GPIO_HI_OE_SET
- SIO_GPIO_OE_CLR
- SIO_GPIO_HI_OE_CLR
- SIO_GPIO_OE_XOR
- SIO_GPIO_HI_OE_XOR
- SIO_FIFO_ST
- SIO_FIFO_WR
- SIO_FIFO_RD
- SIO_SPINLOCK_ST
- SIO_INTERP0_ACCUM0
- SIO_INTERP0_ACCUM1
- SIO_INTERP0_BASE0
- SIO_INTERP0_BASE1
- SIO_INTERP0_BASE2
- SIO_INTERP0_POP_LANE0
- SIO_INTERP0_POP_LANE1
- SIO_INTERP0_POP_FULL
- SIO_INTERP0_PEEK_LANE0
- SIO_INTERP0_PEEK_LANE1
- SIO_INTERP0_PEEK_FULL
- SIO_INTERP0_CTRL_LANE0
- SIO_INTERP0_CTRL_LANE1
- SIO_INTERP0_ACCUM0_ADD
- SIO_INTERP0_ACCUM1_ADD
- SIO_INTERP0_BASE_1AND0
- SIO_INTERP1_ACCUM0
- SIO_INTERP1_ACCUM1
- SIO_INTERP1_BASE0
- SIO_INTERP1_BASE1
- SIO_INTERP1_BASE2
- SIO_INTERP1_POP_LANE0
- SIO_INTERP1_POP_LANE1
- SIO_INTERP1_POP_FULL
- SIO_INTERP1_PEEK_LANE0
- SIO_INTERP1_PEEK_LANE1
- SIO_INTERP1_PEEK_FULL
- SIO_INTERP1_CTRL_LANE0
- SIO_INTERP1_CTRL_LANE1
- SIO_INTERP1_ACCUM0_ADD
- SIO_INTERP1_ACCUM1_ADD
- SIO_INTERP1_BASE_1AND0
- SIO_SPINLOCKn
- SIO_DOORBELL_OUT_SET
- SIO_DOORBELL_OUT_CLR
- SIO_DOORBELL_IN_SET
- SIO_DOORBELL_IN_CLR
- SIO_PERI_NONSEC
- SIO_RISCV_SOFTIRQ
- SIO_MTIME_CTRL
- SIO_MTIME
- SIO_MTIMEH
- SIO_MTIMECMP
- SIO_MTIMECMPH
- SIO_TMDS_CTRL
- SIO_TMDS_WDATA
- SIO_TMDS_PEEK_SINGLE
- SIO_TMDS_POP_SINGLE
- SIO_TMDS_PEEK_DOUBLE_Ln
- SIO_TMDS_POP_DOUBLE_Ln
SIO RP2350 — блок быстрого доступа ядер к GPIO и межъядерного обмена с адреса 0xD000 0000. В отличие от RP2040, большая его часть продублирована для защищённого и незащищённого кода: у каждого банка свои FIFO, колокольчики, спинлоки и прерывания, а регистры GPIO общие и фильтруются по маскам ACCESSCTRL (даташит RP2350, раздел 3.1).
GPIO_OUT, GPIO_OE и GPIO_IN охватывают GPIO0–31, а регистры GPIO_HI_… — GPIO32–47 (биты 15:0), линии USB DP и DM (биты 24 и 25) и выводы QSPI (биты 26–31); у регистров выходов есть псевдонимы SET, CLR и XOR. FIFO между ядрами по разделу 3.1.5 — по четыре 32-битных слова в каждую сторону, хотя в описании FIFO_ST в pico-sdk сказано восемь; прерывание FIFO — SIO_IRQ_FIFO (25), у незащищённого банка — SIO_IRQ_FIFO_NS (27).
Новое — колокольчики: по восемь флагов в каждую сторону, которые поднимают прерывание SIO_IRQ_BELL (26) на другом ядре, для событий, где важен факт, а не число и порядок. Делителя больше нет — у ядер есть команды деления, — зато есть 64-битный таймер платформы RISC-V с прерыванием SIO_IRQ_MTIMECMP для каждого ядра и кодер TMDS для вывода DVI на выводы без HSTX. Интерполяторы и кодер после сброса принадлежат защищённому SIO; PERI_NONSEC отдаёт их незащищённому.
| Экземпляр | Базовый адрес |
|---|---|
| SIO | 0xD000 0000 |
В RP2040 блок SIO устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры SIO RP2040».
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| SIO_CPUID | 0x00 | Номер ядра, которое читает регистр: 0 или 1 | не определено |
| SIO_GPIO_IN | 0x04 | Состояние входов GPIO0–31; в незащищённом SIO защищённые выводы читаются как 0 | 0x0000 0000 |
| SIO_GPIO_HI_IN | 0x08 | Состояние входов GPIO32–47, линий USB и выводов QSPI | 0x0000 0000 |
| SIO_GPIO_OUT | 0x10 | Выходные уровни GPIO0–31; чтение возвращает записанное, а не уровни на выводах | 0x0000 0000 |
| SIO_GPIO_HI_OUT | 0x14 | Выходные уровни GPIO32–47, линий USB и выводов QSPI | 0x0000 0000 |
| SIO_GPIO_OUT_SET | 0x18 | Атомарная установка битов GPIO_OUT | 0x0000 0000 |
| SIO_GPIO_HI_OUT_SET | 0x1C | Атомарная установка битов GPIO_HI_OUT | 0x0000 0000 |
| SIO_GPIO_OUT_CLR | 0x20 | Атомарный сброс битов GPIO_OUT | 0x0000 0000 |
| SIO_GPIO_HI_OUT_CLR | 0x24 | Атомарный сброс битов GPIO_HI_OUT | 0x0000 0000 |
| SIO_GPIO_OUT_XOR | 0x28 | Атомарная инверсия битов GPIO_OUT | 0x0000 0000 |
| SIO_GPIO_HI_OUT_XOR | 0x2C | Атомарная инверсия битов GPIO_HI_OUT | 0x0000 0000 |
| SIO_GPIO_OE | 0x30 | Разрешение выходов GPIO0–31: 1 — выход, 0 — высокий импеданс | 0x0000 0000 |
| SIO_GPIO_HI_OE | 0x34 | Разрешение выходов GPIO32–47, линий USB и выводов QSPI | 0x0000 0000 |
| SIO_GPIO_OE_SET | 0x38 | Атомарная установка битов GPIO_OE | 0x0000 0000 |
| SIO_GPIO_HI_OE_SET | 0x3C | Атомарная установка битов GPIO_HI_OE | 0x0000 0000 |
| SIO_GPIO_OE_CLR | 0x40 | Атомарный сброс битов GPIO_OE | 0x0000 0000 |
| SIO_GPIO_HI_OE_CLR | 0x44 | Атомарный сброс битов GPIO_HI_OE | 0x0000 0000 |
| SIO_GPIO_OE_XOR | 0x48 | Атомарная инверсия битов GPIO_OE | 0x0000 0000 |
| SIO_GPIO_HI_OE_XOR | 0x4C | Атомарная инверсия битов GPIO_HI_OE | 0x0000 0000 |
| SIO_FIFO_ST | 0x50 | Состояние FIFO между ядрами | 0x0000 0002 |
| SIO_FIFO_WR | 0x54 | Запись в исходящую FIFO этого ядра | 0x0000 0000 |
| SIO_FIFO_RD | 0x58 | Чтение из входящей FIFO этого ядра | не определено |
| SIO_SPINLOCK_ST | 0x5C | Состояние всех 32 спинлоков, 1 — занят; для отладки | 0x0000 0000 |
| SIO_INTERP0_ACCUM0 | 0x80 | Аккумулятор 0 интерполятора | 0x0000 0000 |
| SIO_INTERP0_ACCUM1 | 0x84 | Аккумулятор 1 интерполятора | 0x0000 0000 |
| SIO_INTERP0_BASE0 | 0x88 | База 0 интерполятора: прибавляется к результату полосы 0 | 0x0000 0000 |
| SIO_INTERP0_BASE1 | 0x8C | База 1 интерполятора: прибавляется к результату полосы 1 | 0x0000 0000 |
| SIO_INTERP0_BASE2 | 0x90 | База 2 интерполятора: прибавляется к полному результату | 0x0000 0000 |
| SIO_INTERP0_POP_LANE0 | 0x94 | Результат полосы 0 с записью результатов полос в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP0_POP_LANE1 | 0x98 | Результат полосы 1 с записью результатов полос в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP0_POP_FULL | 0x9C | Полный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP0_PEEK_LANE0 | 0xA0 | Результат полосы 0 без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP0_PEEK_LANE1 | 0xA4 | Результат полосы 1 без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP0_PEEK_FULL | 0xA8 | Полный результат без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP0_CTRL_LANE0 | 0xAC | Настройка полосы 0 интерполятора | 0x0000 0000 |
| SIO_INTERP0_CTRL_LANE1 | 0xB0 | Настройка полосы 1 интерполятора | 0x0000 0000 |
| SIO_INTERP0_ACCUM0_ADD | 0xB4 | Атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE0 | 0x0000 0000 |
| SIO_INTERP0_ACCUM1_ADD | 0xB8 | Атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE1 | 0x0000 0000 |
| SIO_INTERP0_BASE_1AND0 | 0xBC | Одновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит) | 0x0000 0000 |
| SIO_INTERP1_ACCUM0 | 0xC0 | Аккумулятор 0 интерполятора | 0x0000 0000 |
| SIO_INTERP1_ACCUM1 | 0xC4 | Аккумулятор 1 интерполятора | 0x0000 0000 |
| SIO_INTERP1_BASE0 | 0xC8 | База 0 интерполятора: прибавляется к результату полосы 0 | 0x0000 0000 |
| SIO_INTERP1_BASE1 | 0xCC | База 1 интерполятора: прибавляется к результату полосы 1 | 0x0000 0000 |
| SIO_INTERP1_BASE2 | 0xD0 | База 2 интерполятора: прибавляется к полному результату | 0x0000 0000 |
| SIO_INTERP1_POP_LANE0 | 0xD4 | Результат полосы 0 с записью результатов полос в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP1_POP_LANE1 | 0xD8 | Результат полосы 1 с записью результатов полос в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP1_POP_FULL | 0xDC | Полный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP) | 0x0000 0000 |
| SIO_INTERP1_PEEK_LANE0 | 0xE0 | Результат полосы 0 без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP1_PEEK_LANE1 | 0xE4 | Результат полосы 1 без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP1_PEEK_FULL | 0xE8 | Полный результат без изменения состояния (PEEK) | 0x0000 0000 |
| SIO_INTERP1_CTRL_LANE0 | 0xEC | Настройка полосы 0 интерполятора | 0x0000 0000 |
| SIO_INTERP1_CTRL_LANE1 | 0xF0 | Настройка полосы 1 интерполятора | 0x0000 0000 |
| SIO_INTERP1_ACCUM0_ADD | 0xF4 | Атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE0 | 0x0000 0000 |
| SIO_INTERP1_ACCUM1_ADD | 0xF8 | Атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE1 | 0x0000 0000 |
| SIO_INTERP1_BASE_1AND0 | 0xFC | Одновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит) | 0x0000 0000 |
| SIO_SPINLOCKn | 0x0100 + n · 0x04 | Спинлок n: чтение захватывает (не 0 — захвачен, 0 — уже занят), запись освобождает | 0x0000 0000 |
| SIO_DOORBELL_OUT_SET | 0x0180 | Позвонить другому ядру: бит ставит его флаг в DOORBELL_IN; чтение — отправленные флаги | 0x0000 0000 |
| SIO_DOORBELL_OUT_CLR | 0x0184 | Сброс флагов, отправленных другому ядру, — для отладки и начальной настройки | 0x0000 0000 |
| SIO_DOORBELL_IN_SET | 0x0188 | Позвонить себе; чтение — флаги этого ядра | 0x0000 0000 |
| SIO_DOORBELL_IN_CLR | 0x018C | Флаги этого ядра: чтение показывает, запись 1 подтверждает и сбрасывает | 0x0000 0000 |
| SIO_PERI_NONSEC | 0x0190 | Передача интерполяторов и кодера TMDS незащищённому SIO | 0x0000 0000 |
| SIO_RISCV_SOFTIRQ | 0x01A0 | Программные прерывания ядер RISC-V (MIP.MSIP) | 0x0000 0000 |
| SIO_MTIME_CTRL | 0x01A4 | Таймер платформы RISC-V: управление | 0x0000 000D |
| SIO_MTIME | 0x01B0 | Таймер платформы RISC-V: младшие 32 бита | 0x0000 0000 |
| SIO_MTIMEH | 0x01B4 | Таймер платформы RISC-V: старшие 32 бита | 0x0000 0000 |
| SIO_MTIMECMP | 0x01B8 | Сравнение для прерывания таймера этого ядра: младшие 32 бита | 0xFFFF FFFF |
| SIO_MTIMECMPH | 0x01BC | Сравнение для прерывания таймера этого ядра: старшие 32 бита | 0xFFFF FFFF |
| SIO_TMDS_CTRL | 0x01C0 | Кодер TMDS: формат пикселей | 0x0000 0000 |
| SIO_TMDS_WDATA | 0x01C4 | Кодер TMDS: запись 32 бит цветовых данных | 0x0000 0000 |
| SIO_TMDS_PEEK_SINGLE | 0x01C8 | Кодер TMDS: символы одного пикселя без сдвига данных | 0x0000 0000 |
| SIO_TMDS_POP_SINGLE | 0x01CC | Кодер TMDS: символы одного пикселя со сдвигом данных | 0x0000 0000 |
| SIO_TMDS_PEEK_DOUBLE_Ln | 0x01D0 + n · 0x08 | Кодер TMDS: линия n для двух пикселей без сдвига данных | 0x0000 0000 |
| SIO_TMDS_POP_DOUBLE_Ln | 0x01D4 + n · 0x08 | Кодер TMDS: линия n для двух пикселей со сдвигом данных | 0x0000 0000 |
SIO_CPUID — номер ядра, которое читает регистр: 0 или 1
Смещение 0x00, адрес 0xD000 0000, после сброса не определено, только чтение. Макросы pico-sdk: SIO_CPUID_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_IN — состояние входов GPIO0–31; в незащищённом SIO защищённые выводы читаются как 0
Смещение 0x04, адрес 0xD000 0004, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_GPIO_IN_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_IN — состояние входов GPIO32–47, линий USB и выводов QSPI
Смещение 0x08, адрес 0xD000 0008, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_IN_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только чтение, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только чтение, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только чтение, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только чтение, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только чтение, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только чтение, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OUT — выходные уровни GPIO0–31; чтение возвращает записанное, а не уровни на выводах
Смещение 0x10, адрес 0xD000 0010, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_GPIO_OUT_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OUT — выходные уровни GPIO32–47, линий USB и выводов QSPI
Смещение 0x14, адрес 0xD000 0014, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OUT_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, чтение и запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, чтение и запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, чтение и запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, чтение и запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, чтение и запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, чтение и запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OUT_SET — атомарная установка битов GPIO_OUT
Смещение 0x18, адрес 0xD000 0018, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OUT_SET_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OUT_SET — атомарная установка битов GPIO_HI_OUT
Смещение 0x1C, адрес 0xD000 001C, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OUT_SET_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OUT_CLR — атомарный сброс битов GPIO_OUT
Смещение 0x20, адрес 0xD000 0020, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OUT_CLR_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OUT_CLR — атомарный сброс битов GPIO_HI_OUT
Смещение 0x24, адрес 0xD000 0024, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OUT_CLR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OUT_XOR — атомарная инверсия битов GPIO_OUT
Смещение 0x28, адрес 0xD000 0028, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OUT_XOR_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OUT_XOR — атомарная инверсия битов GPIO_HI_OUT
Смещение 0x2C, адрес 0xD000 002C, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OUT_XOR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OE — разрешение выходов GPIO0–31: 1 — выход, 0 — высокий импеданс
Смещение 0x30, адрес 0xD000 0030, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_GPIO_OE_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OE — разрешение выходов GPIO32–47, линий USB и выводов QSPI
Смещение 0x34, адрес 0xD000 0034, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OE_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, чтение и запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, чтение и запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, чтение и запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, чтение и запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, чтение и запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, чтение и запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OE_SET — атомарная установка битов GPIO_OE
Смещение 0x38, адрес 0xD000 0038, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OE_SET_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OE_SET — атомарная установка битов GPIO_HI_OE
Смещение 0x3C, адрес 0xD000 003C, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OE_SET_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OE_CLR — атомарный сброс битов GPIO_OE
Смещение 0x40, адрес 0xD000 0040, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OE_CLR_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OE_CLR — атомарный сброс битов GPIO_HI_OE
Смещение 0x44, адрес 0xD000 0044, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OE_CLR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_GPIO_OE_XOR — атомарная инверсия битов GPIO_OE
Смещение 0x48, адрес 0xD000 0048, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_GPIO_OE_XOR_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_GPIO_HI_OE_XOR — атомарная инверсия битов GPIO_HI_OE
Смещение 0x4C, адрес 0xD000 004C, после сброса 0x0000 0000. Макросы pico-sdk: SIO_GPIO_HI_OE_XOR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| QSPI_SD | QSPI_CSN | QSPI_SCK | USB_DM | USB_DP | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| GPIO | |||||||||||||||
- QSPI_SD (биты 31:28, только запись, после сброса 0x0) — Выводы QSPI SD0–SD3.
- QSPI_CSN (бит 27, только запись, после сброса 0x0) — Вывод QSPI CSn.
- QSPI_SCK (бит 26, только запись, после сброса 0x0) — Вывод QSPI SCK.
- USB_DM (бит 25, только запись, после сброса 0x0) — Линия USB DM.
- USB_DP (бит 24, только запись, после сброса 0x0) — Линия USB DP.
- GPIO (биты 15:0, только запись, после сброса 0x0000) — GPIO32–47: бит на вывод.
SIO_FIFO_ST — состояние FIFO между ядрами
Смещение 0x50, адрес 0xD000 0050, после сброса 0x0000 0002. Макросы pico-sdk: SIO_FIFO_ST_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ROE | WOF | RDY | VLD | |||||||||||
- ROE (бит 3, сброс записью 1, после сброса 0x0) — Было чтение из пустой входящей FIFO, оно проигнорировано; сбрасывается записью в FIFO_ST.
- WOF (бит 2, сброс записью 1, после сброса 0x0) — Была запись в полную исходящую FIFO, она проигнорирована; сбрасывается записью в FIFO_ST.
- RDY (бит 1, только чтение, после сброса 0x1) — В исходящей FIFO есть место для записи.
- VLD (бит 0, только чтение, после сброса 0x0) — Во входящей FIFO есть данные.
SIO_FIFO_WR — запись в исходящую FIFO этого ядра
Смещение 0x54, адрес 0xD000 0054, после сброса 0x0000 0000, запись с побочным действием. Макросы pico-sdk: SIO_FIFO_WR_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_FIFO_RD — чтение из входящей FIFO этого ядра
Смещение 0x58, адрес 0xD000 0058, после сброса не определено, чтение с побочным действием. Макросы pico-sdk: SIO_FIFO_RD_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_SPINLOCK_ST — состояние всех 32 спинлоков, 1 — занят; для отладки
Смещение 0x5C, адрес 0xD000 005C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_SPINLOCK_ST_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_ACCUM0 — аккумулятор 0 интерполятора
Смещение 0x80, адрес 0xD000 0080, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_ACCUM0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_ACCUM1 — аккумулятор 1 интерполятора
Смещение 0x84, адрес 0xD000 0084, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_ACCUM1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_BASE0 — база 0 интерполятора: прибавляется к результату полосы 0
Смещение 0x88, адрес 0xD000 0088, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_BASE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_BASE1 — база 1 интерполятора: прибавляется к результату полосы 1
Смещение 0x8C, адрес 0xD000 008C, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_BASE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_BASE2 — база 2 интерполятора: прибавляется к полному результату
Смещение 0x90, адрес 0xD000 0090, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_BASE2_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_POP_LANE0 — результат полосы 0 с записью результатов полос в аккумуляторы (POP)
Смещение 0x94, адрес 0xD000 0094, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_POP_LANE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_POP_LANE1 — результат полосы 1 с записью результатов полос в аккумуляторы (POP)
Смещение 0x98, адрес 0xD000 0098, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_POP_LANE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_POP_FULL — полный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP)
Смещение 0x9C, адрес 0xD000 009C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_POP_FULL_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_PEEK_LANE0 — результат полосы 0 без изменения состояния (PEEK)
Смещение 0xA0, адрес 0xD000 00A0, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_PEEK_LANE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_PEEK_LANE1 — результат полосы 1 без изменения состояния (PEEK)
Смещение 0xA4, адрес 0xD000 00A4, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_PEEK_LANE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_PEEK_FULL — полный результат без изменения состояния (PEEK)
Смещение 0xA8, адрес 0xD000 00A8, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP0_PEEK_FULL_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP0_CTRL_LANE0 — настройка полосы 0 интерполятора
Смещение 0xAC, адрес 0xD000 00AC, после сброса 0x0000 0000. Макросы pico-sdk: SIO_INTERP0_CTRL_LANE0_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | OVERF | OVERF1 | OVERF0 | — | BLEND | FORCE_MSB | ADD_RAW | CROSS_RESULT | CROSS_INPUT | ||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SIGNED | MASK_MSB | MASK_LSB | SHIFT | ||||||||||||
- OVERF (бит 25, только чтение, после сброса 0x0) — Установлен OVERF0 или OVERF1.
- OVERF1 (бит 24, только чтение, после сброса 0x0) — В ACCUM1 есть единицы в старших битах, отрезанных маской.
- OVERF0 (бит 23, только чтение, после сброса 0x0) — В ACCUM0 есть единицы в старших битах, отрезанных маской.
- BLEND (бит 21, чтение и запись, после сброса 0x0) — Режим смешивания (только INTERP0): PEEK1 и POP1 — линейная интерполяция между BASE0 и BASE1 по 8 младшим битам результата полосы 1, PEEK0 и POP0 — сам этот коэффициент.
- FORCE_MSB (биты 20:19, чтение и запись, после сброса 0x0) — Добавляется по ИЛИ в биты 29:28 результата полосы при чтении; удобно для указателей во флеш-память или SRAM.
- ADD_RAW (бит 18, чтение и запись, после сброса 0x0) — Результат полосы — аккумулятор без сдвига и маски; на полный результат не влияет.
- CROSS_RESULT (бит 17, чтение и запись, после сброса 0x0) — При POP в аккумулятор этой полосы записывается результат другой полосы.
- CROSS_INPUT (бит 16, чтение и запись, после сброса 0x0) — На сдвиг и маску этой полосы подаётся аккумулятор другой полосы; действует и при ADD_RAW.
- SIGNED (бит 15, чтение и запись, после сброса 0x0) — Знаковое расширение значения после маски до 32 бит перед сложением с базой своей полосы.
- MASK_MSB (биты 14:10, чтение и запись, после сброса 0x00) — Старший бит маски включительно, 0–31.
- MASK_LSB (биты 9:5, чтение и запись, после сброса 0x00) — Младший бит маски включительно, 0–31.
- SHIFT (биты 4:0, чтение и запись, после сброса 0x00) — Логический сдвиг аккумулятора вправо перед маской, 0–31 бит.
SIO_INTERP0_CTRL_LANE1 — настройка полосы 1 интерполятора
Смещение 0xB0, адрес 0xD000 00B0, после сброса 0x0000 0000. Макросы pico-sdk: SIO_INTERP0_CTRL_LANE1_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | FORCE_MSB | ADD_RAW | CROSS_RESULT | CROSS_INPUT | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SIGNED | MASK_MSB | MASK_LSB | SHIFT | ||||||||||||
- FORCE_MSB (биты 20:19, чтение и запись, после сброса 0x0) — Добавляется по ИЛИ в биты 29:28 результата полосы при чтении; удобно для указателей во флеш-память или SRAM.
- ADD_RAW (бит 18, чтение и запись, после сброса 0x0) — Результат полосы — аккумулятор без сдвига и маски; на полный результат не влияет.
- CROSS_RESULT (бит 17, чтение и запись, после сброса 0x0) — При POP в аккумулятор этой полосы записывается результат другой полосы.
- CROSS_INPUT (бит 16, чтение и запись, после сброса 0x0) — На сдвиг и маску этой полосы подаётся аккумулятор другой полосы; действует и при ADD_RAW.
- SIGNED (бит 15, чтение и запись, после сброса 0x0) — Знаковое расширение значения после маски до 32 бит перед сложением с базой своей полосы.
- MASK_MSB (биты 14:10, чтение и запись, после сброса 0x00) — Старший бит маски включительно, 0–31.
- MASK_LSB (биты 9:5, чтение и запись, после сброса 0x00) — Младший бит маски включительно, 0–31.
- SHIFT (биты 4:0, чтение и запись, после сброса 0x00) — Логический сдвиг аккумулятора вправо перед маской, 0–31 бит.
SIO_INTERP0_ACCUM0_ADD — атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE0
Смещение 0xB4, адрес 0xD000 00B4, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_ACCUM0_ADD_…
Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.
SIO_INTERP0_ACCUM1_ADD — атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE1
Смещение 0xB8, адрес 0xD000 00B8, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP0_ACCUM1_ADD_…
Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.
SIO_INTERP0_BASE_1AND0 — одновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит)
Смещение 0xBC, адрес 0xD000 00BC, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_INTERP0_BASE_1AND0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_ACCUM0 — аккумулятор 0 интерполятора
Смещение 0xC0, адрес 0xD000 00C0, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_ACCUM0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_ACCUM1 — аккумулятор 1 интерполятора
Смещение 0xC4, адрес 0xD000 00C4, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_ACCUM1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_BASE0 — база 0 интерполятора: прибавляется к результату полосы 0
Смещение 0xC8, адрес 0xD000 00C8, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_BASE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_BASE1 — база 1 интерполятора: прибавляется к результату полосы 1
Смещение 0xCC, адрес 0xD000 00CC, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_BASE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_BASE2 — база 2 интерполятора: прибавляется к полному результату
Смещение 0xD0, адрес 0xD000 00D0, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_BASE2_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_POP_LANE0 — результат полосы 0 с записью результатов полос в аккумуляторы (POP)
Смещение 0xD4, адрес 0xD000 00D4, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_POP_LANE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_POP_LANE1 — результат полосы 1 с записью результатов полос в аккумуляторы (POP)
Смещение 0xD8, адрес 0xD000 00D8, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_POP_LANE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_POP_FULL — полный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP)
Смещение 0xDC, адрес 0xD000 00DC, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_POP_FULL_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_PEEK_LANE0 — результат полосы 0 без изменения состояния (PEEK)
Смещение 0xE0, адрес 0xD000 00E0, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_PEEK_LANE0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_PEEK_LANE1 — результат полосы 1 без изменения состояния (PEEK)
Смещение 0xE4, адрес 0xD000 00E4, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_PEEK_LANE1_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_PEEK_FULL — полный результат без изменения состояния (PEEK)
Смещение 0xE8, адрес 0xD000 00E8, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: SIO_INTERP1_PEEK_FULL_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_INTERP1_CTRL_LANE0 — настройка полосы 0 интерполятора
Смещение 0xEC, адрес 0xD000 00EC, после сброса 0x0000 0000. Макросы pico-sdk: SIO_INTERP1_CTRL_LANE0_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | OVERF | OVERF1 | OVERF0 | CLAMP | — | FORCE_MSB | ADD_RAW | CROSS_RESULT | CROSS_INPUT | ||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SIGNED | MASK_MSB | MASK_LSB | SHIFT | ||||||||||||
- OVERF (бит 25, только чтение, после сброса 0x0) — Установлен OVERF0 или OVERF1.
- OVERF1 (бит 24, только чтение, после сброса 0x0) — В ACCUM1 есть единицы в старших битах, отрезанных маской.
- OVERF0 (бит 23, только чтение, после сброса 0x0) — В ACCUM0 есть единицы в старших битах, отрезанных маской.
- CLAMP (бит 22, чтение и запись, после сброса 0x0) — Режим ограничения (только INTERP1): PEEK0 и POP0 — результат полосы 0, ограниченный снизу BASE0 и сверху BASE1; знаковость сравнения задаёт SIGNED.
- FORCE_MSB (биты 20:19, чтение и запись, после сброса 0x0) — Добавляется по ИЛИ в биты 29:28 результата полосы при чтении; удобно для указателей во флеш-память или SRAM.
- ADD_RAW (бит 18, чтение и запись, после сброса 0x0) — Результат полосы — аккумулятор без сдвига и маски; на полный результат не влияет.
- CROSS_RESULT (бит 17, чтение и запись, после сброса 0x0) — При POP в аккумулятор этой полосы записывается результат другой полосы.
- CROSS_INPUT (бит 16, чтение и запись, после сброса 0x0) — На сдвиг и маску этой полосы подаётся аккумулятор другой полосы; действует и при ADD_RAW.
- SIGNED (бит 15, чтение и запись, после сброса 0x0) — Знаковое расширение значения после маски до 32 бит перед сложением с базой своей полосы.
- MASK_MSB (биты 14:10, чтение и запись, после сброса 0x00) — Старший бит маски включительно, 0–31.
- MASK_LSB (биты 9:5, чтение и запись, после сброса 0x00) — Младший бит маски включительно, 0–31.
- SHIFT (биты 4:0, чтение и запись, после сброса 0x00) — Логический сдвиг аккумулятора вправо перед маской, 0–31 бит.
SIO_INTERP1_CTRL_LANE1 — настройка полосы 1 интерполятора
Смещение 0xF0, адрес 0xD000 00F0, после сброса 0x0000 0000. Макросы pico-sdk: SIO_INTERP1_CTRL_LANE1_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | FORCE_MSB | ADD_RAW | CROSS_RESULT | CROSS_INPUT | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SIGNED | MASK_MSB | MASK_LSB | SHIFT | ||||||||||||
- FORCE_MSB (биты 20:19, чтение и запись, после сброса 0x0) — Добавляется по ИЛИ в биты 29:28 результата полосы при чтении; удобно для указателей во флеш-память или SRAM.
- ADD_RAW (бит 18, чтение и запись, после сброса 0x0) — Результат полосы — аккумулятор без сдвига и маски; на полный результат не влияет.
- CROSS_RESULT (бит 17, чтение и запись, после сброса 0x0) — При POP в аккумулятор этой полосы записывается результат другой полосы.
- CROSS_INPUT (бит 16, чтение и запись, после сброса 0x0) — На сдвиг и маску этой полосы подаётся аккумулятор другой полосы; действует и при ADD_RAW.
- SIGNED (бит 15, чтение и запись, после сброса 0x0) — Знаковое расширение значения после маски до 32 бит перед сложением с базой своей полосы.
- MASK_MSB (биты 14:10, чтение и запись, после сброса 0x00) — Старший бит маски включительно, 0–31.
- MASK_LSB (биты 9:5, чтение и запись, после сброса 0x00) — Младший бит маски включительно, 0–31.
- SHIFT (биты 4:0, чтение и запись, после сброса 0x00) — Логический сдвиг аккумулятора вправо перед маской, 0–31 бит.
SIO_INTERP1_ACCUM0_ADD — атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE0
Смещение 0xF4, адрес 0xD000 00F4, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_ACCUM0_ADD_…
Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.
SIO_INTERP1_ACCUM1_ADD — атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE1
Смещение 0xF8, адрес 0xD000 00F8, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_INTERP1_ACCUM1_ADD_…
Отдельных полей нет: значение занимает биты 23:0, остальные биты не используются.
SIO_INTERP1_BASE_1AND0 — одновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит)
Смещение 0xFC, адрес 0xD000 00FC, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_INTERP1_BASE_1AND0_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_SPINLOCKn — спинлок n: чтение захватывает (не 0 — захвачен, 0 — уже занят), запись освобождает
32 регистра, n = 0…31: смещение 0x0100 + n · 0x04, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_SPINLOCKn_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_DOORBELL_OUT_SET — позвонить другому ядру: бит ставит его флаг в DOORBELL_IN; чтение — отправленные флаги
Смещение 0x0180, адрес 0xD000 0180, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_DOORBELL_OUT_SET_…
Отдельных полей нет: значение занимает биты 7:0, остальные биты не используются.
SIO_DOORBELL_OUT_CLR — сброс флагов, отправленных другому ядру, — для отладки и начальной настройки
Смещение 0x0184, адрес 0xD000 0184, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: SIO_DOORBELL_OUT_CLR_…
Отдельных полей нет: значение занимает биты 7:0, остальные биты не используются.
SIO_DOORBELL_IN_SET — позвонить себе; чтение — флаги этого ядра
Смещение 0x0188, адрес 0xD000 0188, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_DOORBELL_IN_SET_…
Отдельных полей нет: значение занимает биты 7:0, остальные биты не используются.
SIO_DOORBELL_IN_CLR — флаги этого ядра: чтение показывает, запись 1 подтверждает и сбрасывает
Смещение 0x018C, адрес 0xD000 018C, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: SIO_DOORBELL_IN_CLR_…
Отдельных полей нет: значение занимает биты 7:0, остальные биты не используются.
SIO_PERI_NONSEC — передача интерполяторов и кодера TMDS незащищённому SIO
Смещение 0x0190, адрес 0xD000 0190, после сброса 0x0000 0000. Макросы pico-sdk: SIO_PERI_NONSEC_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TMDS | — | INTERP1 | INTERP0 | |||||||||||
- TMDS (бит 5, чтение и запись, после сброса 0x0) — Отдать кодер TMDS этого ядра незащищённому SIO.
- INTERP1 (бит 1, чтение и запись, после сброса 0x0) — Отдать интерполятор 1 этого ядра незащищённому SIO.
- INTERP0 (бит 0, чтение и запись, после сброса 0x0) — Отдать интерполятор 0 этого ядра незащищённому SIO.
SIO_RISCV_SOFTIRQ — программные прерывания ядер RISC-V (MIP.MSIP)
Смещение 0x01A0, адрес 0xD000 01A0, после сброса 0x0000 0000. Макросы pico-sdk: SIO_RISCV_SOFTIRQ_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CORE1_CLR | CORE0_CLR | — | CORE1_SET | CORE0_SET | ||||||||||
- CORE1_CLR (бит 9, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает программное прерывание ядра 1; чтение — его состояние.
- CORE0_CLR (бит 8, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает программное прерывание ядра 0; чтение — его состояние.
- CORE1_SET (бит 1, чтение и запись, после сброса 0x0) — Запись 1 устанавливает программное прерывание ядра 1; чтение — его состояние.
- CORE0_SET (бит 0, чтение и запись, после сброса 0x0) — Запись 1 устанавливает программное прерывание ядра 0; чтение — его состояние.
SIO_MTIME_CTRL — таймер платформы RISC-V: управление
Смещение 0x01A4, адрес 0xD000 01A4, после сброса 0x0000 000D. Макросы pico-sdk: SIO_MTIME_CTRL_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | DBGPAUSE_CORE1 | DBGPAUSE_CORE0 | FULLSPEED | EN | |||||||||||
- DBGPAUSE_CORE1 (бит 3, чтение и запись, после сброса 0x1) — Останавливать таймер, пока ядро 1 остановлено отладчиком.
- DBGPAUSE_CORE0 (бит 2, чтение и запись, после сброса 0x1) — Останавливать таймер, пока ядро 0 остановлено отладчиком.
- FULLSPEED (бит 1, чтение и запись, после сброса 0x0) — Считать такты clk_sys вместо тиков из блока TICKS.
- EN (бит 0, чтение и запись, после сброса 0x1) — Включение счёта.
SIO_MTIME — таймер платформы RISC-V: младшие 32 бита
Смещение 0x01B0, адрес 0xD000 01B0, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_MTIME_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_MTIMEH — таймер платформы RISC-V: старшие 32 бита
Смещение 0x01B4, адрес 0xD000 01B4, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: SIO_MTIMEH_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_MTIMECMP — сравнение для прерывания таймера этого ядра: младшие 32 бита
Смещение 0x01B8, адрес 0xD000 01B8, после сброса 0xFFFF FFFF, чтение и запись. Макросы pico-sdk: SIO_MTIMECMP_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_MTIMECMPH — сравнение для прерывания таймера этого ядра: старшие 32 бита
Смещение 0x01BC, адрес 0xD000 01BC, после сброса 0xFFFF FFFF, чтение и запись. Макросы pico-sdk: SIO_MTIMECMPH_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_TMDS_CTRL — кодер TMDS: формат пикселей
Смещение 0x01C0, адрес 0xD000 01C0, после сброса 0x0000 0000. Макросы pico-sdk: SIO_TMDS_CTRL_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | CLEAR_BALANCE | PIX2_NOSHIFT | PIX_SHIFT | INTERLEAVE | — | L2_NBITS | L1_NBITS | ||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| L1_NBITS | L0_NBITS | L2_ROT | L1_ROT | L0_ROT | |||||||||||
- CLEAR_BALANCE (бит 28, сбрасывается сам, после сброса 0x0) — Сброс накопленного баланса постоянной составляющей; записывают в начале каждой строки.
- PIX2_NOSHIFT (бит 27, чтение и запись, после сброса 0x0) — При кодировании двух пикселей второй видит те же данные, а не сдвинутые, — для удвоения пикселей.
- PIX_SHIFT (биты 26:24, чтение и запись, после сброса 0x0) — Сдвиг цветовых данных при каждом чтении регистра POP.
Значение Имя в pico-sdk Что значит 0x0 0 Не сдвигать 0x1 1 Сдвиг на 1 бит 0x2 2 Сдвиг на 2 бита 0x3 4 Сдвиг на 4 бита 0x4 8 Сдвиг на 8 бит 0x5 16 Сдвиг на 16 бит - INTERLEAVE (бит 23, чтение и запись, после сброса 0x0) — Чередовать биты трёх линий в PEEK_SINGLE и POP_SINGLE.
- Ln_NBITS, n = 0…2 (биты 14:12, 17:15, 20:18; чтение и запись, после сброса 0x0) — Значащих старших бит цвета линии n: 1–8, коды 0–7.
- Ln_ROT, n = 0…2 (биты 3:0, 7:4, 11:8; чтение и запись, после сброса 0x0) — Циклический сдвиг вправо 16 младших бит перед кодером линии n, 0–15 бит.
SIO_TMDS_WDATA — кодер TMDS: запись 32 бит цветовых данных
Смещение 0x01C4, адрес 0xD000 01C4, после сброса 0x0000 0000, только запись. Макросы pico-sdk: SIO_TMDS_WDATA_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_TMDS_PEEK_SINGLE — кодер TMDS: символы одного пикселя без сдвига данных
Смещение 0x01C8, адрес 0xD000 01C8, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: SIO_TMDS_PEEK_SINGLE_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_TMDS_POP_SINGLE — кодер TMDS: символы одного пикселя со сдвигом данных
Смещение 0x01CC, адрес 0xD000 01CC, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: SIO_TMDS_POP_SINGLE_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_TMDS_PEEK_DOUBLE_Ln — кодер TMDS: линия n для двух пикселей без сдвига данных
3 регистра, n = 0…2: смещение 0x01D0 + n · 0x08, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: SIO_TMDS_PEEK_DOUBLE_Ln_…
Значение занимает регистр целиком, отдельных полей нет.
SIO_TMDS_POP_DOUBLE_Ln — кодер TMDS: линия n для двух пикселей со сдвигом данных
3 регистра, n = 0…2: смещение 0x01D4 + n · 0x08, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: SIO_TMDS_POP_DOUBLE_Ln_…
Значение занимает регистр целиком, отдельных полей нет.
Частые вопросы
Чем колокольчики SIO RP2350 отличаются от FIFO?
FIFO передаёт слова по порядку, и важно каждое сообщение. Колокольчик — флаг: ядро ставит бит в DOORBELL_OUT_SET, у другого ядра поднимается прерывание SIO_IRQ_BELL, и оно читает DOORBELL_IN_CLR, а записью подтверждает. Повторные звонки до подтверждения сливаются в один.
Где на RP2350 аппаратный делитель SIO?
Его нет: ядра Cortex-M33 и Hazard3 делят сами, поэтому адреса делителя в SIO зарезервированы. Код для RP2040, который обращается к регистрам DIV_… напрямую, переписывают на обычное деление.
Как прочитать 64-битный таймер RISC-V из SIO RP2350?
Прочитайте MTIMEH, затем MTIME, затем снова MTIMEH; если старшие половины разные, повторите. Сравнение для прерывания пишут так: все единицы в MTIMECMP, затем старшую половину в MTIMECMPH, затем младшую в MTIMECMP — без ложных прерываний.
Источники
- Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 3.1.11: список регистров, назначение полей, тип доступа и значения после сброса
- 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
- BUSCTRL — управление шинойBUSCTRL_BUS_PRIORITY, BUSCTRL_BUS_PRIORITY_ACK, BUSCTRL_PERFCTR_EN, BUSCTRL_PERFCTRn, BUSCTRL_PERFSELn
- 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
- 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
Статьи и термины
- GPIOВывод общего назначения: вход и выход, подтяжки, сила выхода, функции
- ПрерываниеЗапрос периферии, вектор и обработчик прерывания
- RP2350: выводы и функции GPIO30 или 48 GPIO: выводы QFN-60 и QFN-80, функции F0–F11, АЦП, 5 В, токи
- RP2040 и RP2350RP2040 и RP2350: ядра, память, GPIO, PIO, АЦП, 5 В на выводах, эрраты