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

Регистры PIO RP2350

Регистры трёх блоков PIO RP2350: всё, что было у RP2040, плюс одновременный запуск автоматов соседних блоков, сдвиг окна выводов GPIOBASE, маска входов IN_COUNT, прямой доступ к ячейкам FIFO приёма и все восемь флагов IRQ на прерываниях.

В RP2350 три блока PIO — PIO0, PIO1 и PIO2 по адресам 0x5020 0000, 0x5030 0000 и 0x5040 0000, в каждом четыре автомата состояний и память на 32 команды. Регистры те же, что у RP2040, с дополнениями; поле VERSION регистра DBG_CFGINFO читается как 1, у RP2040 там 0 (даташит RP2350, раздел 11.1.1).

Блок PIO по-прежнему видит 32 GPIO, но GPIOBASE = 16 сдвигает окно на GPIO16–47 — так автоматы достают выводы корпуса QFN-80. Биты NEXT_PIO_MASK и PREV_PIO_MASK регистра CTRL вместе с NEXTPREV_SM_ENABLE, NEXTPREV_SM_DISABLE и NEXTPREV_CLKDIV_RESTART запускают, останавливают и синхронизируют автоматы соседних блоков одной записью. IN_COUNT обнуляет лишние входные выводы в IN PINS, WAIT PIN и MOV x, PINS.

Новые режимы FIFO: при FJOIN_RX_PUT автомат пишет в произвольные ячейки FIFO приёма, а система читает их через RXFn_PUTGETm — так делают регистры состояния; при FJOIN_RX_GET наоборот — система пишет, автомат читает, как регистры управления. Прерывания IRQ0 и IRQ1 получают все восемь флагов IRQ, а MOV x, STATUS умеет проверять флаг IRQ.

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

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

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

РегистрСмещениеНазначениеПосле сброса
PIO_CTRL0x00Включение и перезапуск автоматов и их делителей0x0000 0000
PIO_FSTAT0x04Состояние FIFO: пустые и заполненные0x0F00 0F00
PIO_FDEBUG0x08Ошибки FIFO и остановки автоматов0x0000 0000
PIO_FLEVEL0x0CЧисло слов в FIFO каждого автомата0x0000 0000
PIO_TXFn0x10 + n · 0x04FIFO передачи автомата n: запись слова0x0000 0000
PIO_RXFn0x20 + n · 0x04FIFO приёма автомата n: чтение словане определено
PIO_IRQ0x30Флаги IRQ автоматов; сброс записью 10x0000 0000
PIO_IRQ_FORCE0x34Принудительная установка флагов IRQ0x0000 0000
PIO_INPUT_SYNC_BYPASS0x38Обход синхронизаторов входов GPIO0x0000 0000
PIO_DBG_PADOUT0x3CТекущие уровни выходов PIO на GPIO0x0000 0000
PIO_DBG_PADOE0x40Текущие разрешения выходов PIO на GPIO0x0000 0000
PIO_DBG_CFGINFO0x44Параметры блока: память команд, автоматы, FIFO0x1000 0000
PIO_INSTR_MEMn0x48 + n · 0x04Ячейка n памяти команд0x0000 0000
PIO_SMn_CLKDIV0xC8 + n · 0x18Делитель частоты автомата n0x0001 0000
PIO_SMn_EXECCTRL0xCC + n · 0x18Исполнение: обёртка, JMP PIN, side-set, STATUS0x0001 F000
PIO_SMn_SHIFTCTRL0xD0 + n · 0x18Сдвиговые регистры, автоматические PUSH и PULL, объединение FIFO0x000C 0000
PIO_SMn_ADDR0xD4 + n · 0x18Текущий адрес команды автомата n0x0000 0000
PIO_SMn_INSTR0xD8 + n · 0x18Текущая команда; запись выполняет команду сразуне определено
PIO_SMn_PINCTRL0xDC + n · 0x18Назначение выводов автомата n0x1400 0000
PIO_RXF0_PUTGET00x0128Ячейка 0 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF0_PUTGET10x012CЯчейка 1 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF0_PUTGET20x0130Ячейка 2 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF0_PUTGET30x0134Ячейка 3 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF1_PUTGET00x0138Ячейка 0 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF1_PUTGET10x013CЯчейка 1 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF1_PUTGET20x0140Ячейка 2 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF1_PUTGET30x0144Ячейка 3 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF2_PUTGET00x0148Ячейка 0 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF2_PUTGET10x014CЯчейка 1 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF2_PUTGET20x0150Ячейка 2 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF2_PUTGET30x0154Ячейка 3 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF3_PUTGET00x0158Ячейка 0 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF3_PUTGET10x015CЯчейка 1 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF3_PUTGET20x0160Ячейка 2 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_RXF3_PUTGET30x0164Ячейка 3 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET0x0000 0000
PIO_GPIOBASE0x0168Начало окна из 32 GPIO для блока: 0 или 160x0000 0000
PIO_INTR0x016CНеобработанные флаги прерываний0x0000 0000
PIO_IRQ0_INTE0x0170Разрешение прерываний на выходе IRQ00x0000 0000
PIO_IRQ0_INTF0x0174Принудительная установка прерываний на выходе IRQ00x0000 0000
PIO_IRQ0_INTS0x0178Прерывания на выходе IRQ0 после маски0x0000 0000
PIO_IRQ1_INTE0x017CРазрешение прерываний на выходе IRQ10x0000 0000
PIO_IRQ1_INTF0x0180Принудительная установка прерываний на выходе IRQ10x0000 0000
PIO_IRQ1_INTS0x0184Прерывания на выходе IRQ1 после маски0x0000 0000

PIO_CTRL — включение и перезапуск автоматов и их делителей

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

31302928272625242322212019181716
—NEXTPREV_CLKDIV_RESTARTNEXTPREV_SM_DISABLENEXTPREV_SM_ENABLENEXT_PIO_MASKPREV_PIO_MASK
1514131211109876543210
—CLKDIV_RESTARTSM_RESTARTSM_ENABLE
  • NEXTPREV_CLKDIV_RESTART (бит 26, сбрасывается сам, после сброса 0x0) — Перезапустить делители автоматов соседних блоков из NEXT_PIO_MASK и PREV_PIO_MASK той же записи.
  • NEXTPREV_SM_DISABLE (бит 25, сбрасывается сам, после сброса 0x0) — Остановить автоматы соседних блоков из NEXT_PIO_MASK и PREV_PIO_MASK той же записи.
  • NEXTPREV_SM_ENABLE (бит 24, сбрасывается сам, после сброса 0x0) — Запустить автоматы соседних блоков из NEXT_PIO_MASK и PREV_PIO_MASK той же записи.
  • NEXT_PIO_MASK (биты 23:20, сбрасывается сам, после сброса 0x0) — Автоматы следующего по номеру блока PIO (после последнего — PIO0).
  • PREV_PIO_MASK (биты 19:16, сбрасывается сам, после сброса 0x0) — Автоматы предыдущего по номеру блока PIO (перед PIO0 — последний).
  • CLKDIV_RESTART (биты 11:8, сбрасывается сам, после сброса 0x0) — Перезапуск делителей частоты автоматов с нулевой фазы; одновременный перезапуск делает работу автоматов синхронной.
  • SM_RESTART (биты 7:4, сбрасывается сам, после сброса 0x0) — Сброс внутреннего состояния автоматов: счётчики сдвигов, входной регистр, задержка, ожидание IRQ; счётчик команд, X, Y и выходной регистр не меняются.
  • SM_ENABLE (биты 3:0, чтение и запись, после сброса 0x0) — Включение автоматов: по биту на автомат; можно запускать и останавливать несколько сразу.

PIO_FSTAT — состояние FIFO: пустые и заполненные

Смещение 0x04, после сброса 0x0F00 0F00. Макросы pico-sdk: PIO_FSTAT_…

31302928272625242322212019181716
—TXEMPTY—TXFULL
1514131211109876543210
—RXEMPTY—RXFULL
  • TXEMPTY (биты 27:24, только чтение, после сброса 0xF) — FIFO передачи автомата пусто: по биту на автомат.
  • TXFULL (биты 19:16, только чтение, после сброса 0x0) — FIFO передачи автомата заполнено.
  • RXEMPTY (биты 11:8, только чтение, после сброса 0xF) — FIFO приёма автомата пусто.
  • RXFULL (биты 3:0, только чтение, после сброса 0x0) — FIFO приёма автомата заполнено.

PIO_FDEBUG — ошибки FIFO и остановки автоматов

Смещение 0x08, после сброса 0x0000 0000. Макросы pico-sdk: PIO_FDEBUG_…

