summaryrefslogtreecommitdiff
path: root/chip/stm32/uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/stm32/uart.c')
-rw-r--r--chip/stm32/uart.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/chip/stm32/uart.c b/chip/stm32/uart.c
index bafca58c46..6be0790c63 100644
--- a/chip/stm32/uart.c
+++ b/chip/stm32/uart.c
@@ -176,7 +176,14 @@ static void uart_interrupt(void)
#if defined(CHIP_FAMILY_STM32F4)
STM32_USART_SR(UARTN_BASE) &= ~STM32_USART_SR_TC;
#else
- STM32_USART_ICR(UARTN_BASE) |= STM32_USART_SR_TC;
+ /*
+ * ST reference code does blind write to this register, as is
+ * usual with the "write 1 to clear" convention, despite the
+ * datasheet listing the bits as "keep at reset value", (which
+ * we assume is due to copying from the description of
+ * reserved bits in read/write registers.)
+ */
+ STM32_USART_ICR(UARTN_BASE) = STM32_USART_SR_TC;
#endif
if (!(STM32_USART_SR(UARTN_BASE) & ~STM32_USART_SR_TC))
return;