From: Francis Guevarra Date: Sat, 23 Nov 2019 22:38:30 +0000 (-0800) Subject: Add uart interface X-Git-Tag: 3.1.0^2~10 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/a6837a9dadf8591684c9c17d82e79ab5441a5180 Add uart interface --- diff --git a/src/adafruit_blinka/board/binho_nova.py b/src/adafruit_blinka/board/binho_nova.py index 430abb3..35dc3a0 100644 --- a/src/adafruit_blinka/board/binho_nova.py +++ b/src/adafruit_blinka/board/binho_nova.py @@ -5,3 +5,6 @@ IO1 = pin.IO1 IO2 = pin.IO2 IO3 = pin.IO3 IO4 = pin.IO4 + +TX = IO4 +RX = IO3 \ No newline at end of file diff --git a/src/adafruit_blinka/microcontroller/nova/pin.py b/src/adafruit_blinka/microcontroller/nova/pin.py index 5a58372..04879e9 100644 --- a/src/adafruit_blinka/microcontroller/nova/pin.py +++ b/src/adafruit_blinka/microcontroller/nova/pin.py @@ -54,4 +54,11 @@ PWM2 = IO2 PWM3 = IO3 PWM4 = IO4 -pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) ) \ No newline at end of file +# orderd as (channel, pin), id +pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) ) + +UART1_TX = IO4 +UART1_RX = IO3 + +# ordered as uartId, txId, rxId +uartPorts = ( (0, UART1_TX, UART1_RX), ) \ No newline at end of file diff --git a/src/adafruit_blinka/microcontroller/nova/uart.py b/src/adafruit_blinka/microcontroller/nova/uart.py new file mode 100644 index 0000000..3bb471a --- /dev/null +++ b/src/adafruit_blinka/microcontroller/nova/uart.py @@ -0,0 +1,65 @@ +import time + +class UART(): + ESCAPE_SEQUENCE = "+++UART0" + def __init__(self, + portid, + baudrate=9600, + bits=8, + parity=None, + stop=1, + timeout=1000, + read_buf_len=None, + flow=None): + from adafruit_blinka.microcontroller.nova import Connection + self._nova = Connection.getInstance() + + self._id = portid + self._baudrate = baudrate + self._parity = parity + self._bits = bits + self._stop = stop + self._timeout = timeout + + if flow is not None: # default 0 + raise NotImplementedError( + "Parameter '{}' unsupported on Binho Nova".format( + "flow")) + + self._nova.setOperationMode(self._id, 'UART') + self._nova.setBaudRateUART(self._id, baudrate) + self._nova.setDataBitsUART(self._id, bits) + self._nova.setParityUART(self._id, parity) + self._nova.setStopBitsUART(self._id, stop) + self._nova.setEscapeSequenceUART(self._id, UART.ESCAPE_SEQUENCE) + self._nova.beginBridgeUART(self._id) + + def deinit(self): + self._nova.writeBridgeUART(UART.ESCAPE_SEQUENCE) + self._nova.stopBridgeUART(UART.ESCAPE_SEQUENCE) + + def read(self, nbytes=None): + if nbytes is None: + return None + data = bytearray() + for i in range(nbytes): + data.append(ord(self._nova.readBridgeUART())) + return data + + def readinto(self, buf, nbytes=None): + if nbytes is None: + return None + for i in range(nbytes): + buf.append(ord(self._nova.readBridgeUART())) + return buf + + def readline(self): + out = self._nova.readBridgeUART() + line = out + while out != '\r': + out = self._nova.readBridgeUART() + line += out + return line + + def write(self, buf): + return self._nova.writeBridgeUART(buf) \ No newline at end of file diff --git a/src/busio.py b/src/busio.py index 8fba573..712d506 100755 --- a/src/busio.py +++ b/src/busio.py @@ -217,9 +217,15 @@ class UART(Lockable): flow=None): if detector.board.any_embedded_linux: raise RuntimeError('busio.UART not supported on this platform. Please use pyserial instead.') + elif detector.board.binho_nova: + from adafruit_blinka.microcontroller.nova.uart import UART as _UART else: from machine import UART as _UART - from microcontroller.pin import uartPorts + + if detector.board.binho_nova: + from adafruit_blinka.microcontroller.nova.pin import uartPorts + else: + from microcontroller.pin import uartPorts self.baudrate = baudrate @@ -257,6 +263,8 @@ class UART(Lockable): ) def deinit(self): + if detector.board.binho_nova: + self._uart.deinit() self._uart = None def read(self, nbytes=None):