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.

DSP28335 SCI通讯问题



请教专家,我在使用SCI通讯时,发送采用普通查讯方式不中断,接收采用FIFO 增强功能 1字节就中断,在长时间通讯过程中偶尔会出现接收中断进不去的现像,请问有何办法解决,我没有使能RX ERR INT ENA,是否是通讯出错SCI接收中断就进不去了,如果这样,我使能RX ERR INT ENA 在中断接收里查RX ERROR位,如为1则先将 SW RESET清零 NOP 30后再将SW RESET置1来重新使能SCI,这样不管出现什么问题SCI都可以正常工作了吗?或者必须要重新上电复位?(使用的是例程序)

  • LOFTY,

    从下面这张图可以看到,让RX FIFO功能使能后,即SCIFFENA,普通RX的中断就已经没有产生作用了。正常来讲,应该不会出现你说的这种问题,因为RXFFIL4−0设置为1,只要接收到1个字符,就可以进入FIFO rx中断。会不会是调试过程中没有接收到数据,或是数据受干扰了?

     

  • 哦!也就是只要使能了SCIFFENA 接收和发送都是通过FIFO来进行的,至于发送和接收是否用中断方式,是可以分别设置的!普通的方式SCICTL2和SCIRXST都不起作用了?

  • LOFTY,

    是的,如果你FIFO使能之后,你如果不设置中断的话,那么要查询FIFO的状态位了,而非是RXRDY。

    Eric

  • 这样的话也就是说接收不可能出错误导致无法进入FIFO接收中断!我接收是采用中断方式的,发送不中断,发送查TXFFST,但是就是出现时间久了有时就会有SCI好像当机了一样,必须重新上电
    void scib_loopback_init()
    {
     ScibRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback 通讯控制寄存器
     ScibRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                       
     ScibRegs.SCICTL2.bit.TXINTENA =1;
     ScibRegs.SCICTL2.bit.RXBKINTENA =1;
     
     ScibRegs.SCIHBAUD    =0x0000;
     ScibRegs.SCILBAUD    =0x0028;//115200
     ScibRegs.SCICCR.bit.LOOPBKENA =0; // Disable loop back  自测试模式禁用与使能如使能则发送引脚与接收引脚在内部相连
     ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
     }

    // Initalize the SCI FIFO
    void scib_fifo_init()
    {
        ScibRegs.SCIFFTX.all=0xE040;
        ScibRegs.SCIFFRX.all=0x0021;//0x00214 1个数据中断一次
        ScibRegs.SCIFFCT.all=0x0;
        ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset

        ScibRegs.SCIFFRX.bit.RXFIFORESET=1;//FIFO接收寄存器 写0复位FIFO指针到0保持复位状态

    }



    void scib_xmit(int b)
    {
        while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
        ScibRegs.SCITXBUF=b;
       
    }