From da160bfee9b068531dce66a1b9b9de39dffbaa00 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 16 Nov 2014 07:57:57 -0600 Subject: [PATCH] EFM32 USART setup: Computation of BAUD includes shift; Eliminate additional shift. From Pierre-noel Bouteville --- arch/arm/src/efm32/efm32_lowputc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/arm/src/efm32/efm32_lowputc.c b/arch/arm/src/efm32/efm32_lowputc.c index f343d341a4..ebbfce3479 100644 --- a/arch/arm/src/efm32/efm32_lowputc.c +++ b/arch/arm/src/efm32/efm32_lowputc.c @@ -206,15 +206,18 @@ static void efm32_uart_setbaud(uintptr_t base, uint32_t baud) clkdiv = 0; } - /* Set up the selected oversampling and baud divisor */ + /* Set up the selected oversampling */ regval = getreg32(base + EFM32_USART_CTRL_OFFSET); regval &= ~_USART_CTRL_OVS_MASK; regval |= ovs; putreg32(regval, base + EFM32_USART_CTRL_OFFSET); - regval = (uint32_t)clkdiv << _USART_CLKDIV_DIV_SHIFT; - DEBUGASSERT((regval & _USART_CLKDIV_MASK) == regval); + /* Set up the selected baud divisor. The computation above already took + * in account of _USART_CLKDIV_DIV_SHIFT + */ + + regval = (uint32_t)clkdiv & _USART_CLKDIV_MASK; putreg32(regval, base + EFM32_USART_CLKDIV_OFFSET); } #endif