你好,我使用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);
}
}
Shine:
TMS320F28335 属于C2000系列,有专门的C2000论坛可以咨询。
e2echina.ti.com/…/