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

关于SCI的FIFO模式,CCSV5.5的大BUG?

       当我对SCI的FIFO进行初始化时,如果使能SCIFFTX寄存器的SCIFFENA位,则TXFFINT位会马上置1,同时也无法通过TXFFINTCLR位使其清零。事实上此时并不满足TXFFINT置位的条件。(我置TXFFST的值和TXFFIL的值不等后再使能SCIFFENA位)。

       另外,使用FIFO发送中断发送数据时,中断的第一次进入是怎么实现的?是利用SCIFFTX上电默认值就满足中断条件实现的吗?

附:初始化代码

void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS=0; //1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
SciaRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
SciaRegs.SCICCR.bit.SCICHAR=7; //8位数据位
SciaRegs.SCICTL1.bit.TXENA=1; //SCIA模块的发送使能
SciaRegs.SCICTL1.bit.RXENA=1; //SCIA模块的接收使能
SciaRegs.SCIHBAUD=0;
SciaRegs.SCILBAUD=0xa3; //波特率为19200

SciaRegs.SCIFFTX.bit.TXFFILIL=10; //发送中断级别为0,也就是当发送FIFO为空时发生中断
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //重新使能发送FIFO的操作
SciaRegs.SCIFFTX.bit.SCIFFENA=1; //使能SCI FIFO的功能
// SciaRegs.SCIFFTX.bit.TXFFST=15; //发送FIFO队列为空,read only
// SciaRegs.SCIFFTX.bit.TXFFINT=0; //没有产生发送FIFO中断read only
SciaRegs.SCIFFTX.bit.TXINTCLR=1; //清除TXFFINT的标志位
SciaRegs.SCIFFTX.bit.TXFFIENA=1; //使能发送FIFO中断
// SciaRegs.SCIFFTX.bit.TXFFILIL=10; //发送中断级别为0,也就是当发送FIFO为空时发生中断

SciaRegs.SCIFFRX.bit.RXFFOVF=0; //接收FIFO没有溢出
SciaRegs.SCIFFRX.bit.RXOVF_CLR=1; //对RXFFOVF标志位没有影响
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //重新使能接收FIFO的操作
SciaRegs.SCIFFRX.bit.RXFIFST=0; //接收FIFO队列为空
SciaRegs.SCIFFRX.bit.RXFFINT=0; //没有产生接收中断
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除接收中断标志位
SciaRegs.SCIFFRX.bit.RXFFIENA=1; //使能FIFO接收中断
SciaRegs.SCIFFRX.bit.RXFFIL=8; //FIFO接收中断级别为8.也就是说当接收FIFO中有8个字符时发生中断

SciaRegs.SCICTL1.bit.SWRESET=1; //重启SCI

}

gui li1:

没有人知道吗?

       当我对SCI的FIFO进行初始化时,如果使能SCIFFTX寄存器的SCIFFENA位,则TXFFINT位会马上置1,同时也无法通过TXFFINTCLR位使其清零。事实上此时并不满足TXFFINT置位的条件。(我置TXFFST的值和TXFFIL的值不等后再使能SCIFFENA位)。

       另外,使用FIFO发送中断发送数据时,中断的第一次进入是怎么实现的?是利用SCIFFTX上电默认值就满足中断条件实现的吗?

附:初始化代码

void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS=0; //1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
SciaRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
SciaRegs.SCICCR.bit.SCICHAR=7; //8位数据位
SciaRegs.SCICTL1.bit.TXENA=1; //SCIA模块的发送使能
SciaRegs.SCICTL1.bit.RXENA=1; //SCIA模块的接收使能
SciaRegs.SCIHBAUD=0;
SciaRegs.SCILBAUD=0xa3; //波特率为19200

SciaRegs.SCIFFTX.bit.TXFFILIL=10; //发送中断级别为0,也就是当发送FIFO为空时发生中断
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //重新使能发送FIFO的操作
SciaRegs.SCIFFTX.bit.SCIFFENA=1; //使能SCI FIFO的功能
// SciaRegs.SCIFFTX.bit.TXFFST=15; //发送FIFO队列为空,read only
// SciaRegs.SCIFFTX.bit.TXFFINT=0; //没有产生发送FIFO中断read only
SciaRegs.SCIFFTX.bit.TXINTCLR=1; //清除TXFFINT的标志位
SciaRegs.SCIFFTX.bit.TXFFIENA=1; //使能发送FIFO中断
// SciaRegs.SCIFFTX.bit.TXFFILIL=10; //发送中断级别为0,也就是当发送FIFO为空时发生中断

SciaRegs.SCIFFRX.bit.RXFFOVF=0; //接收FIFO没有溢出
SciaRegs.SCIFFRX.bit.RXOVF_CLR=1; //对RXFFOVF标志位没有影响
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //重新使能接收FIFO的操作
SciaRegs.SCIFFRX.bit.RXFIFST=0; //接收FIFO队列为空
SciaRegs.SCIFFRX.bit.RXFFINT=0; //没有产生接收中断
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除接收中断标志位
SciaRegs.SCIFFRX.bit.RXFFIENA=1; //使能FIFO接收中断
SciaRegs.SCIFFRX.bit.RXFFIL=8; //FIFO接收中断级别为8.也就是说当接收FIFO中有8个字符时发生中断

SciaRegs.SCICTL1.bit.SWRESET=1; //重启SCI

}

david guo1:

请TI的技术工程师测试一下这个问题,

我也发现,当设置 SciaRegs.SCIFFTX.bit.TXFFIENA=1;后不论我发送数据与否,都会进入到 interrupt void sciaTxFifoIsr(void) ; 这个中断。

以下是我的测试代码:

interrupt void sciaTxFifoIsr(void)

{ SciaRegs.SCIFFTX.bit.TXFFIENA=0; SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK}

interrupt void sciaRxFifoIsr(void)

{

Uint16 i;

for(i=0;i<2;i++)

{

rdataA[i]=SciaRegs.SCIRXBUF.all; // Read data

}

SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag

SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag

PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack

SciaRegs.SCIFFTX.bit.TXFFIENA=1;      //此处打开发送FIFO标志,屏蔽掉下面的发送数据,依然可以出发接收FIFO中断。 for(i=0; i< 2; i++)

{ // SciaRegs.SCITXBUF=rdataA[i]; // Send data

// DSP28x_usDelay(8000); } SciaRegs.SCICTL2.bit.TXINTENA =1;}

请TI的技术支持出来解释下??  我的QQ  3516863899  ,邮箱  gdgly@163.com  欢迎联系我!!!

赞(0)
未经允许不得转载:TI中文支持网 » 关于SCI的FIFO模式,CCSV5.5的大BUG?
分享到: 更多 (0)