summaryrefslogtreecommitdiff
path: root/ports/mimxrt10xx
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2020-04-21 22:40:12 -0400
committerDan Halbert <halbert@halwitz.org>2020-04-21 22:40:12 -0400
commitfbc8719fadbffd9b3e4ba1ceb42182c4370d0621 (patch)
treea5cc1cda9749f4748786ec86512567d49455fe71 /ports/mimxrt10xx
parent77cd93ac2d8ebce240055caf81f1b6bdd7c9bfcc (diff)
ringbuf tested
Diffstat (limited to 'ports/mimxrt10xx')
-rw-r--r--ports/mimxrt10xx/common-hal/busio/UART.c11
-rw-r--r--ports/mimxrt10xx/common-hal/busio/UART.h2
2 files changed, 6 insertions, 7 deletions
diff --git a/ports/mimxrt10xx/common-hal/busio/UART.c b/ports/mimxrt10xx/common-hal/busio/UART.c
index 399f12e70..e3642daf5 100644
--- a/ports/mimxrt10xx/common-hal/busio/UART.c
+++ b/ports/mimxrt10xx/common-hal/busio/UART.c
@@ -198,9 +198,10 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
claim_pin(self->tx_pin->pin);
if (self->rx_pin != NULL) {
- ringbuf_alloc(&self->rbuf, receiver_buffer_size, true);
+ // The LPUART ring buffer wastes one byte to distinguish between full and empty.
+ self->ringbuf = gc_alloc(receiver_buffer_size + 1, false, true /*long-lived*/);
- if (!self->rbuf.buf) {
+ if (!self->ringbuf) {
LPUART_Deinit(self->uart);
mp_raise_msg(&mp_type_MemoryError, translate("Failed to allocate RX buffer"));
}
@@ -208,7 +209,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
LPUART_TransferCreateHandle(self->uart, &self->handle, LPUART_UserCallback, self);
// Pass actual allocated size; the LPUART routines are cognizant that
// the capacity is one less than the size.
- LPUART_TransferStartRingBuffer(self->uart, &self->handle, self->rbuf.buf, self->rbuf.size);
+ LPUART_TransferStartRingBuffer(self->uart, &self->handle, self->ringbuf, receiver_buffer_size + 1);
claim_pin(self->rx_pin->pin);
}
@@ -225,9 +226,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
LPUART_Deinit(self->uart);
- gc_free(self->rbuf.buf);
- self->rbuf.size = 0;
- self->rbuf.iput = self->rbuf.iget = 0;
+ gc_free(self->ringbuf);
// reset_pin_number(self->rx_pin);
// reset_pin_number(self->tx_pin);
diff --git a/ports/mimxrt10xx/common-hal/busio/UART.h b/ports/mimxrt10xx/common-hal/busio/UART.h
index 9e768db3c..3a326eb3a 100644
--- a/ports/mimxrt10xx/common-hal/busio/UART.h
+++ b/ports/mimxrt10xx/common-hal/busio/UART.h
@@ -40,7 +40,7 @@ typedef struct {
mp_obj_base_t base;
LPUART_Type *uart;
lpuart_handle_t handle;
- ringbuf_t rbuf;
+ uint8_t* ringbuf;
bool rx_ongoing;
uint32_t baudrate;
uint8_t character_bits;