以下是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<TXindex1;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的功能进行通信是非常合理的,而且资源利用效率高。
用户1482250 2010-7-8 22:10