mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #4734 from LMESTM/stm32_uart_irq
Avoid data loss with serial interrupt used at high baudratespull/4803/head
commit
9e443e9d14
|
|
@ -264,17 +264,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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 */
|
||||||
UNUSED(tmpval);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -419,7 +417,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -433,7 +431,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -159,16 +159,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -228,7 +227,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -242,7 +241,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -246,16 +246,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -385,7 +384,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -399,7 +398,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -210,17 +210,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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 */
|
||||||
UNUSED(tmpval);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -312,7 +310,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -326,7 +324,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -273,16 +273,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -438,7 +437,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -452,7 +451,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -238,16 +238,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_IT(huart, UART_CLEAR_TCF);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -373,7 +372,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -387,7 +386,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -201,16 +201,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -302,7 +301,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -316,7 +315,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -190,16 +190,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -284,7 +283,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -298,7 +297,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
|
|
@ -217,16 +217,15 @@ static void uart_irq(int id)
|
||||||
UART_HandleTypeDef * huart = &uart_handlers[id];
|
UART_HandleTypeDef * huart = &uart_handlers[id];
|
||||||
|
|
||||||
if (serial_irq_ids[id] != 0) {
|
if (serial_irq_ids[id] != 0) {
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TC) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], TxIrq);
|
irq_handler(serial_irq_ids[id], TxIrq);
|
||||||
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) {
|
||||||
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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) {
|
if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) {
|
||||||
|
|
@ -330,7 +329,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_ENABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
|
||||||
}
|
}
|
||||||
NVIC_SetVector(irq_n, vector);
|
NVIC_SetVector(irq_n, vector);
|
||||||
NVIC_EnableIRQ(irq_n);
|
NVIC_EnableIRQ(irq_n);
|
||||||
|
|
@ -344,7 +343,7 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
}
|
}
|
||||||
} else { // TxIrq
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(huart, UART_IT_TC);
|
__HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
if ((huart->Instance->CR1 & USART_CR1_RXNEIE) == 0) {
|
||||||
all_disabled = 1;
|
all_disabled = 1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue