打印

关于SCIFIFO发送中断的问题

[复制链接]
3805|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,感觉这个不是很好用

使用特权

评论回复
5
lam365| | 2010-4-4 11:59 | 只看该作者
TL16C752B的FIFO中断 怎么用的 ?

使用特权

评论回复
6
liliang9554| | 2010-4-8 20:15 | 只看该作者
你直接将程序设置成当发送缓冲器中数据小于等于0的时候在发生中断不就好了吗?
xiaoxin1986 发表于 2010-3-30 13:21
可是此时如果我要发送的数据还没准备好呢?

使用特权

评论回复
7
liliang9554| | 2010-4-8 20:15 | 只看该作者
中断来了之后直接发送错误的数据吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

1930

帖子

2

粉丝