summaryrefslogtreecommitdiff
path: root/chip/stm32/usart.c
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2018-08-27 16:05:09 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-08-29 11:15:45 -0700
commit7eb9ff3cfcf4b96356050da66bd957225bef6044 (patch)
tree62b5f35d135e99fa14e582d3487fabb6fa41aab2 /chip/stm32/usart.c
parent63fd7e18588023b2940167b686611e609354b78a (diff)
downloadchrome-ec-7eb9ff3cfcf4b96356050da66bd957225bef6044.tar.gz
servo_micro: Allow setting the baud rate for usart
We set the baud rate in increments of 100 baud, to avoid overflowing the 16-bit wValue integer (921600 is the highest we are likely to use). Also, increment the buffer size for USART3 to 1024 bytes. That helps a bit to avoid losing characters, but we still can't keep up if the host is printing at maximum speed. BRANCH=servo BUG=chromium:876651 TEST=baud usart2/3/4 115200 in servo_micro console TEST=dut-control cpu_uart_baudrate:921600 seq 1 1000 shows numbers 1 to 226 before buffer overflows Change-Id: Ifca266189f93def493f207dd29d2cceca4d8d68f Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1189782 Reviewed-by: Nick Sanders <nsanders@chromium.org>
Diffstat (limited to 'chip/stm32/usart.c')
-rw-r--r--chip/stm32/usart.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/chip/stm32/usart.c b/chip/stm32/usart.c
index 90be4f6194..0ef357466c 100644
--- a/chip/stm32/usart.c
+++ b/chip/stm32/usart.c
@@ -86,9 +86,10 @@ void usart_shutdown(struct usart_config const *config)
config->hw->ops->disable(config);
}
-void usart_set_baud_f0_l(struct usart_config const *config, int frequency_hz)
+void usart_set_baud_f0_l(struct usart_config const *config, int baud,
+ int frequency_hz)
{
- int div = DIV_ROUND_NEAREST(frequency_hz, config->baud);
+ int div = DIV_ROUND_NEAREST(frequency_hz, baud);
intptr_t base = config->hw->base;
if (div / 16 > 0) {
@@ -108,9 +109,10 @@ void usart_set_baud_f0_l(struct usart_config const *config, int frequency_hz)
}
}
-void usart_set_baud_f(struct usart_config const *config, int frequency_hz)
+void usart_set_baud_f(struct usart_config const *config, int baud,
+ int frequency_hz)
{
- int div = DIV_ROUND_NEAREST(frequency_hz, config->baud);
+ int div = DIV_ROUND_NEAREST(frequency_hz, baud);
/* STM32F only supports x16 oversampling */
STM32_USART_BRR(config->hw->base) = div;