diff options
| author | Dan Halbert <halbert@halwitz.org> | 2020-04-21 22:40:12 -0400 |
|---|---|---|
| committer | Dan Halbert <halbert@halwitz.org> | 2020-04-21 22:40:12 -0400 |
| commit | fbc8719fadbffd9b3e4ba1ceb42182c4370d0621 (patch) | |
| tree | a5cc1cda9749f4748786ec86512567d49455fe71 /ports/mimxrt10xx | |
| parent | 77cd93ac2d8ebce240055caf81f1b6bdd7c9bfcc (diff) | |
ringbuf tested
Diffstat (limited to 'ports/mimxrt10xx')
| -rw-r--r-- | ports/mimxrt10xx/common-hal/busio/UART.c | 11 | ||||
| -rw-r--r-- | ports/mimxrt10xx/common-hal/busio/UART.h | 2 |
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; |
