不是道是不是配置有无,发送端给过来的数据无法触发fifo接收中断,发送已验证ok,但是接收一直有问题,以下为部分代码:
void scia_fifo_init()
{
SciaRegs.SCICCR.all=0x0007;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCIFFTX.all=0xC021;
SciaRegs.SCIFFRX.all=0xC022;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all=0x0023;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
SciaRegs.SCIFFRX.bit.RXFFIENA=1;
}
void scia_loopback_init()
{
// Note: Clocks were turned on to the SCIA peripheral
// in the InitSysCtrl() function
int16 BAUDRATE=SCI_PRD;
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCIHBAUD =BAUDRATE>>8;
SciaRegs.SCILBAUD =BAUDRATE;
SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
interrupt void sciaRxFifoIsr(void)
{
Uint16 i;
for(i=Scia_Rx_Cnt;i<(2+Scia_Rx_Cnt);i++)
{
if(i!=Scia_RxBL)
Scia_RxBUF[i]=SciaRegs.SCIRXBUF.all; // Read data
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
Scia_Rx_Cnt+=2;
if(Scia_Rx_Cnt>=Scia_RxBL)
{
COM1Rx_CheckSum();
}
}
void COM1Rx_CheckSum(void)
{
int i;
unsigned char checksum;
for(i=0;i<Scia_RxBL-1;i++)
{
checksum+=Scia_RxBUF[i];
}
if(checksum==Scia_RxBUF[Scia_RxBL-1])
{
Scia_Rece_Complete=1;
Scia_Dataprocess();
}
else
{
Scia_Rece_Complete=0;
}
Scia_Rx_Cnt=0;
}
void Scia_Dataprocess(void)
{
Scia_Requestrpm=Scia_RxBUF[6];
Scia_Actualrpm=Scia_Requestrpm*30;
}