[C] 纯文本查看 复制代码
/*!
\brief this function handles USART RBNE interrupt
\param[in] none
\param[out] none
\retval none
*/
void USART0_IRQHandler(void)
{
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) {
/* receive data */
char data = usart_data_receive(USART0);
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
if (xQueue_rx && xTaskGetSchedulerState() != taskSCHEDULER_SUSPENDED) {
xQueueSendFromISR(xQueue_rx, &data, &xHigherPriorityTaskWoken);
protYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
} else if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE_ORERR)) {
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE_ORERR);
(void)usart_data_receive(USART0);
}
}