31302928272625242322212019181716
—TXSTALL—TXOVER
1514131211109876543210
—RXUNDER—RXSTALL
  • TXSTALL (биты 27:24, сброс записью 1, после сброса 0x0) — Автомат остановился на пустом FIFO передачи при PULL или OUT с автоматическим PULL; сброс записью 1.
  • TXOVER (биты 19:16, сброс записью 1, после сброса 0x0) — Запись в заполненное FIFO передачи: слово потеряно; сброс записью 1.
  • RXUNDER (биты 11:8, сброс записью 1, после сброса 0x0) — Чтение из пустого FIFO приёма: прочитано неопределённое значение; сброс записью 1.
  • RXSTALL (биты 3:0, сброс записью 1, после сброса 0x0) — Автомат остановился на заполненном FIFO приёма при PUSH или IN с автоматическим PUSH, либо неблокирующий PUSH потерял данные; сброс записью 1.

PIO_FLEVEL — число слов в FIFO каждого автомата

Смещение 0x0C, после сброса 0x0000 0000. Макросы pico-sdk: PIO_FLEVEL_…

31302928272625242322212019181716
RX3TX3RX2TX2
1514131211109876543210
RX1TX1RX0TX0
  • RXn, n = 0…3 (биты 7:4, 15:12, 23:20, 31:28; только чтение, после сброса 0x0) — Число слов в FIFO приёма автомата n.
  • TXn, n = 0…3 (биты 3:0, 11:8, 19:16, 27:24; только чтение, после сброса 0x0) — Число слов в FIFO передачи автомата n.

PIO_TXFn — fIFO передачи автомата n: запись слова

4 регистра, n = 0…3: смещение 0x10 + n · 0x04, после сброса 0x0000 0000, запись с побочным действием. Макросы pico-sdk: PIO_TXFn_…

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

PIO_RXFn — fIFO приёма автомата n: чтение слова

4 регистра, n = 0…3: смещение 0x20 + n · 0x04, после сброса не определено, чтение с побочным действием. Макросы pico-sdk: PIO_RXFn_…

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

PIO_IRQ — флаги IRQ автоматов; сброс записью 1

Смещение 0x30, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: PIO_IRQ_…

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

PIO_IRQ_FORCE — принудительная установка флагов IRQ

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

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

PIO_INPUT_SYNC_BYPASS — обход синхронизаторов входов GPIO

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

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

PIO_DBG_PADOUT — текущие уровни выходов PIO на GPIO

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

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

PIO_DBG_PADOE — текущие разрешения выходов PIO на GPIO

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

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

PIO_DBG_CFGINFO — параметры блока: память команд, автоматы, FIFO

Смещение 0x44, после сброса 0x1000 0000. Макросы pico-sdk: PIO_DBG_CFGINFO_…

31302928272625242322212019181716
VERSION—IMEM_SIZE
1514131211109876543210
—SM_COUNT—FIFO_DEPTH
  • VERSION (биты 31:28, только чтение, после сброса 0x1) — Версия PIO: 1 у RP2350, 0 у RP2040.
    ЗначениеИмя в pico-sdkЧто значит
    0x0v0Версия 0 — RP2040
    0x1v1Версия 1 — RP2350
  • IMEM_SIZE (биты 21:16, только чтение, после сброса не определено) — Размер памяти команд в инструкциях.
  • SM_COUNT (биты 11:8, только чтение, после сброса не определено) — Число автоматов в блоке.
  • FIFO_DEPTH (биты 5:0, только чтение, после сброса не определено) — Глубина FIFO автомата в словах; при объединении — вдвое больше.

PIO_INSTR_MEMn — ячейка n памяти команд

32 регистра, n = 0…31: смещение 0x48 + n · 0x04, после сброса 0x0000 0000, только запись. Макросы pico-sdk: PIO_INSTR_MEMn_…

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

PIO_SMn_CLKDIV — делитель частоты автомата n

4 регистра, n = 0…3: смещение 0xC8 + n · 0x18, после сброса 0x0001 0000. Макросы pico-sdk: PIO_SMn_CLKDIV_…

31302928272625242322212019181716
INT
1514131211109876543210
FRAC—
  • INT (биты 31:16, чтение и запись, после сброса 0x0001) — Целая часть делителя; 0 означает 65 536, и тогда FRAC тоже 0.
  • FRAC (биты 15:8, чтение и запись, после сброса 0x00) — Дробная часть делителя в 1/256.

PIO_SMn_EXECCTRL — исполнение: обёртка, JMP PIN, side-set, STATUS

4 регистра, n = 0…3: смещение 0xCC + n · 0x18, после сброса 0x0001 F000. Макросы pico-sdk: PIO_SMn_EXECCTRL_…

