当前位置: 首页 > article >正文

DMA 之FIFO的作用

目录

1.FIFO( 进先出存储器缓冲区)

2.FIFO的作用:


1.FIFO( 进先出存储器缓冲区)

当两个DMA都调用总线时,总线仲裁会根据优先级分配总线资源。即分配给其中优先级最高的DMA,另一个DMA的数据会暂时存储在FIFO中。

  1. DMA控制器和AHB有三个接口:

    1. 一个Slave接口(用于CPU对它进行编程)

    2. 两个Master接口,允许将DMA去开启两个AHB总线上两个从设备之间的信号通信。

    3. 每个DMA都具有8个Streams

          注意:不是在从外设到内存模式时双向传输,即同一模式下只能从单一方向传输

      1. 每个Stream都只能单向传输(图中双向箭头的意思是stream可以从外设到内存,内存到外设,内存到内存)

      2. Steam可被配置的模式

        1. 从内存到外设

        2. 从外设到内存

        3. 从内存到内存

 

假如没有FIFO,数据进来一次就立刻通过流输出,DMA占用了总线CPU就不能占用总线了,而总线的带宽一般是32为,一个字节进来就打断一次,效率太低了。

但是有了FIFO,可以先存够相应字节再一起发出去,提高了资源的利用率;FIFO缓存的大小可以看手册,stm32F4一般为16个字节。

2.FIFO的作用:

1,减少AHB带宽的占用,减少AHB总线的仲裁,让CPU能够在AHB总线上占用更大的带宽而不需要和DMA经常竞争总线。(DMA接收数据时可以旁路AHB总线)

2,减少溢出,在需要动态扩展内存时,DMA会暂存数据进入FIFO,给CPU执行动态扩展内存争取时间,防止溢出。

3、DMA多路Stream仲裁时,FIFO可以多路Stream缓冲,极大提高并发性。(假如串口和ADC都来数据,FIFO可以避免数据发生错误)

假如没有FIFO,数据进来一次就立刻通过流输出,DMA占用了总线CPU就不能占用总线了,而总线的带宽一般是32为,一个字节进来就打断一次,效率太低了。

但是有了FIFO,可以先存够相应字节再一起发出去,提高了资源的利用率;FIFO缓存的大小可以看手册。STM32F4的FIFO大小为16字节。

下一篇

DMA Burst的妙用https://mpbeta.csdn.net/mp_blog/creation/editor/146577388


http://www.kler.cn/a/611829.html

相关文章:

  • .NET开源的智能体相关项目推荐
  • c#的反射和特性
  • Docker实现MySQL主从复制配置【简易版】
  • 旅游纵览杂志旅游纵览杂志社旅游纵览编辑部2025年第2期目录
  • 微服务与分布式系统
  • Axure设计之中继器表格——拖动列调整位置教程(中继器)
  • python文件保存
  • Nextjs15 - 服务端组件(RSC)与客服端组件
  • SVTAV1热点函数-svt_ext_all_sad_calculation_8x8_16x16_avx2
  • python面试-基础
  • thinkphp8.0\swoole的websocket应用
  • vue配置.eslintrc、.prettierrc详解
  • Android 问真八字-v2.1.7[看八字APP]
  • Netty源码—8.编解码原理二
  • 2025年具有AI招聘管理系统选型及攻略分享
  • Rust从入门到精通之入门篇:8.基本数据结构
  • 快速入手-基于Django-rest-framework的mixins混合类(五)
  • 自然语言处理(NLP)技术的应用面有哪些
  • 如何卸载雷池 WAF
  • 通义Qwen实战(2): vllm框架部署实战