From 0424a747af6a008eb7530f6f56c7113d7a898188 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 7 Jul 2018 14:05:00 +0000 Subject: Fixed bug #958. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12142 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- demos/STM32/RT-STM32F401RE-NUCLEO64/Makefile | 2 +- demos/STM32/RT-STM32L476-DISCOVERY/Makefile | 2 +- os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c | 18 +++++++++--------- os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c | 20 ++++++++++---------- readme.txt | 2 ++ 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/demos/STM32/RT-STM32F401RE-NUCLEO64/Makefile b/demos/STM32/RT-STM32F401RE-NUCLEO64/Makefile index bb4c66597..3251b9d72 100644 --- a/demos/STM32/RT-STM32F401RE-NUCLEO64/Makefile +++ b/demos/STM32/RT-STM32F401RE-NUCLEO64/Makefile @@ -172,7 +172,7 @@ ULIBS = # Common rules # -RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/mk +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk include $(RULESPATH)/arm-none-eabi.mk include $(RULESPATH)/rules.mk diff --git a/demos/STM32/RT-STM32L476-DISCOVERY/Makefile b/demos/STM32/RT-STM32L476-DISCOVERY/Makefile index 780013070..881f1aade 100644 --- a/demos/STM32/RT-STM32L476-DISCOVERY/Makefile +++ b/demos/STM32/RT-STM32L476-DISCOVERY/Makefile @@ -172,7 +172,7 @@ ULIBS = # Common rules # -RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/mk +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk include $(RULESPATH)/arm-none-eabi.mk include $(RULESPATH)/rules.mk diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c index 0321e1669..188740e5a 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c @@ -215,7 +215,7 @@ static void serve_interrupt(SerialDriver *sdp) { b = oqGetI(&sdp->oqueue); if (b < MSG_OK) { chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY); - u->CR1 = (cr1 & ~USART_CR1_TXEIE) | USART_CR1_TCIE; + u->CR1 = cr1 & ~USART_CR1_TXEIE; } else u->DR = b; @@ -237,7 +237,7 @@ static void serve_interrupt(SerialDriver *sdp) { static void notify1(io_queue_t *qp) { (void)qp; - USART1->CR1 |= USART_CR1_TXEIE; + USART1->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -245,7 +245,7 @@ static void notify1(io_queue_t *qp) { static void notify2(io_queue_t *qp) { (void)qp; - USART2->CR1 |= USART_CR1_TXEIE; + USART2->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -253,7 +253,7 @@ static void notify2(io_queue_t *qp) { static void notify3(io_queue_t *qp) { (void)qp; - USART3->CR1 |= USART_CR1_TXEIE; + USART3->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -261,7 +261,7 @@ static void notify3(io_queue_t *qp) { static void notify4(io_queue_t *qp) { (void)qp; - UART4->CR1 |= USART_CR1_TXEIE; + UART4->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -269,7 +269,7 @@ static void notify4(io_queue_t *qp) { static void notify5(io_queue_t *qp) { (void)qp; - UART5->CR1 |= USART_CR1_TXEIE; + UART5->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -277,7 +277,7 @@ static void notify5(io_queue_t *qp) { static void notify6(io_queue_t *qp) { (void)qp; - USART6->CR1 |= USART_CR1_TXEIE; + USART6->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -285,7 +285,7 @@ static void notify6(io_queue_t *qp) { static void notify7(io_queue_t *qp) { (void)qp; - UART7->CR1 |= USART_CR1_TXEIE; + UART7->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -293,7 +293,7 @@ static void notify7(io_queue_t *qp) { static void notify8(io_queue_t *qp) { (void)qp; - UART8->CR1 |= USART_CR1_TXEIE; + UART8->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif diff --git a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c index e4d521bd7..6031936c7 100644 --- a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c @@ -335,7 +335,7 @@ static void serve_interrupt(SerialDriver *sdp) { b = oqGetI(&sdp->oqueue); if (b < MSG_OK) { chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY); - u->CR1 = (cr1 & ~USART_CR1_TXEIE) | USART_CR1_TCIE; + u->CR1 = cr1 & ~USART_CR1_TXEIE; } else u->TDR = b; @@ -357,7 +357,7 @@ static void serve_interrupt(SerialDriver *sdp) { static void notify1(io_queue_t *qp) { (void)qp; - USART1->CR1 |= USART_CR1_TXEIE; + USART1->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -365,7 +365,7 @@ static void notify1(io_queue_t *qp) { static void notify2(io_queue_t *qp) { (void)qp; - USART2->CR1 |= USART_CR1_TXEIE; + USART2->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -373,7 +373,7 @@ static void notify2(io_queue_t *qp) { static void notify3(io_queue_t *qp) { (void)qp; - USART3->CR1 |= USART_CR1_TXEIE; + USART3->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -381,7 +381,7 @@ static void notify3(io_queue_t *qp) { static void notify4(io_queue_t *qp) { (void)qp; - UART4->CR1 |= USART_CR1_TXEIE; + UART4->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -389,7 +389,7 @@ static void notify4(io_queue_t *qp) { static void notify5(io_queue_t *qp) { (void)qp; - UART5->CR1 |= USART_CR1_TXEIE; + UART5->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -397,7 +397,7 @@ static void notify5(io_queue_t *qp) { static void notify6(io_queue_t *qp) { (void)qp; - USART6->CR1 |= USART_CR1_TXEIE; + USART6->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -405,7 +405,7 @@ static void notify6(io_queue_t *qp) { static void notify7(io_queue_t *qp) { (void)qp; - UART7->CR1 |= USART_CR1_TXEIE; + UART7->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -413,7 +413,7 @@ static void notify7(io_queue_t *qp) { static void notify8(io_queue_t *qp) { (void)qp; - UART8->CR1 |= USART_CR1_TXEIE; + UART8->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif @@ -421,7 +421,7 @@ static void notify8(io_queue_t *qp) { static void notifylp1(io_queue_t *qp) { (void)qp; - LPUART1->CR1 |= USART_CR1_TXEIE; + LPUART1->CR1 |= USART_CR1_TXEIE | USART_CR1_TCIE; } #endif diff --git a/readme.txt b/readme.txt index 59bd7f62c..89d8aebef 100644 --- a/readme.txt +++ b/readme.txt @@ -138,6 +138,8 @@ - EX: Updated LIS302DL to 1.1.0 (backported to 18.2.1). - EX: Updated LPS25H to 1.1.0 (backported to 18.2.1). - EX: Updated LSM303DLHC to 1.1.0 (backported to 18.2.1). +- HAL: Fixed incorrect TCIE handling in STM32 serial drivers (bug #958) + (backported to 18.2.2 and 17.6.5). - HAL: Fixed invalid period calculation in STM32 GPT driver (bug #957) (backported to 18.2.2 and 17.6.5). - HAL: Fixed missing USART7/8 definitions in STM32F0 HAL (bug #956)(backported -- cgit v1.2.3