mirror of https://github.com/ARMmbed/mbed-os.git
STM32: Serial - do no clear RXNE flag
The RXNE flag is getting cleared when reading Data Register so it should not be cleared here. Especially in case of high data rate, another byte of data could have received during irq_handler call and clearing the flag would read and discard this data which would be lost for application.pull/4734/head
parent
692d9055b1
commit
85711eb09e
|
|
@ -273,8 +273,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
volatile uint32_t tmpval = huart->Instance->RDR; // Clear RXNE flag
|
||||
UNUSED(tmpval);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -218,9 +218,8 @@ static void uart_irq(int id)
|
|||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
volatile uint32_t tmpval = huart->Instance->RDR; // Clear RXNE flag
|
||||
UNUSED(tmpval);
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
volatile uint32_t tmpval = huart->Instance->RDR; // Clear RXNE
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
volatile uint32_t tmpval = huart->Instance->RDR; // Clear RXNE flag
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ static void uart_irq(int id)
|
|||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
|
|
@ -225,8 +225,8 @@ static void uart_irq(int id)
|
|||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
|
||||
irq_handler(serial_irq_ids[id], RxIrq);
|
||||
/* Flag has been cleared when reading the content */
|
||||
}
|
||||
}
|
||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue