From b2edfac2ddb584dd2b6c3f894e4b0b2bd5ea66ee Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 30 May 2018 01:43:10 -1000 Subject: [PATCH] kinetis:kinetis_lowputc Fixed parity settings. Kinetis UART must be placed in 9 bit mode (M=1) with when 8 bit data with parity is required. If left in 8 bit mode (M=0) with parity then D7 of the TX/RX register becomes parity bit. Hence what is called 9-bit or 8-bit Mode Select is a misnomer. 8 bit mode when parity is enabled is realy 7 bit with parity. --- arch/arm/src/kinetis/kinetis_lowputc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/arm/src/kinetis/kinetis_lowputc.c b/arch/arm/src/kinetis/kinetis_lowputc.c index 62c68da1c27..98c9eb9ef88 100644 --- a/arch/arm/src/kinetis/kinetis_lowputc.c +++ b/arch/arm/src/kinetis/kinetis_lowputc.c @@ -645,9 +645,12 @@ void kinetis_uartconfigure(uintptr_t uart_base, uint32_t baud, DEBUGASSERT(parity == 0); } - /* Check for 9-bit operation */ + /* Check for 9-bit operation or enter 9 bit mode for 8 bit with parity + * see K66 Sub-Family Reference Manual, Rev. 2, May 2015 + * 59.5.4 Data format + */ - if (nbits == 9) + if (nbits == 9 || (nbits == 8 && parity != 0)) { regval |= UART_C1_M; }