我正在使用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,但我找不到办法。