SCIB设置如下:
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; // trans interrupt enable
ScibRegs.SCICTL2.bit.RXBKINTENA = 1;// receive interrupt enable
ScibRegs.SCIHBAUD.all = 0x0002;
ScibRegs.SCILBAUD.all = 0x008B;
//ScibRegs.SCICCR.bit.LOOPBKENA = 1; // Enable loop back //使能回环测试
ScibRegs.SCIFFTX.all = 0xC000;//1100 0000 0010 0010b 重新开始收发 使能FIFO增强功能 发送FIF0为空 FIF0中断级位为2
ScibRegs.SCIFFRX.all = 0x0030; //使能接收中断 接收FIFO级位为16
ScibRegs.SCIFFCT.all = 0x00;
ScibRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset 重启SCI SCICTL1 寄存器的 SWRESET,必须被置 1
ScibRegs.SCIFFTX.bit.TXFIFORESET = 1;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
}
发送中断
__interrupt void scibTxFifoIsr(void)
{
Uint16 i;
if(IMURevDataNum == 2)
{
for(i=0; i< 16; i++)
{
ScibRegs.SCITXBUF.all=sdataA[i]; // Send data
}
IMURevDataNum–;
}
if(IMURevDataNum == 1)
{
for(i=0; i< 2; i++)
{
ScibRegs.SCITXBUF.all=sdataA[i+16]; // Send data
}
IMURevDataNum = 2;
ScibRegs.SCIFFTX.bit.TXFFIENA = 0; //关闭串口中断
}
ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK
}
如上简单测试一下发送18个串口数据,接收中断在定时器里打开,接收数据如下:
01 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12
每次少了02,查看寄存器FIFO值,FIFO数据里包含2.
但是如果FIFO深度少于等于8,则测试不丢数,结果正确,求解
Green Deng:
你好,你的意思是,FIFO发送中断大于8位深度时,18个串口数据中的第二个数据会丢失?只有第二个数据会丢失吗?有测试过其他数据个数或者数据内容得到不一样结果的吗?
,
JiaqI Liang:
对,其他数据量也丢失第二字节,但是什么都没改,现在测试又正常了,没想明白原因