Initial commit
This commit is contained in:
56
BM/softuart.py
Normal file
56
BM/softuart.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from machine import Pin
|
||||
from rp2 import PIO, StateMachine, asm_pio
|
||||
|
||||
|
||||
## ASM
|
||||
@asm_pio(autopush=True, push_thresh=8, in_shiftdir=PIO.SHIFT_RIGHT, fifo_join=PIO.JOIN_RX)
|
||||
def uart_rx_mini():
|
||||
wait(0, pin, 0)
|
||||
set(x, 7) [10]
|
||||
label("bitloop")
|
||||
in_(pins, 1)
|
||||
jmp(x_dec, "bitloop") [6]
|
||||
|
||||
|
||||
@asm_pio(sideset_init=PIO.OUT_HIGH, out_init=PIO.OUT_HIGH, out_shiftdir=PIO.SHIFT_RIGHT)
|
||||
def uart_tx():
|
||||
pull()
|
||||
set(x, 7) .side(0) [7]
|
||||
label("bitloop")
|
||||
out(pins, 1) [6]
|
||||
jmp(x_dec, "bitloop")
|
||||
nop() .side(1) [6]
|
||||
|
||||
|
||||
|
||||
class UART:
|
||||
|
||||
def __init__(self, rx, tx, baudrate, id):
|
||||
self.UART_BAUD = baudrate
|
||||
self.PIO_RX_PIN = Pin(rx, Pin.IN, Pin.PULL_UP)
|
||||
self.PIO_TX_PIN = Pin(tx, Pin.OUT, value=1)
|
||||
self.smrx = StateMachine(id, uart_rx_mini, freq=8*self.UART_BAUD, in_base=self.PIO_RX_PIN, jmp_pin=self.PIO_RX_PIN)
|
||||
self.smrx.active(1)
|
||||
self.smtx = StateMachine(id + 1, uart_tx, freq=8*self.UART_BAUD, sideset_base=self.PIO_TX_PIN, out_base=self.PIO_TX_PIN)
|
||||
self.smtx.active(1)
|
||||
|
||||
def deinit(self):
|
||||
self.smrx.active(0)
|
||||
self.smtx.active(0)
|
||||
|
||||
def write(self,s):
|
||||
#self.smtx.put(bytes(s))
|
||||
self.smtx.put(s)
|
||||
return len(s)
|
||||
|
||||
def read(self):
|
||||
z = []
|
||||
|
||||
for i in range(100):
|
||||
buflen = self.smrx.rx_fifo()
|
||||
|
||||
if buflen:
|
||||
for c in range(buflen):
|
||||
z.append(self.smrx.get() >> 24)
|
||||
|
||||
return bytes(z)
|
||||
Reference in New Issue
Block a user