From 0701341e7f68b9f0e83c7d61035f5f5f05b8c15b Mon Sep 17 00:00:00 2001 From: robert-hh Date: Tue, 5 Sep 2023 16:29:51 +0200 Subject: [PATCH] mimxrt/machine_uart: Set the UART clock to a fixed 40MHz value. There is a single UART clock for all devices, so switching it for one will affect all devices used at that time. This commit fixes that issue by keeping the clock at a fixed value. This fixed clock still supports the common baud rates between 300 and 921600 baud. Signed-off-by: robert-hh --- ports/mimxrt/boards/MIMXRT1011_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1011_clock_config.h | 2 +- ports/mimxrt/boards/MIMXRT1015_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1015_clock_config.h | 2 +- ports/mimxrt/boards/MIMXRT1021_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1021_clock_config.h | 2 +- ports/mimxrt/boards/MIMXRT1052_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1052_clock_config.h | 2 +- ports/mimxrt/boards/MIMXRT1062_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1062_clock_config.h | 2 +- ports/mimxrt/boards/MIMXRT1064_clock_config.c | 2 +- ports/mimxrt/boards/MIMXRT1064_clock_config.h | 2 +- ports/mimxrt/machine_uart.c | 13 ------------- 13 files changed, 12 insertions(+), 25 deletions(-) diff --git a/ports/mimxrt/boards/MIMXRT1011_clock_config.c b/ports/mimxrt/boards/MIMXRT1011_clock_config.c index cc889d314a..33e1ecfec8 100644 --- a/ports/mimxrt/boards/MIMXRT1011_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1011_clock_config.c @@ -241,7 +241,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart3); CLOCK_DisableClock(kCLOCK_Lpuart4); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable SPDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1011_clock_config.h b/ports/mimxrt/boards/MIMXRT1011_clock_config.h index 76f3df422f..145f3b50cb 100644 --- a/ports/mimxrt/boards/MIMXRT1011_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1011_clock_config.h @@ -71,7 +71,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY_CLK 0UL /*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration. diff --git a/ports/mimxrt/boards/MIMXRT1015_clock_config.c b/ports/mimxrt/boards/MIMXRT1015_clock_config.c index 7cc91f9511..331af4b9e8 100644 --- a/ports/mimxrt/boards/MIMXRT1015_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1015_clock_config.c @@ -257,7 +257,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart3); CLOCK_DisableClock(kCLOCK_Lpuart4); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable SPDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1015_clock_config.h b/ports/mimxrt/boards/MIMXRT1015_clock_config.h index 65944077e5..975ad52e07 100644 --- a/ports/mimxrt/boards/MIMXRT1015_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1015_clock_config.h @@ -74,7 +74,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL /*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration. diff --git a/ports/mimxrt/boards/MIMXRT1021_clock_config.c b/ports/mimxrt/boards/MIMXRT1021_clock_config.c index 1b8792dd2d..f17e73beae 100644 --- a/ports/mimxrt/boards/MIMXRT1021_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1021_clock_config.c @@ -306,7 +306,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart7); CLOCK_DisableClock(kCLOCK_Lpuart8); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable SPDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1021_clock_config.h b/ports/mimxrt/boards/MIMXRT1021_clock_config.h index 21d4e630ae..6f7896bdc3 100644 --- a/ports/mimxrt/boards/MIMXRT1021_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1021_clock_config.h @@ -79,7 +79,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL #define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 176000000UL #define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 176000000UL diff --git a/ports/mimxrt/boards/MIMXRT1052_clock_config.c b/ports/mimxrt/boards/MIMXRT1052_clock_config.c index fa7450d487..bff43ae5e5 100644 --- a/ports/mimxrt/boards/MIMXRT1052_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1052_clock_config.c @@ -311,7 +311,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart7); CLOCK_DisableClock(kCLOCK_Lpuart8); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable LCDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1052_clock_config.h b/ports/mimxrt/boards/MIMXRT1052_clock_config.h index f213ac7e23..358a6f03b3 100644 --- a/ports/mimxrt/boards/MIMXRT1052_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1052_clock_config.h @@ -83,7 +83,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL #define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL #define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL diff --git a/ports/mimxrt/boards/MIMXRT1062_clock_config.c b/ports/mimxrt/boards/MIMXRT1062_clock_config.c index 589ffb0b58..f60797900d 100644 --- a/ports/mimxrt/boards/MIMXRT1062_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1062_clock_config.c @@ -324,7 +324,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart7); CLOCK_DisableClock(kCLOCK_Lpuart8); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable LCDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1062_clock_config.h b/ports/mimxrt/boards/MIMXRT1062_clock_config.h index 0822024847..0a65526646 100644 --- a/ports/mimxrt/boards/MIMXRT1062_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1062_clock_config.h @@ -86,7 +86,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL #define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL #define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL diff --git a/ports/mimxrt/boards/MIMXRT1064_clock_config.c b/ports/mimxrt/boards/MIMXRT1064_clock_config.c index 56dd75d7fb..573b6a5c9a 100644 --- a/ports/mimxrt/boards/MIMXRT1064_clock_config.c +++ b/ports/mimxrt/boards/MIMXRT1064_clock_config.c @@ -324,7 +324,7 @@ void BOARD_BootClockRUN(void) { CLOCK_DisableClock(kCLOCK_Lpuart7); CLOCK_DisableClock(kCLOCK_Lpuart8); /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); + CLOCK_SetDiv(kCLOCK_UartDiv, 1); /* Set Uart clock source. */ CLOCK_SetMux(kCLOCK_UartMux, 0); /* Disable LCDIF clock gate. */ diff --git a/ports/mimxrt/boards/MIMXRT1064_clock_config.h b/ports/mimxrt/boards/MIMXRT1064_clock_config.h index 13bc925a10..80ca030eb6 100644 --- a/ports/mimxrt/boards/MIMXRT1064_clock_config.h +++ b/ports/mimxrt/boards/MIMXRT1064_clock_config.h @@ -86,7 +86,7 @@ void BOARD_InitBootClocks(void); #define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL #define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL #define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 117333333UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL +#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 40000000UL #define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL #define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL #define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL diff --git a/ports/mimxrt/machine_uart.c b/ports/mimxrt/machine_uart.c index fba2b7fe30..8e1505349a 100644 --- a/ports/mimxrt/machine_uart.c +++ b/ports/mimxrt/machine_uart.c @@ -153,24 +153,12 @@ static void machine_uart_ensure_active(machine_uart_obj_t *uart) { } } -#if !defined(MIMXRT117x_SERIES) -static inline void uart_set_clock_divider(uint32_t baudrate) { - // For baud rates < 460800 divide the clock by 10, supporting baud rates down to 50 baud. - if (baudrate >= 460800) { - CLOCK_SetDiv(kCLOCK_UartDiv, 0); - } else { - CLOCK_SetDiv(kCLOCK_UartDiv, 9); - } -} -#endif - void machine_uart_set_baudrate(mp_obj_t uart_in, uint32_t baudrate) { machine_uart_obj_t *uart = MP_OBJ_TO_PTR(uart_in); #if defined(MIMXRT117x_SERIES) // Use the Lpuart1 clock value, which is set for All UART devices. LPUART_SetBaudRate(uart->lpuart, baudrate, CLOCK_GetRootClockFreq(kCLOCK_Root_Lpuart1)); #else - uart_set_clock_divider(baudrate); LPUART_SetBaudRate(uart->lpuart, baudrate, CLOCK_GetClockRootFreq(kCLOCK_UartClkRoot)); #endif } @@ -315,7 +303,6 @@ STATIC mp_obj_t machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args // Use the Lpuart1 clock value, which is set for All UART devices. LPUART_Init(self->lpuart, &self->config, CLOCK_GetRootClockFreq(kCLOCK_Root_Lpuart1)); #else - uart_set_clock_divider(self->config.baudRate_Bps); LPUART_Init(self->lpuart, &self->config, CLOCK_GetClockRootFreq(kCLOCK_UartClkRoot)); #endif LPUART_TransferCreateHandle(self->lpuart, &self->handle, LPUART_UserCallback, self);