使用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 here
tmp_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);
}
}