DSP28335笔记--SCI篇

        采用FIFO来实现数据的发送与接收,一般就是指采用FIFO中断。在标准SCI模式下通过中断方式来接收或者发送数据可以发现, 每接收或者发送一个字符就要进一次中断,如果发送的字符比较多的话,很明显,CPU要不断地去响应接收或者发送中断,CPU的开销就大大增加了。FIFO就是为了解决这个问题的。
        当SCI的RXSHF将引脚SCIRXD上的数据装配好后, 发送到接收FIFO中,此时FIFO并不通知CPU来读取数据,将接收到的数据可以继续写入FIFO。当FIFO中的数据个数等于预设的FIFO中断级位RXFFIL时,接收中断标志位RXFFINT被置位,在接收中断服务子程序中,CPU可以把这些数据全部读取,很明显,这样节省了CPU的开销,也提高了效率。
        FIFO模式下发送数据也是一样,CPU可以将需要发送的多个字符写入发送FIFO中,发送时, TXSHF直接从FIFO中取出数据,将其发送出去,无需CPU干涉。当发送FIFO中剩余的字符数与预设的发送中断级位TXFFIL相等时,发送FIFO中断标志位TXFFINT被置位,在发送中断服务子程序中,CPU可以继续向FIFO写入需要发送的多个字符。通常,发送中断级位的值设为0,即发送FIFO空时,进入发送中断。
        以FIFO接收数据为例:
int i;
for(i=0;i<8;i++)
{
buffer[i]=SciaRegs.SCIRXBUF.all;

}

         因为FIFO遵循的是先入先出的原则,则读取时第一个被读取的字符也是之前第一个被存入的字符,读取的字符顺序和存入时的完全一样。读上面代码有没有发现:不是从FIFO中读取数据吗?怎么还是使用的是SCIRXBUF呢?如下图所示,SCIRXBUF就像是SCI接收操作这一块的代言人一样,FIFO中的数据还是通过SCIRXBUF读取,只是每读取一次,接收FIFO的指针会向后移动一个单元。当读取操作完成,指针指向的是存放最后一个字符的单元,图中指向的是“p”,即RXFIFO_7。为了能在下一次进入接收中断时能继续正确读取数据,最后还需要复位FIFO的指针,使其指向RX FIFO_0。F28335之SCI笔记—FIFO实现数据发送与接收。


  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值