DSP28379D 串口FIFO中断接收处理
使用SCI中断接收,自定义数据包,很容易出现在首包数据错位的问题。使用前导码 EB 90 EB 90 EB 90也是一样。
我的自定义数据包为 5个bytes, 无特定前导码, 另一个芯片的数据包发送给DSP这边的包间隔的时间为 10ms左右。 如果你有前导码,只需要在校验这里再多加一个条件就好了。
FIFO reset需要放到最后一行。
//
// sciaRXFIFOISR - SCIB Receive FIFO ISR
//
__interrupt void INT_mySCI0_RX_ISR(void)
{uint16_t tmp_buffer[5];uchar tmp_chksum;// MSP_RX();SCI_readCharArray(SCIB_BASE, tmp_buffer, 5);MSP_RXbuffer[0] = 0x00ff & tmp_buffer[0];MSP_RXbuffer[1] = 0x00ff & tmp_buffer[1];MSP_RXbuffer[2] = 0x00ff & tmp_buffer[2];MSP_RXbuffer[3] = 0x00ff & tmp_buffer[3];MSP_RXbuffer[4] = 0x00ff & tmp_buffer[4];// asm(" ESTOP0"); // Uncomment to stop the test heretmp_chksum = Chk_Xor_Sum(MSP_RXbuffer);if (tmp_chksum == MSP_RXbuffer[4]){MSP_RX_Pro();// asm(" ESTOP0"); // Uncomment to stop the test here}SCI_clearOverflowStatus(SCIB_BASE);SCI_clearInterruptStatus(SCIB_BASE, SCI_INT_RXFF);Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);if (tmp_chksum != MSP_RXbuffer[4]){SCI_resetRxFIFO(SCIB_BASE);}
}