您好!
我正在处理 SCI F28069 (RS232)、我正在尝试使用 FIFO 硬件缓冲器。 我将 RX 中断设置为8个字节。
中断成功、但只有前4个字节被正确格式化。 接下来的4个字节写入的错误值似乎是随机的。 框架似乎是随机接收的,极少按正确的顺序接收。
如果我将中断配置为在接收一个字节后触发、它会起作用、但我会失去 FIFO 的所有关注、并将中断数量乘以8。 如果您可以查看设置并向我解释如果我做得不好如何处理 FIFO、我可能会欺骗您。
非常感谢您的帮助和支持
我在 Ubuntu 16.04 LTS 上使用 CCS 6.1.3.00033与 TI 编译器 V15.12.1.LTS 和 XDS100V3 JTAG。
下面是 SCI 的设置代码以及其中使用的代码。
void scia_fifo_init()
{
EALLOW;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;//空闲线协议
SciaRegs.SCICCR.bit.LOOPBKENA=0 ;//无回路
SciaRegs.SCICCR.bit.parity = 1;//奇偶校验:0奇数-1:偶数
SciaRegs.SCICCR.bit.PARITYENA=1 ;//奇偶校验使能
SciaRegs.SCICCR.bit.SCICHAR = 7;// 8个字符位
SciaRegs.SCICCR.bit.stopbits = 0;// 0:1停止位1:多路信号分离位去停止
SciaRegs.SCICTL1.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=0 ;
SciaRegs.SCICTL2.bit.RXBKINTENA=1 ;
SciaRegs.SCICCR.bit.LOOPBKENA=0 ;//启用回路
SciaRegs.SCIHBAUD = 0x0001;
SciaRegs.SCILBAUD = 0x0024;
//BufferSize
SciaRegs.SCIFFTX.ALL = 0x0C028;
SciaRegs.SCIFFRX.ALL = 0x0028;
SciaRegs.SCIFFCT.all = 0x00;
SciaRegs.SCICTL1.all = 0x0023; //从复位中撤回 SCI
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
EDIS;
}
_interrupt void sciaRxFifoIsr (void)
{
uint16 i=0;
SciLoopCount++;
for (i=0;i<8;i++)
{
SCI_rdataA[i] = SciaRegs.SCIRXBUF.bit.RXDT;//.all; //读取数据
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; //清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; //清除中断标志
PieCtrlRegs.PIEACK.ALL |= 0x100; //发出 PIE ACK
}