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.
1、手册上说“With the FIFO enabled, TXSHF is directly loaded after an optional delay value (SCIFFCT), TXBUF is not used.”意思是使能发送FIFO之后,TXSHF直接装载数据而不使用TXBUF,是说从FIFO直接装载吗?这样的话TXBUF这个寄存器就用不到了,但是我看TI的例程里仍然把要发送的数据先放到SCITXBUF这个寄存器里,而FIFO里并没有一个专门用来装载要发送数据的地方,这是为什么?接收FIFO也有同样的问题,还是都要从SCIRXBUF中读取。
2、我自己写了一个用FIFO接收的程序,用串口调试助手给SCI重复发送同一个数比如12,当RXFIFO中的值大于6时开始读FIFO的值,也就是想一次性读6次的值,但是从初始化完成到RXFFST中的值大于等于6,观察SCIRXBUF的值全部是0XFF,根本没有变过,请问这里我要读FIFO的数据应该怎么读,SCIRXBUF中的值一直是0XFF有可能是什么原因造成的?代码如下
初始化程序:
//Resume FIFO, enable FIFO, enable TXFIFO, 0 TXFIFO level
ScibRegs.SCIFFTX.all=0xE040;
//Enable RXFIFO, 0 TXFIFO level, 15 RXFIFO level
ScibRegs.SCIFFRX.all=0x004F;
//No auto-baud, 0 FIFO transfer delay
ScibRegs.SCIFFCT.all=0x0;
// one stop bit, No parity, No loopback, 8 char bits, idle-line protocol
ScibRegs.SCICCR.all = 0x0007;
// Disable RX ERR, TXWAK, SLEEP, Eenable TX, RX
ScibRegs.SCICTL1.all = 0x0003;
// 9600 baud @LSPCLK = 37.5MHz.
ScibRegs.SCIHBAUD = 0x0001;
ScibRegs.SCILBAUD = 0x00E7;
// Relinquish SCI from Reset
ScibRegs.SCICTL1.all =0x0023;
//Re-enable TX and RX FIFO
ScibRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
主查询程序如下:
if(ScibRegs.SCIFFRX.bit.RXFFST >= 6)
{
for(i = 0; i < 6; i++)
{
u16RXBuff[i] = ScibRegs.SCIRXBUF.all;
}
}
现在我的SCI采用FIFO接收的模式,设置当FIFO中接收到的数据即RXFFST位大于等于3时进入读取数据,因为发送方发送过来的数据也是3个,所以RXFFST设置了3个,而且发送方是每1s发一次这3个数据,也采用FIFO发送。我用带着仿真器软仿真的方法看SCI接收的数据,在程序中设置断点,刚开始能够正常进入接收程序,而且接收到的数据也是对的,但是过了几次之后就不能进入接收程序了,在接收程序入口处设置断点,观察每次RXFFST都等于0,也就是相当于没有接收到数据,但是连接在同一总线上的串口调试助手却能够正常接收。
请问这个问题可能是什么原因导致的?和我总是设置断点让程序停止有关系吗?有没有什么好的解决方法或者测试问题出在哪的方法?
if(ScibRegs.SCIFFRX.bit.RXFFST >= 3)
{
for(i = 0; i < 3; i++)
{
u16RXBuff[i] = ScibRegs.SCIRXBUF.bit.RXDT;
}
u16SlaveMCW = u16RXBuff[0] + (u16RXBuff[1] << 8); //Master MCW
u16485TxCount = u16RXBuff[2]; //Slave number
}
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;