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

Регистры SIO RP2350

Регистры SIO RP2350: быстрое управление GPIO0–47, линиями USB и QSPI, FIFO и колокольчики для обмена между ядрами, 32 спинлока, интерполяторы, 64-битный таймер платформы RISC-V и кодер TMDS — с отдельными банками для защищённого и незащищённого кода.

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 отдаёт их незащищённому.

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

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

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

РегистрСмещениеНазначениеПосле сброса
SIO_CPUID0x00Номер ядра, которое читает регистр: 0 или 1не определено
SIO_GPIO_IN0x04Состояние входов GPIO0–31; в незащищённом SIO защищённые выводы читаются как 00x0000 0000
SIO_GPIO_HI_IN0x08Состояние входов GPIO32–47, линий USB и выводов QSPI0x0000 0000
SIO_GPIO_OUT0x10Выходные уровни GPIO0–31; чтение возвращает записанное, а не уровни на выводах0x0000 0000
SIO_GPIO_HI_OUT0x14Выходные уровни GPIO32–47, линий USB и выводов QSPI0x0000 0000
SIO_GPIO_OUT_SET0x18Атомарная установка битов GPIO_OUT0x0000 0000
SIO_GPIO_HI_OUT_SET0x1CАтомарная установка битов GPIO_HI_OUT0x0000 0000
SIO_GPIO_OUT_CLR0x20Атомарный сброс битов GPIO_OUT0x0000 0000
SIO_GPIO_HI_OUT_CLR0x24Атомарный сброс битов GPIO_HI_OUT0x0000 0000
SIO_GPIO_OUT_XOR0x28Атомарная инверсия битов GPIO_OUT0x0000 0000
SIO_GPIO_HI_OUT_XOR0x2CАтомарная инверсия битов GPIO_HI_OUT0x0000 0000
SIO_GPIO_OE0x30Разрешение выходов GPIO0–31: 1 — выход, 0 — высокий импеданс0x0000 0000
SIO_GPIO_HI_OE0x34Разрешение выходов GPIO32–47, линий USB и выводов QSPI0x0000 0000
SIO_GPIO_OE_SET0x38Атомарная установка битов GPIO_OE0x0000 0000
SIO_GPIO_HI_OE_SET0x3CАтомарная установка битов GPIO_HI_OE0x0000 0000
SIO_GPIO_OE_CLR0x40Атомарный сброс битов GPIO_OE0x0000 0000
SIO_GPIO_HI_OE_CLR0x44Атомарный сброс битов GPIO_HI_OE0x0000 0000
SIO_GPIO_OE_XOR0x48Атомарная инверсия битов GPIO_OE0x0000 0000
SIO_GPIO_HI_OE_XOR0x4CАтомарная инверсия битов GPIO_HI_OE0x0000 0000
SIO_FIFO_ST0x50Состояние FIFO между ядрами0x0000 0002
SIO_FIFO_WR0x54Запись в исходящую FIFO этого ядра0x0000 0000
SIO_FIFO_RD0x58Чтение из входящей FIFO этого ядране определено
SIO_SPINLOCK_ST0x5CСостояние всех 32 спинлоков, 1 — занят; для отладки0x0000 0000
SIO_INTERP0_ACCUM00x80Аккумулятор 0 интерполятора0x0000 0000
SIO_INTERP0_ACCUM10x84Аккумулятор 1 интерполятора0x0000 0000
SIO_INTERP0_BASE00x88База 0 интерполятора: прибавляется к результату полосы 00x0000 0000
SIO_INTERP0_BASE10x8CБаза 1 интерполятора: прибавляется к результату полосы 10x0000 0000
SIO_INTERP0_BASE20x90База 2 интерполятора: прибавляется к полному результату0x0000 0000
SIO_INTERP0_POP_LANE00x94Результат полосы 0 с записью результатов полос в аккумуляторы (POP)0x0000 0000
SIO_INTERP0_POP_LANE10x98Результат полосы 1 с записью результатов полос в аккумуляторы (POP)0x0000 0000
SIO_INTERP0_POP_FULL0x9CПолный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP)0x0000 0000
SIO_INTERP0_PEEK_LANE00xA0Результат полосы 0 без изменения состояния (PEEK)0x0000 0000
SIO_INTERP0_PEEK_LANE10xA4Результат полосы 1 без изменения состояния (PEEK)0x0000 0000
SIO_INTERP0_PEEK_FULL0xA8Полный результат без изменения состояния (PEEK)0x0000 0000
SIO_INTERP0_CTRL_LANE00xACНастройка полосы 0 интерполятора0x0000 0000
SIO_INTERP0_CTRL_LANE10xB0Настройка полосы 1 интерполятора0x0000 0000
SIO_INTERP0_ACCUM0_ADD0xB4Атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE00x0000 0000
SIO_INTERP0_ACCUM1_ADD0xB8Атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE10x0000 0000
SIO_INTERP0_BASE_1AND00xBCОдновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит)0x0000 0000
SIO_INTERP1_ACCUM00xC0Аккумулятор 0 интерполятора0x0000 0000
SIO_INTERP1_ACCUM10xC4Аккумулятор 1 интерполятора0x0000 0000
SIO_INTERP1_BASE00xC8База 0 интерполятора: прибавляется к результату полосы 00x0000 0000
SIO_INTERP1_BASE10xCCБаза 1 интерполятора: прибавляется к результату полосы 10x0000 0000
SIO_INTERP1_BASE20xD0База 2 интерполятора: прибавляется к полному результату0x0000 0000
SIO_INTERP1_POP_LANE00xD4Результат полосы 0 с записью результатов полос в аккумуляторы (POP)0x0000 0000
SIO_INTERP1_POP_LANE10xD8Результат полосы 1 с записью результатов полос в аккумуляторы (POP)0x0000 0000
SIO_INTERP1_POP_FULL0xDCПолный результат BASE2 + полоса 0 + полоса 1 с записью в аккумуляторы (POP)0x0000 0000
SIO_INTERP1_PEEK_LANE00xE0Результат полосы 0 без изменения состояния (PEEK)0x0000 0000
SIO_INTERP1_PEEK_LANE10xE4Результат полосы 1 без изменения состояния (PEEK)0x0000 0000
SIO_INTERP1_PEEK_FULL0xE8Полный результат без изменения состояния (PEEK)0x0000 0000
SIO_INTERP1_CTRL_LANE00xECНастройка полосы 0 интерполятора0x0000 0000
SIO_INTERP1_CTRL_LANE10xF0Настройка полосы 1 интерполятора0x0000 0000
SIO_INTERP1_ACCUM0_ADD0xF4Атомарное прибавление к ACCUM0; чтение — результат сдвига и маски полосы 0 без BASE00x0000 0000
SIO_INTERP1_ACCUM1_ADD0xF8Атомарное прибавление к ACCUM1; чтение — результат сдвига и маски полосы 1 без BASE10x0000 0000
SIO_INTERP1_BASE_1AND00xFCОдновременная запись BASE0 (младшие 16 бит) и BASE1 (старшие 16 бит)0x0000 0000
SIO_SPINLOCKn0x0100 + n · 0x04Спинлок n: чтение захватывает (не 0 — захвачен, 0 — уже занят), запись освобождает0x0000 0000
SIO_DOORBELL_OUT_SET0x0180Позвонить другому ядру: бит ставит его флаг в DOORBELL_IN; чтение — отправленные флаги0x0000 0000
SIO_DOORBELL_OUT_CLR0x0184Сброс флагов, отправленных другому ядру, — для отладки и начальной настройки0x0000 0000
SIO_DOORBELL_IN_SET0x0188Позвонить себе; чтение — флаги этого ядра0x0000 0000
SIO_DOORBELL_IN_CLR0x018CФлаги этого ядра: чтение показывает, запись 1 подтверждает и сбрасывает0x0000 0000
SIO_PERI_NONSEC0x0190Передача интерполяторов и кодера TMDS незащищённому SIO0x0000 0000
SIO_RISCV_SOFTIRQ0x01A0Программные прерывания ядер RISC-V (MIP.MSIP)0x0000 0000
SIO_MTIME_CTRL0x01A4Таймер платформы RISC-V: управление0x0000 000D
SIO_MTIME0x01B0Таймер платформы RISC-V: младшие 32 бита0x0000 0000
SIO_MTIMEH0x01B4Таймер платформы RISC-V: старшие 32 бита0x0000 0000
SIO_MTIMECMP0x01B8Сравнение для прерывания таймера этого ядра: младшие 32 бита0xFFFF FFFF
SIO_MTIMECMPH0x01BCСравнение для прерывания таймера этого ядра: старшие 32 бита0xFFFF FFFF
SIO_TMDS_CTRL0x01C0Кодер TMDS: формат пикселей0x0000 0000
SIO_TMDS_WDATA0x01C4Кодер TMDS: запись 32 бит цветовых данных0x0000 0000
SIO_TMDS_PEEK_SINGLE0x01C8Кодер TMDS: символы одного пикселя без сдвига данных0x0000 0000
SIO_TMDS_POP_SINGLE0x01CCКодер TMDS: символы одного пикселя со сдвигом данных0x0000 0000
SIO_TMDS_PEEK_DOUBLE_Ln0x01D0 + n · 0x08Кодер TMDS: линия n для двух пикселей без сдвига данных0x0000 0000
SIO_TMDS_POP_DOUBLE_Ln0x01D4 + 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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

