42 lines
897 B
Python
42 lines
897 B
Python
"""Sometimes we want to extract a specific bit for
|
|
comparison or testing"""
|
|
"""Shifting a register."""
|
|
import rp2pio
|
|
import adafruit_pioasm
|
|
import array
|
|
|
|
# extracting bit 2
|
|
bit_to_extract = 30
|
|
program = f"""
|
|
.program extract_bit
|
|
pull block
|
|
|
|
; print initial state
|
|
mov isr, osr
|
|
push noblock ; and use PUSH to put it on the receive FIFO
|
|
|
|
; extract - by shifting
|
|
in osr, {bit_to_extract} ; get n bits
|
|
in null, 31 ; keep only 1 bit
|
|
push noblock
|
|
"""
|
|
|
|
assembled = adafruit_pioasm.assemble(program)
|
|
|
|
## set up a statemachine
|
|
sm = rp2pio.StateMachine(
|
|
assembled,
|
|
frequency=2000,
|
|
)
|
|
|
|
|
|
buffer = array.array("I", [0])
|
|
|
|
sm.write(array.array("I", [0b01101000_00000000_00000000_00000000]))
|
|
# read the data
|
|
sm.readinto(buffer)
|
|
print("Initial Y: {0} 0b{0:032b} 0x{0:x}".format(buffer[0]))
|
|
|
|
sm.readinto(buffer)
|
|
print("Y bit extracted: {0} 0b{0:032b} 0x{0:x}".format(buffer[0]))
|