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.

SCI数据通讯

Other Parts Discussed in Thread: TMS320F28027

大家好,我选用的DSP是TMS320F28027,在SCI数据通讯中,波特率是9600,经测试发现,其他器件发送过来的第一帧数据不能被DSP接收到,而后的数据能够被DSP接收到,其中DSP接收是中断方式,这种现象有哪些原因?

  • 这里有回,楼主看了没?

    www.deyisupport.com/.../6586.aspx

    1、可能是“发送的数据没有触发FIFO中断”,楼主把FIFO触发中断的点设为1级试试。

    2、可能是程序有简单的逻辑的问题。

    3、可能是上电后其他器件发送第一帧数据的时候C2000芯片还没有初始化好,所以第一帧数据漏接。

    楼主可以用仿真器监视程序看看是什么原因。

  • 使用的是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++;

    }

  • 谢谢大家的帮忙,我现在使用了溢出中断来完成4级FIFO功能!