短线外汇投资:DSP-F2812的C语言心得记录6-SCI通信发送模块中FIFO增强特性的使用方法_Fu...

来源:百度文库 编辑:中财网 时间:2024/05/14 03:03:20

DSP-F2812C语言心得记录6-SCI通信发送模块中FIFO增强特性的使用方法

SCI通信发送的过程中,有两种发送的方式供选择,一种是利用SCI模块的普通功能(即查询等待标志位的方式进行),另一种是利用F2812的增强特性FIFO功能进行数据的传送。比较这两种数据发送的方式发现,前一种查询等待的方式在发送一个字节的过程中会占用一个周期中的1ms时间(这是波特率为9600bps时候的情况),而后一种方式则基本不占用系统的周期等待时间,直接往Buf里面写数据就会自动的往外发送。

以下是FIFO功能的增前特性描述:

我在编程序的时候只用到增强特性中FIFO的发送功能,通过将SCIFFTX寄存器中的SCIFFEN位置1,使能FIFO模式。在任何操作状态下SCIRST都可以复位FIFO模式。

本人对寄存器的设置是

ScibRegs.SCIFFTX.all=0xE040; //1(1表示SCI FIFO可以恢复发送或接收)/1(使能SCI FIFO增强功能)/1(重新使能发送FIFO操作)/00000(发送FIFO是空的)/0(没有TXFIFO中断)/1(清除TXFFINT标志位)/0(中断被禁止)/00000(中断级别为0)

ScibRegs.SCIFFCT.all=0x00; //禁止串口自动检测波特率

for(temp=1;temp

   {

    ScibRegs.SCITXBUF=DateReceiveBuf[temp];

    }

//然后FIFO就会把所要发送的数据都会自动的发送出去

ScibRegs.SCIFFTX.bit.SCIFFENA=0; //禁止FIFO功能,以确保利用回SCI的通信接收中断功能

上述的FIFO功能设置并不占用其它定时器中断的时间,这样可以有效的提高周期的资源利用率。提高了通信的效率。

对于第一种查询等待的方式,其中的设置是要等待一个字节完全的发送出去才能够进行其它模块的工作,这样的话是非常耗用时间和DSP的资源利用率的,而且其它模块的时间根本得不到保证,以下是我在调试时的一些相关设置:

ScibRegs.SCITXBUF=DateReceiveBuf[temp];

while(!((1<<6) & ScibRegs.SCICTL2.all)); //等待这个字节的数据完全的发送出去,该指令按照波特率为9600bps来算的话,发送一个字节的时间将耗时1ms,这样是很浪费资源的,其它模块的功能根本执行不了。

根据上述的比较会发现,利用FIFO的功能进行通信是非常合理的,而且资源利用效率高。