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.

TMS302F28335 SCI通讯问题,发送数据不连续,不能满足ModBus协议时间要求

Other Parts Discussed in Thread: TMS320F28335

你好,我使用TMS320F28335的SCIA做ModBus通讯,PC用串口调试工具调试时,数据正常,单用Modbus Poll做主机,发现连接上。写了个测试程序,用AccessPort监控串口数据发现,串口发出的数据不连续,会先发8个数据,之后间隔一段时间,再发8个数据,依次发送。感觉处理器硬件自动分帧了。是处理器硬件问题还是软件配置问题。一下位SCI配置程序及应用程序。

// Test 1,SCIA DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scia_echoback_init()
{

    SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
    // No parity,8 char bits,
    // async mode, idle-line protocol
    SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
    // Disable RX ERR, SLEEP, TXWAKE
    SciaRegs.SCICTL2.all =0x0003;
    SciaRegs.SCICTL2.bit.TXINTENA = 1;
    SciaRegs.SCICTL2.bit.RXBKINTENA =1;
    #if (CPU_FRQ_150MHZ) //波特率的配置
    SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
    SciaRegs.SCILBAUD =0x00E7;
    #endif
    #if (CPU_FRQ_100MHZ)
    SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
    SciaRegs.SCILBAUD =0x0044;
    #endif
    SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}

void scia_xmit(int a)//发送字节的函数
{
while (SciaRegs.SCICTL2.bit.TXRDY == 0) {}
SciaRegs.SCITXBUF=a;

}

for(;;)
{
    while(SciaRegs.SCIRXST.bit.RXRDY !=1) { } //等待从上位机收到数据
    ReceivedChar = SciaRegs.SCIRXBUF.all;//把接收BUF里的数据赋值给ReceivedChar

    for(i = 0; i < 50; i++)
    {
        scia_xmit(i);
    }
}