31302928272625242322212019181716
QSPI_SDQSPI_CSNQSPI_SCKUSB_DMUSB_DP—
1514131211109876543210
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_…

1514131211109876543210
—ROEWOFRDYVLD
  • 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_…

31302928272625242322212019181716
—OVERFOVERF1OVERF0—BLENDFORCE_MSBADD_RAWCROSS_RESULTCROSS_INPUT
1514131211109876543210
SIGNEDMASK_MSBMASK_LSBSHIFT
  • 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_…

31302928272625242322212019181716
—FORCE_MSBADD_RAWCROSS_RESULTCROSS_INPUT
1514131211109876543210
SIGNEDMASK_MSBMASK_LSBSHIFT
  • 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_…

31302928272625242322212019181716
—OVERFOVERF1OVERF0CLAMP—FORCE_MSBADD_RAWCROSS_RESULTCROSS_INPUT
1514131211109876543210
SIGNEDMASK_MSBMASK_LSBSHIFT
  • 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_…

31302928272625242322212019181716
—FORCE_MSBADD_RAWCROSS_RESULTCROSS_INPUT
1514131211109876543210
SIGNEDMASK_MSBMASK_LSBSHIFT
  • 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_…

1514131211109876543210
—TMDS—INTERP1INTERP0
  • 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_…

