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.

TMS320F28377D: 双28377D串口通讯问题

Part Number: TMS320F28377D


两个28377D通过串口通讯。

通讯参数配置 波特率 115200   FIFO设置为8位,采用中断方式进行通讯。当串口接收数据时发现接收首地址产生偏差。

配置代码如下:

void InitSciBFIFO()
{

//    ScibRegs.SCICCR.all = 0x0007;                           // 1 stop bit,  No loopback
//                                                            // No parity,8 char bits,
//                                                            // async mode, idle-line protocol

    ScibRegs.SCICCR.all = 0x0087;                           // 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 = 0;
    ScibRegs.SCICTL2.bit.RXBKINTENA = 1;                    //Enable SCIB _RX

//
//  SCIA at 9600 baud
//  @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
//  @LSPCLK = 30 MHz (120 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x86.
//  @LSPCLK = 25 MHz (100 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x45.

    ScibRegs.SCIHBAUD.all = 0x0000;                     // @LSPCLK = 50 MHz  115200
    ScibRegs.SCILBAUD.all = 0x0036;

//    ScibRegs.SCIHBAUD.all = 0x0000;                     // @LSPCLK = 50 MHz  1M
//    ScibRegs.SCILBAUD.all = 0x0006;

    ScibRegs.SCIFFTX.bit.TXFIFORESET = 0;
    ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;

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

//  Enable SCIFIFO
    ScibRegs.SCIFFTX.all = 0xF040;                      //Disable FIFO Using 4 Enable FIFO Using 6

    ScibRegs.SCIFFRX.all = 0x2068;                      //FIFO interupter level 8    interrupter level == 5
    ScibRegs.SCIFFCT.all = 0x0;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;    //Avoid PowerUp DataTX
    ScibRegs.SCIFFTX.bit.TXFFIENA = 0;      //Avoid PowerUp DataTX

}

接收中断函数:

__interrupt void ScibRxfifo_isr(void)
{

    volatile static Uint32 ScibInteruptimes = 0;

    ScibInteruptimes++;

    if (SCIB_Recdata.uStatus != FINISH)
    {
        while(ScibRegs.SCIFFRX.bit.RXFFST)
        {
            SCIB_Recdata.uData[SCIB_Recdata.uIndex++] = ScibRegs.SCIRXBUF.all&0xff;
        }
        //update sci recevie status and set interrupt interval.
        SCIB_Recdata.uStatus = WORKING;
        SCIB_Recdata.ticker = SCIB_Recdata.spacetime;
    }



    ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1;                                    // Clear Overflow flag
    ScibRegs.SCIFFRX.bit.RXFFINTCLR = 1;                                    // Clear Interrupt flag

    ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;

    // Issue PIE ack
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;                                 // Issue PIE ACK PIEACK_GROUP9
}

当我发送的8个字节时

我在串口中断收到的数为: