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.
SCITXBUF is written to; thus, (1) the transmitter is no longer empty, and (2) TXRDY goes low.
初始化如下:
void InitScib(void)
{
ScibRegs.SCICCR.bit.STOPBITS=1; //1位停止位
ScibRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
ScibRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
ScibRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
ScibRegs.SCICCR.bit.SCICHAR=7; //8位数据位
ScibRegs.SCICTL1.bit.TXENA=1; //Scib模块的发送使能
ScibRegs.SCICTL1.bit.RXENA=1; //Scib模块的接收使能
ScibRegs.SCIHBAUD=0;
ScibRegs.SCILBAUD=0xF3; //波特率为19200
ScibRegs.SCICTL1.bit.SWRESET=1; //重启SCI
}
请参考TI官方SCI的初始化程序:
void scib_fifo_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.bit.TXINTENA =1;
ScibRegs.SCICTL2.bit.RXBKINTENA =1;
ScibRegs.SCIHBAUD =0x0000;
ScibRegs.SCILBAUD =SCI_PRD;
ScibRegs.SCICCR.bit.LOOPBKENA =0; // Disnable loop back
ScibRegs.SCIFFTX.all=0xC028;
ScibRegs.SCIFFRX.all=0x0028;
ScibRegs.SCIFFCT.all=0x00;
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
}
①只是在第一次将数据放入缓冲寄存器的时候,设置断点,之后但不运行,看相关寄存器的变化
②在将第一个数据放入数据缓冲寄存器的时候,发送就绪寄存为1,寄存器空标志位为1,单步运行之后,寄存器不再为空,但是发送器缓冲寄存器就绪标志位还是1,实际上之前放进去的数据已经开始发送了,最终通过查空解决的
3,没有用FIFO,整个modbus 都用的查询方法,
疑问:虽然问题解决了,但是此现象和手册所说有些不同,是不是因为移位寄存器本来就是空的,数据放入缓冲寄存器之后就直接放进移位寄存器了,此过程很短暂,看不到标志位的变化?
谢谢,另外帮我看下28335 I2C的问题,另一个帖子