Closed
Description
On Adafruit CircuitPython 6.2.0-beta.2-18-g2a467f137 on 2021-02-15
this code spits a RuntimeError: All state machines in use
import time
import board
import rp2pio
import adafruit_pioasm
print("15 second pause in case anything bad happens")
time.sleep(15)
flash_pio_code_2pin = """
.program flash2
set x, 31
onloop:
set pins, 3 [5]
jmp x-- onloop
set y, 31
offloop:
set pins, 0 [5]
jmp y-- offloop
"""
flash_pio_code_3pin = """
.program flash3
set x, 31
onloop:
set pins, 7 [5]
jmp x-- onloop
set y, 31
offloop:
set pins, 0 [5]
jmp y-- offloop
"""
flash_pio_code_4pin = """
.program flash4
set x, 31
onloop:
set pins, 15 [5]
jmp x-- onloop
set y, 31
offloop:
set pins, 0 [5]
jmp y-- offloop
"""
KILLER_THIRD = True
KILLER_FOURTH = False
MIN_FREQUENCY=1908
sm1 = rp2pio.StateMachine(
adafruit_pioasm.assemble(flash_pio_code_2pin),
init=adafruit_pioasm.assemble("set pindirs {:d}".format(2**2 - 1)),
frequency=MIN_FREQUENCY,
first_set_pin=board.GP0,
set_pin_count=2,
)
sm2 = rp2pio.StateMachine(
adafruit_pioasm.assemble(flash_pio_code_2pin),
init=adafruit_pioasm.assemble("set pindirs {:d}".format(2**2 - 1)),
frequency=MIN_FREQUENCY,
first_set_pin=board.GP3,
set_pin_count=2,
)
if KILLER_THIRD:
sm3 = rp2pio.StateMachine(
adafruit_pioasm.assemble(flash_pio_code_3pin),
init=adafruit_pioasm.assemble("set pindirs {:d}".format(2**3 - 1)),
frequency=MIN_FREQUENCY,
first_set_pin=board.GP8,
set_pin_count=3,
)
if KILLER_FOURTH:
sm4 = rp2pio.StateMachine(
adafruit_pioasm.assemble(flash_pio_code_4pin),
init=adafruit_pioasm.assemble("set pindirs {:d}".format(2**4 - 1)),
frequency=MIN_FREQUENCY,
first_set_pin=board.GP11,
set_pin_count=4,
)
time.sleep(30)
Based on discussion in Adafruit Forums: Can RP2040 PIO PULL be used in CircuitPython? this should work either due to code sharing or packing code into shared memory.