通过UART将dsPIC与PC应用程序进行通信。接收器中断处理

时间:2016-02-06 01:41:30

标签: interrupt uart receiver dspic

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

0 个答案:

没有答案