1514131211109876543210
—CORE1_CLRCORE0_CLR—CORE1_SETCORE0_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_…

1514131211109876543210
—DBGPAUSE_CORE1DBGPAUSE_CORE0FULLSPEEDEN
  • 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_…

31302928272625242322212019181716
—CLEAR_BALANCEPIX2_NOSHIFTPIX_SHIFTINTERLEAVE—L2_NBITSL1_NBITS
1514131211109876543210
L1_NBITSL0_NBITSL2_ROTL1_ROTL0_ROT
  • CLEAR_BALANCE (бит 28, сбрасывается сам, после сброса 0x0) — Сброс накопленного баланса постоянной составляющей; записывают в начале каждой строки.
  • PIX2_NOSHIFT (бит 27, чтение и запись, после сброса 0x0) — При кодировании двух пикселей второй видит те же данные, а не сдвинутые, — для удвоения пикселей.
  • PIX_SHIFT (биты 26:24, чтение и запись, после сброса 0x0) — Сдвиг цветовых данных при каждом чтении регистра POP.
    ЗначениеИмя в pico-sdkЧто значит
    0x00Не сдвигать
    0x11Сдвиг на 1 бит
    0x22Сдвиг на 2 бита
    0x34Сдвиг на 4 бита
    0x48Сдвиг на 8 бит
    0x516Сдвиг на 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 — без ложных прерываний.

Источники

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

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

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

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