Skip to content

All state machines in use for more than two PIO on Pi Pico #4237

Closed
@kevinjwalters

Description

@kevinjwalters

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugrp2040Raspberry Pi RP2040

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions