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的中断时间。
|