TI中文支持网
TI专业的中文技术问题搜集分享网站

DSP28377D SCI FIFO发送中断大于8位深度时丢数问题

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:

对,其他数据量也丢失第二字节,但是什么都没改,现在测试又正常了,没想明白原因

赞(0)
未经允许不得转载:TI中文支持网 » DSP28377D SCI FIFO发送中断大于8位深度时丢数问题
分享到: 更多 (0)