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.

F2812的SCI接受问题

我使用F2812的SCIB作为串口运行,外面接的是485的差分输入,进过示波器的实际测量,发现数据已经到DSP SCIB的接收引脚,但就是无法接收到数据。但可以发送。

 

#include "DSP281x_Device.h"

 #include "DSP281x_Examples.h"

 

void scib_loopback_init(void); void scib_fifo_init(void); 

void scib_xmit(int a); //void error(int);

 

Uint16 LoopCount;

Uint16 ErrorCount;

void main(void)

 {    

         Uint16 SendChar;    

         Uint16 ReceivedChar;    

         InitSysCtrl();    

          InitGpio();

          EALLOW;    

         GpioMuxRegs.GPFMUX.all=0x0030; // Select GPIOs to be Sci pins                                    

          EDIS;

      // Disable and clear all CPU interrupts:

        DINT;  

        IER = 0x0000;

        IFR = 0x0000;

        InitPieVectTable();

       LoopCount = 0;    

       ErrorCount = 0;        

       scib_fifo_init();    // Initialize the SCI FIFO    

       scib_loopback_init();  // Initalize SCI for digital loop back

       SendChar = 0;        

       EALLOW;

       GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 0;  

       GpioMuxRegs.GPFDIR.bit.GPIOF6 = 1;   //设置为输出

      EDIS;

      //用来使用485的接收功能 1为发送,0接收  

     GpioDataRegs.GPFDAT.bit.GPIOF6 = 0;

    {    

        scib_xmit(SendChar);       

        while(ScibRegs.SCIFFRX.bit.RXFIFST !=1) { } // wait for XRDY =1 for empty state       

        ReceivedChar = ScibRegs.SCIRXBUF.all;            

        SendChar++;       

        SendChar &= 0x00FF; 

     }

void scib_loopback_init()

{

      ScibRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback                                   

                                                            // No parity,8 char bits,                                  

                                                           // async mode, idle-line protocol  

        ScibRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,                                 

                                                            // Disable RX ERR, SLEEP, TXWAKE  

        ScibRegs.SCICTL2.all =0x0003;  

        ScibRegs.SCICTL2.bit.TXINTENA =1;  

        ScibRegs.SCICTL2.bit.RXBKINTENA =1;    

        ScibRegs.SCIHBAUD    =0x0000;    

        ScibRegs.SCILBAUD    =0x0079;  

        ScibRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back 

        ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset

 }

 

void scib_xmit(int a)

 {  

    ScibRegs.SCITXBUF=a;

}   

 

void scib_fifo_init()      

{  

     ScibRegs.SCIFFTX.all=0xE040;    

    ScibRegs.SCIFFRX.all=0x204f;    

    ScibRegs.SCIFFCT.all=0x0;

  • 您好   你使用的FIFO接收   设置为几个字节触发    ?

    你可以通过在线断点的方法测试   上位机一直下发    如果能进入中断  

    就说明只是设置和发送的字节数不一致而已

    附件是我使用过的代码     你可以参考参考一下

    sportctr1-V1.5.zip
  • 你好,这个方法我有试过,但还是不行。因为我发现RXBuff寄存器没有数据进入,也就是说数据从未被接收到。从我粘贴在上面的代码可以看到,只要有一个字节的数据,SCI接收FIFO就可以触发了。而且上位机是一直在不断循环的发送数据。事实上,我用示波器测量的结果也是看到有数据不断的进入到DSP SCI的接收引脚了。如果改用DSP SCI 的自测的模式,接收是不存在问题。

  • 你的问题解决了吗?我也遇到了一样的状况,用例程测试都不行。你将你的解决方法共享吗?