From d410cd77d375876dbfebd3072cae35c897319f52 Mon Sep 17 00:00:00 2001 From: Pradeep Date: Sat, 8 Jan 2022 19:41:58 +0530 Subject: [PATCH 1/2] Enable custom UART baudrate for nRF52 though nRF52 platform supported csutom baudrated for UART, it was supported in the uart.cpp core driver. It is enabled to support the same in this patchset --- cores/nRF5/Uart.cpp | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/cores/nRF5/Uart.cpp b/cores/nRF5/Uart.cpp index 9b598219b..7d114d3a9 100644 --- a/cores/nRF5/Uart.cpp +++ b/cores/nRF5/Uart.cpp @@ -87,46 +87,9 @@ void Uart::begin(unsigned long baudrate, uint16_t config) } else { nrfUart->CONFIG = config | (UARTE_CONFIG_HWFC_Disabled << UARTE_CONFIG_HWFC_Pos); } - - uint32_t nrfBaudRate; - - if (baudrate <= 1200) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud1200; - } else if (baudrate <= 2400) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud2400; - } else if (baudrate <= 4800) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud4800; - } else if (baudrate <= 9600) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud9600; - } else if (baudrate <= 14400) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud14400; - } else if (baudrate <= 19200) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud19200; - } else if (baudrate <= 28800) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud28800; - } else if (baudrate <= 31250) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud31250; - } else if (baudrate <= 38400) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud38400; - } else if (baudrate <= 56000) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud56000; - } else if (baudrate <= 57600) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud57600; - } else if (baudrate <= 76800) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud76800; - } else if (baudrate <= 115200) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud115200; - } else if (baudrate <= 230400) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud230400; - } else if (baudrate <= 250000) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud250000; - } else if (baudrate <= 460800) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud460800; - } else if (baudrate <= 921600) { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud921600; - } else { - nrfBaudRate = UARTE_BAUDRATE_BAUDRATE_Baud1M; - } + + const double regValue = 268.43f*(double)baudrate; /* 2^32 / 16000000 = 268.43f. more details here: https://devzone.nordicsemi.com/f/nordic-q-a/391/uart-baudrate-register-values */ + const uint32_t nrfBaudRate = ((uint32_t)ab + 0x800) & 0xFFFFF000; nrfUart->BAUDRATE = nrfBaudRate; From 5e92a1f37cabfd05c6aa5b3606d1368397f5abe1 Mon Sep 17 00:00:00 2001 From: Pradeep Date: Sat, 8 Jan 2022 19:47:29 +0530 Subject: [PATCH 2/2] Fix the compilation error --- cores/nRF5/Uart.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/nRF5/Uart.cpp b/cores/nRF5/Uart.cpp index 7d114d3a9..c209c2c38 100644 --- a/cores/nRF5/Uart.cpp +++ b/cores/nRF5/Uart.cpp @@ -89,7 +89,7 @@ void Uart::begin(unsigned long baudrate, uint16_t config) } const double regValue = 268.43f*(double)baudrate; /* 2^32 / 16000000 = 268.43f. more details here: https://devzone.nordicsemi.com/f/nordic-q-a/391/uart-baudrate-register-values */ - const uint32_t nrfBaudRate = ((uint32_t)ab + 0x800) & 0xFFFFF000; + const uint32_t nrfBaudRate = ((uint32_t)regValue + 0x800) & 0xFFFFF000; nrfUart->BAUDRATE = nrfBaudRate;