请教SCI的FIFO接收问题

2024-05-09 08:53

1. 请教SCI的FIFO接收问题

  因为所用的485收发芯片需要另外对发送和接收使能进行分别控制,控制了之后就能够接收了。
  但是又发现偶尔会接收到错误的信息,比如应该接收4个数分别是12、34、56、78,结果可能接收到了0X8015这样很大数,或者可能4个数的接收顺序有错乱。对于像0x8015这样的数,最高位是1,按照SCIRXBUF的位定义是发生了帧错误。

请教SCI的FIFO接收问题

2. 请教关于SCI 发送FIFO Buffer的问题

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个数据就会将上一次未发送完的数据覆盖掉。

3. 请问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通讯就不一样,不管数据有几个字节,接收完一个帧就可以产生一次中断,能解决这个问题。

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

4. 请教个FIFO的使用问题

先进先出 和排队一个道理~

5. 请问FIFO是什么意思?

FIFO( First Input First Output)简单说就是指先进先出。由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。作为一种新型大规模集成电路,FIFO芯片以其灵
活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。
在系统设计中,以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统为目的而广泛使用FIFO存储器,从而提高了系统性能。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其
内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列
构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。

扩展资料:
FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作,它主要有几方面的功能:
1、对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;
2、数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;
3、允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。
参考资料来源:百度百科-FIFO存储器

请问FIFO是什么意思?

6. DSP28335 sci fifo中断 一直发送数据

我也有同样问题,求解?

7. 如何计算异步FIFO深度

异步FIFO最小深度计算原理

      如果数据流连续不断则FIFO深度无论多少,只要读写时钟不同源同频则都会丢数;
FIFO用于缓冲块数据流,一般用在写快读慢时,遵循的规则如下:


{FIFO深度 /(写入速率 - 读出速率)} = {FIFO被填满时间}  >  {数据包传送时间}= {写入数据量 / 写入速率}

即:确保对FIFO写数据时不存在overflow,从FIFO读出数据时不存在underflow.

     例:A/D采样率50MHz,dsp读A/D读的速率40MHz,要不丢失地将10万个采样数据送入DSP,在A/D在和DSP之间至少加多大容量(深度)的FIFO才行?
100,000 / 50MHz = 1/500 s = 2ms
(50MHz - 40MHz) * 1/500 = 20k既是FIFO深度。


一种错误的算法(我也犯了同样的错误):
100,000 / 40MHZ= 1/400s = 2.50ms
(50M - 400M)*1/400 =25K.那么这样进去的数据就不是100K了,而是100K+50M*(0.0025-0.002)=125,000bit,错误在时间的计算。

如何计算异步FIFO深度

8. 请教一下关于CPLD和FIFO的问题

关于第二个问题,主要现在电路已经做成,有些线已经无法再连接,看能不能从软件方面补救一下。我的FIFO不是靠空满逻辑来读数的,因为我在发送数据给FIFO和从FIFO中读出的数据是一一对应的,有多少数读多少数,不多也不少。但是现在因为FIFO读使能和DMA通道打开之间有个时间差,所以我担心这段时间内没有读到FIFO中的数据,使读上去的数据比预期的要少。