DMA原理

DMA配置过程

在这里插入图片描述

DMA事务

在这里插入图片描述
在这里插入图片描述

DMA框图

在这里插入图片描述

DMA特性

在这里插入图片描述在这里插入图片描述

DMA_FIFOMode是什么,有什么用

DMA FIFO配置

  这里我先提出一个问题:我们为什么要配置FIFO?对于串口的每个DMA请求,都立刻使用DMA 直接 传输到目的地不好吗?

使用FIFO的最主要好处是:假设DMA运输方向为寄存器至内存,当寄存器数据宽度>内存数据宽度时,如果使用直接模式传输,会发生高位数据丢失的现象。FIFO可以对需要传输数据进行数据封装/解封,以32位数据转移到16位数据为例,直接模式传输会丢失高16位的数据,而使用FIFO就不会丢失高16位的数据,如例如,在DMA搬运后,0x00-0x01存放低16位数据,0x02-0x03存放高16位数据。

在这里插入图片描述 对于STM32F4来讲,每个DMA stream都有4 words即16 bytesFIFO可用。它用来暂存来自DMA源端的数据,每当FIFO里存放的数据达到设定的阈值后,数据就会被移走。阈值可以设置为从1个字到4个字的深度。
启用DMA的FIFO可以最大程度地避免数据传输过程中的溢出问题,可以减少DMA对内存的访问次数从而减少总线访问竞争,通过BURST分组传输优化传输带宽以提升芯片性能。利用FIFO,通过对源端/目标端的数据进行打包或拆包以适应不同数据宽度的访问需求,让DMA的使用更为方便灵活。

在配置FIFO的过程中,我们还需要配置DMA Burst传输或称DMA节拍传输。即几个数据4/8/16被封装成1组,或称1个Burst,或称1节。在一节内逐个进行数据传输,每个数据的传输相当于1拍。俨如音乐里的节拍,3/4拍代表以四分音符为一拍,每小节3拍。对于每1节内的数据传输,DMA对总线的占用不会被总线矩阵仲裁器解除或打断,以保证每节数据的可靠完成。根据数据手册STM32F4xx中文参考手册.pdf,每拍Burst传输的数据大小通常等于外设 FIFO 大小的一半。

我们这里配置FIFO大小为DMA_FIFOThreshold_Full,上面我们将内存缓冲区数据宽度配置为1 Byte,这里配置内存缓冲区每小节8拍。所以每拍Burst传输的数据为2 Words,正好等于FIFO的一半。
在这里插入图片描述

DMA_FIFOThreshold_Full是什么,怎么用

DMA_FIFOThreshold_Full是一个枚举值,表示当FIFO满时触发DMA传输。当FIFO中的数据量达到或超过这个阈值时,DMA控制器会开始传输数据。

通过将DMA_FIFOThreshold_Full赋值给DMA_InitStructure.DMA_FIFOThreshold,可以配置DMA控制器在FIFO满时触发数据传输。这样可以避免在数据传输过程中出现中断或延迟,提高数据传输的效率。

DMA通道选择

在这里插入图片描述

DMA1映射对应通道

在这里插入图片描述

DMA2映射对应通道

在这里插入图片描述

DMA数据流

在这里插入图片描述

DMA简介

在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值