0

我正在使用 UART 与 dsPIC x16 微控制器通信我的 C# 应用程序。我想发送/接收固定大小的帧,并尝试通过以下方式对其进行管理:

if(readFrame)
    {   IEC0bits.U1RXIE=0; //turn off the U1RX interrupts
        readFrame = false;            
        while(indexer < 8 )
        {   
            while(!U1STAbits.URXDA);
                modbusBuffer[indexer]=U1RXREG;
                indexer++;
        }
        if(indexer == 8)
        {
            modbusRecvTask(modbusBuffer);
            indexer=0;
        }                      
        IEC0bits.U1RXIE=1;     //turn on U1RX interrupts       
    }

void _ISR_NAP _U1RXInterrupt()
{    
if(IFS0bits.U1RXIF)
{
    IFS0bits.U1RXIF = 0;    //set the interrupt flag to false
    if(U1STAbits.OERR==1)   //check overload error
    {
        U1STAbits.OERR=0;       //clear error flag
    }
    else
    {
        readFrame = true;        
    }
}    

}

问题是它仅适用于第一个接收到的帧。之后,程序再次进入接收器中断并将标志 readFrame 设置为 true,即使没有发送任何字节并且卡在队列中:

while(!U1STAbits.URXDA);

我已经阅读了一些清除 UART 读取缓冲区的建议,以防止程序再次进入 ISR,但我找不到解决方法。

4

0 回答 0