- int32_t UART_IRQHandler(uint8_t port, uint32_t LSR0, uint32_t LSR1)
- {
- UART_Type *UARTx;
- if(port == 1)
- UARTx = UART1;
- else
- UARTx = UART2;
- if ((UARTx->UARTn_IER.ERXNE == 1) && (LSR0 & LSR0_DR))
- {
- uint8_t uartData = UART_ReceiveData(UARTx);
- UART_SendData(UART2, uartData);
- while(!UART2->UARTn_LSR0.TC);
- if ((!g_recvedDataRdy) && (g_recvDataTtlLen < UART_DATA_LEN_SEL))//½ÓÊÕÊý¾Ý
- {
- g_recvedDataBuf[g_recvDataTtlLen++] = uartData;
- if (g_recvDataTtlLen == UART_DATA_LEN_SEL)//Êý¾Ý½ÓÊÕÍê±Ï
- {
- g_recvedDataRdy = TRUE;
- g_recvDataTtlLen = 0;
- }
- }
- }
- if ((UARTx->UARTn_IER.ETXE == 1) && (LSR0 & LSR0_THRE))//·¢ËÍÊý¾Ý
- {
-
- }
- return 0;
- }
我觉得UART中断这部分代码这样写是有问题的,你UART1中断中收到数据后将数据送入UART2并等待UART2发送完成,等于你UART2的发送完全是在UART1中断中执行的,那么很容易导致UART1产生溢出,测试的方法是在中断里面再增加一个溢出标志检查,通过仿真的方式看UART1是否产生溢出标志。或者你可以换种方式,在UART2发送前先判断再发送,或者直接发送不判断。这样可以避免UART2的发送占用UART1的中断时间。
|