关于SCIFIFO发送中断的问题

[复制链接]
4725|6
 楼主| linhai2009 发表于 2010-3-30 12:47 | 显示全部楼层 |阅读模式
FIFO, pi, FOR, sd, se
请教个关于SCI发送FIFO中断的问题:
interrupt void sciaTxFifoIsr(void)
{
    Uint16 i;
    for(i=0; i< 8; i++)
    {
           SciaRegs.SCITXBUF=sdataA[i];     // Send data
        }

    for(i=0; i< 8; i++)                 //Increment send data for next cycle
    {
           sdataA[i] = (sdataA[i]+1) & 0x00FF;
        }

        SciaRegs.SCIFFTX.bit.TXINTCLR=1;        // Clear SCI Interrupt flag
        PieCtrlRegs.PIEACK.all|=0x100;      // Issue PIE ACK
}
其中发送中断级别为8,对这个例程不太理解。当发送中断程序执行完后,FIFO中的数不一定全部发完了,而此时由于FIFO中的未发送数小于发送中断级别,FIFO又会响应中断,而此时下一次要发送的8个数据就会将上一次未发送完的数据覆盖掉。

我感觉在ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;前加上这么一句
if(ScibRegs.SCIFFTX.bit.TXFFST != 0){}会比较合理,确保FIFO为空,保证了本次写入的值全部发送完毕。
xiaoxin1986 发表于 2010-3-30 13:21 | 显示全部楼层
你直接将程序设置成当发送缓冲器中数据小于等于0的时候在发生中断不就好了吗?
易达口香糖 发表于 2010-4-4 00:20 | 显示全部楼层
加上吧,不错
tiger2010 发表于 2010-4-4 10:22 | 显示全部楼层
现在也在调FIFO,感觉这个不是很好用
lam365 发表于 2010-4-4 11:59 | 显示全部楼层
TL16C752B的FIFO中断 怎么用的 ?
liliang9554 发表于 2010-4-8 20:15 | 显示全部楼层
你直接将程序设置成当发送缓冲器中数据小于等于0的时候在发生中断不就好了吗?
xiaoxin1986 发表于 2010-3-30 13:21
可是此时如果我要发送的数据还没准备好呢?
liliang9554 发表于 2010-4-8 20:15 | 显示全部楼层
中断来了之后直接发送错误的数据吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

1930

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部