TI中文支持网
TI专业的中文技术问题搜集分享网站

SCI数据通讯

大家好,我选用的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++;

}

赞(0)
未经允许不得转载:TI中文支持网 » SCI数据通讯
分享到: 更多 (0)