← index #16579Issue #16609
Related · high · value 2.246
QUERY · ISSUE

rp2: asm_pio_encode() sideset/delay faulty logic

openby melberiopened 2025-01-13updated 2026-03-19
bugport-rp2

Port, board and/or hardware

RP2040

MicroPython version

MicroPython v1.24.1 on 2024-11-29; Raspberry Pi Pico with RP2040

Reproduction

In a PIO instruction, 5 bits are reserved for sideset/delay. Using one or more sideset pins reduces the amount of bits left for delay. However, the asm_pio_encode() complains about delay too large with the following invocation:

rp2.asm_pio_encode('mov(x,y).side(1) [7]', 2, sideset_opt=True)

The second argument to the function is sideset count and is inclusive of the sideset enable bit which is required when sideset is optional. In this example two bits are reserved for sideset purposes and three are left for delay allowing a maximum of 7.

Expected behaviour

The function is expected to return 48930 equivalent to 0b1011111100100010.

Note the sideset/delay in bits 8-12 (counting up from 0), 11111, with the two most significant bits being the sideset enable and the actual sideset bit and the rest of the bits signifying a delay value of 7.

Observed behaviour

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "rp2.py", line 298, in asm_pio_encode
File "<string>", line 1, in <module>
File "rp2.py", line 79, in getitem
File "rp2.py", line 84, in delay
PIOASMError: delay too large

Additional Information

I came across this bug when figuring out why the asm_pio_encode() function would not seem to work correctly with sideset count equal to 1 while sideset_opt=True.

The documentation did not mention about sideset count being inclusive of sideset enable bit. That information was found in the codebase as a comment. It follows from the SIDESET_COUNT count in SM#_PINCTRL register of RP2040 where the sideset enable bit is included in the count.

Code of Conduct

Yes, I agree

CANDIDATE · ISSUE

TypeError: unexpected keyword argument 'sideset_count'

closedby sidd-kishanopened 2025-01-19updated 2025-01-19
bug

Port, board and/or hardware

rp2

MicroPython version

MicroPython v1.24.1 on 2024-11-29; Pi Pico Board

Reproduction

`import rp2

Define the PIO program

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_HIGH, autopush=True, push_thresh=32, sideset_count=3)
def pio_program():
wait(0,gpio,5).side(7)

print("Hello World")
`

Expected behaviour

Expected to print "Hello World"

Observed behaviour

This unexpected error occurs: -

TypeError: unexpected keyword argument 'sideset_count'

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied