大家好,我选用的DSP是TMS320F28027,在SCI数据通讯中,波特率是9600,经测试发现,其他器件发送过来的第一帧数据不能被DSP接收到,而后的数据能够被DSP接收到,其中DSP接收是中断方式,这种现象有哪些原因?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,我选用的DSP是TMS320F28027,在SCI数据通讯中,波特率是9600,经测试发现,其他器件发送过来的第一帧数据不能被DSP接收到,而后的数据能够被DSP接收到,其中DSP接收是中断方式,这种现象有哪些原因?
使用的是TMS320F28027,数据接收中断模式并使用了FIFO功能,本意是每次接收4帧数据中断一次。请各位帮忙检查程序,谢谢!
SCI初始化程序如下:
void InitSci(void)
{
// Initialize SCI-A:
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
SciaRegs.SCIHBAUD = 0x00; // Baud=15MHz/((0x00C2+1)*8)
SciaRegs.SCILBAUD = 0xC2;
SciaRegs.SCIFFTX.all=0xC024;
SciaRegs.SCIFFRX.all=0x0424;
SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
SciaRegs.SCIFFRX.bit.RXFFIENA = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
中断服务程序如下:
interrupt void sciaRxFifoIsr(void)
{
static int i = 0;
static int rdd[5];
static int rd;
Uint16 l;
/*************************************************************************************************/
EINT; // Enable Global interrupt INTM
EALLOW;
PieCtrlRegs.PIEACK.bit.ACK9 |= PIEACK_GROUP9; // Issue PIE ack
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
EDIS;
for(l=0;l<4;l++)
{
rdataA[l] = SciaRegs.SCIRXBUF.bit.RXDT;
}
rdd[0] = rdataA[0];
rdd[1] = rdataA[1];
rdd[2] = rdataA[2];
rdd[3] = rdataA[3];
i++;
}