861fbf6ab5
These files all use decorators (@asm_thumb, @asm_pio) that add names to the function scope, that the linter cannot see. It's useful to clear them in the file not in pyproject.toml as example code will be copied and adapted elsewhere, and those developers may also use Ruff (we hope!) Signed-off-by: Angus Gratton <angus@redyak.com.au>
40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
# Example using PIO to blink an LED and raise an IRQ at 1Hz.
|
|
# Note: this does not work on Pico W because it uses Pin(25) for LED output.
|
|
|
|
# ruff: noqa: F821 - @asm_pio decorator adds names to function scope
|
|
|
|
import time
|
|
from machine import Pin
|
|
import rp2
|
|
|
|
|
|
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
|
|
def blink_1hz():
|
|
# fmt: off
|
|
# Cycles: 1 + 1 + 6 + 32 * (30 + 1) = 1000
|
|
irq(rel(0))
|
|
set(pins, 1)
|
|
set(x, 31) [5]
|
|
label("delay_high")
|
|
nop() [29]
|
|
jmp(x_dec, "delay_high")
|
|
|
|
# Cycles: 1 + 1 + 6 + 32 * (30 + 1) = 1000
|
|
nop()
|
|
set(pins, 0)
|
|
set(x, 31) [5]
|
|
label("delay_low")
|
|
nop() [29]
|
|
jmp(x_dec, "delay_low")
|
|
# fmt: on
|
|
|
|
|
|
# Create the StateMachine with the blink_1hz program, outputting on Pin(25).
|
|
sm = rp2.StateMachine(0, blink_1hz, freq=2000, set_base=Pin(25))
|
|
|
|
# Set the IRQ handler to print the millisecond timestamp.
|
|
sm.irq(lambda p: print(time.ticks_ms()))
|
|
|
|
# Start the StateMachine.
|
|
sm.active(1)
|