rp2: Support for new RP2350 PIO instructions in the `@rp2.asm_pio` assembler
Description
The RP2350 adds several new PIO instructions/options compared to the RP2040 - currently they're not supported by MicroPython's @rp2.asm_pio assembler, so it's difficult to use them under MicroPython.
https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf
The PIO changes are listed in Section 11.1.1. ('Changes from RP2040') - note that the first change is:
DBG_CFGINFO.VERSIONindicates the PIO version, to allow PIO feature detection at runtime.
This 4-bit field was reserved-0 on RP2040 (indicating version 0), and reads as 1 on RP2350.
Specifically I'm interested in the new variants of mov that allow random-access to the FIFO queue with indexed arguments:
- mov rxfifo[y], isr
- mov rxfifo[<index>], isr
- mov osr, rxfifo[y]
- mov osr, rxfifo[<index>]
where:
y: The literal token "y", indicating the RX FIFO entry is indexed by the Y register.<index>: A value (see Section 11.3.2) specifying the RX FIFO entry to write (valid range 0-3).
It's not currently possible to express these with the Micropython mov() assembler function, so far as I'm aware.
Support for the rp2040 was originally added to MicroPython with:
- https://github.com/micropython/micropython/pull/6791
See also:
- https://github.com/raspberrypi/pico-feedback/issues/437
Code Size
Random-access to the FIFO queue is a pretty substantial upgrade for PIO! I really do not know how large/difficult the implementation would be though.
Implementation
I hope the MicroPython maintainers or community will implement this feature
Code of Conduct
Yes, I agree
Support .origin PIO directive
The .origin PIO directive is not supported by @rp2.asm_pio()
This means certain types of PIO programs (ie. anything with a jump table) will fail in an opaque way or require messy workarounds.