31302928272625242322212019181716
EXEC_STALLEDSIDE_ENSIDE_PINDIRJMP_PINOUT_EN_SELINLINE_OUT_ENOUT_STICKYWRAP_TOP
1514131211109876543210
WRAP_TOPWRAP_BOTTOMSTATUS_SELSTATUS_N
  • EXEC_STALLED (бит 31, только чтение, после сброса 0x0) — Команда, записанная в SMn_INSTR, ещё ждёт выполнения.
  • SIDE_EN (бит 30, чтение и запись, после сброса 0x0) — Старший бит поля задержки и side-set включает side-set в каждой команде отдельно; наибольшая ширина side-set — 4 бита.
  • SIDE_PINDIR (бит 29, чтение и запись, после сброса 0x0) — Side-set меняет направление выводов, а не их уровень.
  • JMP_PIN (биты 28:24, чтение и запись, после сброса 0x00) — Номер GPIO для условия JMP PIN.
  • OUT_EN_SEL (биты 23:19, чтение и запись, после сброса 0x00) — Какой бит данных OUT служит разрешением записи на выводы.
  • INLINE_OUT_EN (бит 18, чтение и запись, после сброса 0x0) — Использовать бит данных OUT как дополнительное разрешение записи на выводы.
  • OUT_STICKY (бит 17, чтение и запись, после сброса 0x0) — Постоянно держать на выводах последнее значение OUT или SET.
  • WRAP_TOP (биты 16:12, чтение и запись, после сброса 0x1F) — Адрес конца обёртки: после этой команды выполнение переходит на WRAP_BOTTOM, если только команда — не выполненный переход.
  • WRAP_BOTTOM (биты 11:7, чтение и запись, после сброса 0x00) — Адрес начала обёртки.
  • STATUS_SEL (биты 6:5, чтение и запись, после сброса 0x0) — Что проверяет MOV x, STATUS: уровень FIFO передачи, приёма или флаг IRQ.
    ЗначениеИмя в pico-sdkЧто значит
    0x0txlevelВсе единицы, если в FIFO передачи меньше N слов
    0x1rxlevelВсе единицы, если в FIFO приёма меньше N слов
    0x2irqВсе единицы, если установлен флаг IRQ с номером N
  • STATUS_N (биты 4:0, чтение и запись, после сброса 0x00) — Уровень FIFO или номер флага IRQ для MOV x, STATUS.
    ЗначениеИмя в pico-sdkЧто значит
    0x0irqФлаг IRQ 0–7 своего блока
    0x8irq_prevpioФлаг IRQ 0–7 предыдущего блока PIO
    0x10irq_nextpioФлаг IRQ 0–7 следующего блока PIO

PIO_SMn_SHIFTCTRL — сдвиговые регистры, автоматические PUSH и PULL, объединение FIFO

4 регистра, n = 0…3: смещение 0xD0 + n · 0x18, после сброса 0x000C 0000. Макросы pico-sdk: PIO_SMn_SHIFTCTRL_…

31302928272625242322212019181716
FJOIN_RXFJOIN_TXPULL_THRESHPUSH_THRESHOUT_SHIFTDIRIN_SHIFTDIRAUTOPULLAUTOPUSH
1514131211109876543210
FJOIN_RX_PUTFJOIN_RX_GET—IN_COUNT
  • FJOIN_RX (бит 31, чтение и запись, после сброса 0x0) — Объединить FIFO в одно FIFO приёма двойной глубины; FIFO передачи отключается, FIFO очищаются при изменении бита.
  • FJOIN_TX (бит 30, чтение и запись, после сброса 0x0) — Объединить FIFO в одно FIFO передачи двойной глубины; FIFO приёма отключается, FIFO очищаются при изменении бита.
  • PULL_THRESH (биты 29:25, чтение и запись, после сброса 0x00) — Сколько бит выдвигается из OSR до автоматического или условного PULL; 0 — 32.
  • PUSH_THRESH (биты 24:20, чтение и запись, после сброса 0x00) — Сколько бит вдвигается в ISR до автоматического или условного PUSH; 0 — 32.
  • OUT_SHIFTDIR (бит 19, чтение и запись, после сброса 0x1) — Направление сдвига выходного регистра: 1 — вправо, 0 — влево.
  • IN_SHIFTDIR (бит 18, чтение и запись, после сброса 0x1) — Направление сдвига входного регистра: 1 — вправо, данные входят слева; 0 — влево.
  • AUTOPULL (бит 17, чтение и запись, после сброса 0x0) — Автоматический PULL, когда из выходного регистра выдвинуто PULL_THRESH бит.
  • AUTOPUSH (бит 16, чтение и запись, после сброса 0x0) — Автоматический PUSH, когда во входной регистр вдвинуто PUSH_THRESH бит.
  • FJOIN_RX_PUT (бит 15, чтение и запись, после сброса 0x0) — Отключить FIFO приёма: автомат пишет в его ячейки командой PUT, система читает через RXFn_PUTGETm.
  • FJOIN_RX_GET (бит 14, чтение и запись, после сброса 0x0) — Отключить FIFO приёма: автомат читает его ячейки командой GET, система пишет через RXFn_PUTGETm.
  • IN_COUNT (биты 4:0, чтение и запись, после сброса 0x00) — Сколько входных выводов не обнуляется в IN PINS, WAIT PIN и MOV x, PINS.

