From 81c19d93bc687e2bd953af16c9d779a97e822e5f Mon Sep 17 00:00:00 2001 From: robert-hh Date: Thu, 31 Aug 2023 08:02:32 +0200 Subject: [PATCH] mimxrt/machine_uart: Support slow baud rates for UART. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Down to 50 baud (in reverence to Jean-Maurice-Émile Baudot). Implemented for the MIMXRT10xx MCU's only. The MIMXRT1176 runs down to 300 baud. Signed-off-by: robert-hh --- ports/mimxrt/machine_uart.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ports/mimxrt/machine_uart.c b/ports/mimxrt/machine_uart.c index 02e00c899..ab5d13e08 100644 --- a/ports/mimxrt/machine_uart.c +++ b/ports/mimxrt/machine_uart.c @@ -288,7 +288,18 @@ STATIC mp_obj_t machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args self->timeout_char = min_timeout_char; } - LPUART_Init(self->lpuart, &self->config, BOARD_BOOTCLOCKRUN_UART_CLK_ROOT); + #if defined(MIMXRT117x_SERIES) + // Use the Lpuart1 clock value, which is set for All UART devices. + LPUART_Init(self->lpuart, &self->config, CLOCK_GetRootClockFreq(kCLOCK_Root_Lpuart1)); + #else + // For baud rates < 1000000 divide the clock by 10, supporting baud rates down to 50 baud. + if (self->config.baudRate_Bps > 1000000) { + CLOCK_SetDiv(kCLOCK_UartDiv, 0); + } else { + CLOCK_SetDiv(kCLOCK_UartDiv, 9); + } + LPUART_Init(self->lpuart, &self->config, CLOCK_GetClockRootFreq(kCLOCK_UartClkRoot)); + #endif LPUART_TransferCreateHandle(self->lpuart, &self->handle, LPUART_UserCallback, self); uint8_t *buffer = m_new(uint8_t, rxbuf_len + 1); LPUART_TransferStartRingBuffer(self->lpuart, &self->handle, buffer, rxbuf_len);