This is the v1.24.0 version of the MicroPython documentation. The latest development version of this page may be more current.

class PIO – advanced PIO usage

The PIO class gives access to an instance of the RP2040’s PIO (programmable I/O) interface.

The preferred way to interact with PIO is using rp2.StateMachine, the PIO class is for advanced use.

For assembling PIO programs, see rp2.asm_pio().

Constructors

class rp2.PIO(id)

Gets the PIO instance numbered id. The RP2040 has two PIO instances, numbered 0 and 1.

Raises a ValueError if any other argument is provided.

Methods

PIO.gpio_base([base])

Query and optionally set the current GPIO base for this PIO instance.

If an argument is given then it must be a pin (or integer corresponding to a pin number), restricted to either GPIO0 or GPIO16. The GPIO base will then be set to that pin. Setting the GPIO base must be done before any programs are added or state machines created.

Returns the current GPIO base pin.

PIO.add_program(program)

Add the program to the instruction memory of this PIO instance.

The amount of memory available for programs on each PIO instance is limited. If there isn’t enough space left in the PIO’s program memory this method will raise OSError(ENOMEM).

PIO.remove_program([program])

Remove program from the instruction memory of this PIO instance.

If no program is provided, it removes all programs.

It is not an error to remove a program which has already been removed.

PIO.state_machine(id[, program, ...])

Gets the state machine numbered id. On the RP2040, each PIO instance has four state machines, numbered 0 to 3.

Optionally initialize it with a program: see StateMachine.init.

>>> rp2.PIO(1).state_machine(3)
StateMachine(7)
PIO.irq(handler=None, trigger=IRQ_SM0 | IRQ_SM1 | IRQ_SM2 | IRQ_SM3, hard=False)

Returns the IRQ object for this PIO instance.

MicroPython only uses IRQ 0 on each PIO instance. IRQ 1 is not available.

Optionally configure it.

Constants

PIO.IN_LOW
PIO.IN_HIGH
PIO.OUT_LOW
PIO.OUT_HIGH

These constants are used for the out_init, set_init, and sideset_init arguments to asm_pio.

PIO.SHIFT_LEFT
PIO.SHIFT_RIGHT

These constants are used for the in_shiftdir and out_shiftdir arguments to asm_pio or StateMachine.init.

PIO.JOIN_NONE
PIO.JOIN_TX
PIO.JOIN_RX

These constants are used for the fifo_join argument to asm_pio.

PIO.IRQ_SM0
PIO.IRQ_SM1
PIO.IRQ_SM2
PIO.IRQ_SM3

These constants are used for the trigger argument to PIO.irq.