PIO_SMn_ADDR — текущий адрес команды автомата n

4 регистра, n = 0…3: смещение 0xD4 + n · 0x18, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: PIO_SMn_ADDR_…

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

PIO_SMn_INSTR — текущая команда; запись выполняет команду сразу

4 регистра, n = 0…3: смещение 0xD8 + n · 0x18, после сброса не определено, чтение и запись. Макросы pico-sdk: PIO_SMn_INSTR_…

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

PIO_SMn_PINCTRL — назначение выводов автомата n

4 регистра, n = 0…3: смещение 0xDC + n · 0x18, после сброса 0x1400 0000. Макросы pico-sdk: PIO_SMn_PINCTRL_…

31302928272625242322212019181716
SIDESET_COUNTSET_COUNTOUT_COUNTIN_BASE
1514131211109876543210
IN_BASESIDESET_BASESET_BASEOUT_BASE
  • SIDESET_COUNT (биты 31:29, чтение и запись, после сброса 0x0) — Сколько старших бит поля задержки и side-set отдано side-set, включая бит SIDE_EN: от 0 до 5.
  • SET_COUNT (биты 28:26, чтение и запись, после сброса 0x5) — Сколько выводов меняет SET: от 0 до 5.
  • OUT_COUNT (биты 25:20, чтение и запись, после сброса 0x00) — Сколько выводов меняют OUT PINS, OUT PINDIRS и MOV PINS: от 0 до 32.
  • IN_BASE (биты 19:15, чтение и запись, после сброса 0x00) — Вывод, который попадает в младший бит данных IN; следующие выводы — в старшие.
  • SIDESET_BASE (биты 14:10, чтение и запись, после сброса 0x00) — Первый вывод группы side-set.
  • SET_BASE (биты 9:5, чтение и запись, после сброса 0x00) — Первый вывод группы SET.
  • OUT_BASE (биты 4:0, чтение и запись, после сброса 0x00) — Первый вывод группы OUT и MOV PINS.

PIO_RXF0_PUTGET0 — ячейка 0 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF0_PUTGET1 — ячейка 1 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF0_PUTGET2 — ячейка 2 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF0_PUTGET3 — ячейка 3 FIFO приёма автомата 0 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF1_PUTGET0 — ячейка 0 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF1_PUTGET1 — ячейка 1 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF1_PUTGET2 — ячейка 2 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF1_PUTGET3 — ячейка 3 FIFO приёма автомата 1 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF2_PUTGET0 — ячейка 0 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF2_PUTGET1 — ячейка 1 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF2_PUTGET2 — ячейка 2 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF2_PUTGET3 — ячейка 3 FIFO приёма автомата 2 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF3_PUTGET0 — ячейка 0 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF3_PUTGET1 — ячейка 1 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF3_PUTGET2 — ячейка 2 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET

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

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

PIO_RXF3_PUTGET3 — ячейка 3 FIFO приёма автомата 3 — прямой доступ в режимах PUT и GET

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

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

PIO_GPIOBASE — начало окна из 32 GPIO для блока: 0 или 16

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

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

PIO_INTR — необработанные флаги прерываний

Смещение 0x016C, после сброса 0x0000 0000. Макросы pico-sdk: PIO_INTR_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; только чтение, после сброса 0x0) — Флаг IRQ n автоматов установлен.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; только чтение, после сброса 0x0) — В FIFO передачи автомата n есть место.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; только чтение, после сброса 0x0) — В FIFO приёма автомата n есть данные.

PIO_IRQ0_INTE — разрешение прерываний на выходе IRQ0

