Adafruit_CircuitPython_PIOASM/examples/pico-examples/blink.py
2021-02-25 16:08:42 -06:00

43 lines
1.1 KiB
Python

# SPDX-FileCopyrightText: 2021 Jeff Epler, written for Adafruit Industries
#
# SPDX-License-Identifier: MIT
#
# Adapted from the example https://github.com/raspberrypi/pico-examples/tree/master/pio/pio_blink
import array
import time
import board
import rp2pio
import adafruit_pioasm
blink = adafruit_pioasm.assemble(
"""
.program blink
pull block ; These two instructions take the blink duration
out y, 32 ; and store it in y
forever:
mov x, y
set pins, 1 ; Turn LED on
lp1:
jmp x-- lp1 ; Delay for (x + 1) cycles, x is a 32 bit number
mov x, y
set pins, 0 ; Turn LED off
lp2:
jmp x-- lp2 ; Delay for the same number of cycles again
jmp forever ; Blink forever!
"""
)
while True:
for freq in [5, 8, 30]:
with rp2pio.StateMachine(
blink,
frequency=125_000_000,
first_set_pin=board.LED,
wait_for_txstall=False,
) as sm:
data = array.array("I", [sm.frequency // freq])
sm.write(data)
time.sleep(3)
time.sleep(0.5)