请问2812型DSP的SCI模块中,接收和发送数据都是16级的FIFO深度是什么意思?对这个16级深度的FIFO不太理解

如题所述

所谓的FIFO就是先进先出的意思。SCI工作在FIFO模式下一般是因为所传输的信息并不是以一个帧为单位,而是以多个帧组成的一个包为信息单位的。比如说我的一个数据包由5个帧组成,第一个为控制字节,后四个字节共同组成一个浮点数。这时你可以设置FIFO接收中断为5个字节时产生中断。
设置以后,每接收到5个字节后才会产生一次中断,而不是每接收一次产生一次中断。这样可以大幅减小CPU的开销。而先进先出的意思就是:在中断中,你读FIFO接收寄存器读到的数据是首先接收到的数据,再读一次的话读到的是接收到的第二个数据。而16深度的话就是最多能保存最近的16个接收数据,如果接收数据超过16个的话会产生相应的溢出,可以软件编程对溢出进行处理。

对于发送FIFO也是一样,你可以一次将多个数据放到发送FIFO中,然后DSP按先后顺序依次发送数据。
不过我个人一般不使用FIFO功能,基本都是工作在正常模式。对于多字节的数据传输往往采用can通讯的方式,can通讯一帧数据最多可以发送8个字节。FIFO队列接收有一个缺点就是,接收的数据包格式的帧数不能改变,如果是5个字节就必须都是5个字节。如果一会是5个字节,一会是3个字节。那3个字节的数据包会和下一个数据包的前两个字节产生一次中断,由于不同数据包的信息不同这样软件不易处理。can通讯就不一样,不管数据有几个字节,接收完一个帧就可以产生一次中断,能解决这个问题。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答