Смещение 0x0170, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ0_INTE_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; чтение и запись, после сброса 0x0) — Разрешение прерывания по флагу IRQ n на выходе IRQ0.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; чтение и запись, после сброса 0x0) — Разрешение прерывания на выходе IRQ0: в FIFO передачи автомата n есть место.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; чтение и запись, после сброса 0x0) — Разрешение прерывания на выходе IRQ0: в FIFO приёма автомата n есть данные.

PIO_IRQ0_INTF — принудительная установка прерываний на выходе IRQ0

Смещение 0x0174, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ0_INTF_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; чтение и запись, после сброса 0x0) — Принудительное прерывание по флагу IRQ n на выходе IRQ0.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; чтение и запись, после сброса 0x0) — Принудительное прерывание FIFO передачи автомата n на выходе IRQ0.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; чтение и запись, после сброса 0x0) — Принудительное прерывание FIFO приёма автомата n на выходе IRQ0.

PIO_IRQ0_INTS — прерывания на выходе IRQ0 после маски

Смещение 0x0178, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ0_INTS_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; только чтение, после сброса 0x0) — Прерывание по флагу IRQ n на выходе IRQ0 после маски.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; только чтение, после сброса 0x0) — Прерывание FIFO передачи автомата n на выходе IRQ0 после маски.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; только чтение, после сброса 0x0) — Прерывание FIFO приёма автомата n на выходе IRQ0 после маски.

PIO_IRQ1_INTE — разрешение прерываний на выходе IRQ1

Смещение 0x017C, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ1_INTE_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; чтение и запись, после сброса 0x0) — Разрешение прерывания по флагу IRQ n на выходе IRQ1.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; чтение и запись, после сброса 0x0) — Разрешение прерывания на выходе IRQ1: в FIFO передачи автомата n есть место.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; чтение и запись, после сброса 0x0) — Разрешение прерывания на выходе IRQ1: в FIFO приёма автомата n есть данные.

PIO_IRQ1_INTF — принудительная установка прерываний на выходе IRQ1

Смещение 0x0180, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ1_INTF_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; чтение и запись, после сброса 0x0) — Принудительное прерывание по флагу IRQ n на выходе IRQ1.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; чтение и запись, после сброса 0x0) — Принудительное прерывание FIFO передачи автомата n на выходе IRQ1.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; чтение и запись, после сброса 0x0) — Принудительное прерывание FIFO приёма автомата n на выходе IRQ1.

PIO_IRQ1_INTS — прерывания на выходе IRQ1 после маски

Смещение 0x0184, после сброса 0x0000 0000. Макросы pico-sdk: PIO_IRQ1_INTS_…

1514131211109876543210
SM7SM6SM5SM4SM3SM2SM1SM0SM3_TXNFULLSM2_TXNFULLSM1_TXNFULLSM0_TXNFULLSM3_RXNEMPTYSM2_RXNEMPTYSM1_RXNEMPTYSM0_RXNEMPTY
  • SMn, n = 0…7 (биты 8, 9, 10, 11, 12, 13, 14, 15; только чтение, после сброса 0x0) — Прерывание по флагу IRQ n на выходе IRQ1 после маски.
  • SMn_TXNFULL, n = 0…3 (биты 4, 5, 6, 7; только чтение, после сброса 0x0) — Прерывание FIFO передачи автомата n на выходе IRQ1 после маски.
  • SMn_RXNEMPTY, n = 0…3 (биты 0, 1, 2, 3; только чтение, после сброса 0x0) — Прерывание FIFO приёма автомата n на выходе IRQ1 после маски.

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

Как PIO RP2350 работает с GPIO32–47?

Каждый блок видит 32 вывода подряд: запишите 16 в GPIOBASE, и выводы автомата 0–31 будут соответствовать GPIO16–47. Кроме 0 и 16, другие значения не поддерживаются — записывается только бит 4.

Как синхронно запустить автоматы в разных блоках PIO RP2350?

Одной записью в CTRL одного блока: укажите автоматы соседних блоков в NEXT_PIO_MASK и PREV_PIO_MASK и установите NEXTPREV_SM_ENABLE. Бит NEXTPREV_CLKDIV_RESTART так же перезапускает их делители частоты в одной фазе.

Зачем режимы FJOIN_RX_PUT и FJOIN_RX_GET?

Они превращают четыре ячейки FIFO приёма в регистры с произвольным доступом: при PUT автомат пишет, а процессор читает через RXFn_PUTGETm — получаются регистры состояния; при GET процессор пишет, а автомат читает — регистры управления. Если включить оба, доступ остаётся только у автомата.

Источники

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

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

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

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