Code: Select all
#!/usr/bin/python3
from time import sleep_ms
from rp2 import asm_pio, StateMachine
@asm_pio()
def pio_prog_wrap():
wrap_target()
mov (isr, y)
push(block)
wrap()
@asm_pio()
def pio_prog_loop():
label('Loop')
mov (isr, y)
push(block)
jmp('Loop')
# prepare eight state machines
sm = []
for i in range(8):
sm.append(StateMachine(i))
print(sm[i])
sm[i].init(pio_prog_loop) # use either the one with loop (both are OK)
# sm[i].init(pio_prog_wrap) # or the one with wrap
sm[i].exec(f'set(y, {10+i})') # give each sm individual data to return
sm[i].active(True)
def see_what_we_get():
for x in range(10):
gotdata = False
for i in range(8):
if sm[i].rx_fifo() > 0:
print(f'sm[{i}]:{sm[i].get()}', end=' ')
gotdata = True
print()
if not gotdata:
sleep_ms(100)
print()
see_what_we_get()
for i in range(8):
sm[i].restart()
see_what_we_get()
Code: Select all
~/tmp$ picorun testpio.py
StateMachine(0)
StateMachine(1)
StateMachine(2)
StateMachine(3)
StateMachine(4)
StateMachine(5)
StateMachine(6)
StateMachine(7)
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[1]:11 sm[2]:12 sm[3]:13 sm[4]:14 sm[5]:15 sm[6]:16 sm[7]:17
sm[0]:10 sm[4]:14
sm[0]:10 sm[4]:14
sm[0]:10 sm[4]:14
sm[0]:10 sm[4]:14
sm[0]:10 sm[4]:14
sm[0]:10 sm[4]:14