大家好,我选用的DSP是TMS320F28027,在SCI数据通讯中,波特率是9600,经测试发现,其他器件发送过来的第一帧数据不能被DSP接收到,而后的数据能够被DSP接收到,其中DSP接收是中断方式,这种现象有哪些原因?
Forrest:
这里有回,楼主看了没?
www.deyisupport.com/…/6586.aspx
1、可能是“发送的数据没有触发FIFO中断”,楼主把FIFO触发中断的点设为1级试试。
2、可能是程序有简单的逻辑的问题。
3、可能是上电后其他器件发送第一帧数据的时候C2000芯片还没有初始化好,所以第一帧数据漏接。
楼主可以用仿真器监视程序看看是什么原因。
大家好,我选用的DSP是TMS320F28027,在SCI数据通讯中,波特率是9600,经测试发现,其他器件发送过来的第一帧数据不能被DSP接收到,而后的数据能够被DSP接收到,其中DSP接收是中断方式,这种现象有哪些原因?
Leo zhou:
回复 Forrest:
使用的是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++;
}
TI中文支持网



