当前位置:网站首页>SMT32H7系列DMA和DMAMUX的一点理解
SMT32H7系列DMA和DMAMUX的一点理解
2022-07-05 09:20:00 【若水千点】
DMA和DMAMUX
DMA:无CPU参与下直接进行数据搬运的控制器
DMAMUX:建立DMA请求和DMA通道之间的映射关系,类似于路由的功能。无DMAMUX的MCU,DMA请求和DMA通道的映射关系是固定的,不能由软件修改。有了DMAMUX可以将DMA请求和DMA通道由软件联系起来,实现自定义链接。
以STM32H743为例:
DMAMUX1:DMAMUX1_Channel0-15对应DMA1_Stream0-7和DMA2_Stream0-7。
DMAMUX2:DMAMUX2_Channel0-7对应BDMA_Channel0-7。
具体见下图,理解仅供参考。
触发发生器的例子
1.比如外部中断EXTI触发存储器到存储器/外设的DMA请求
无DMAMUX的情况下:因为EXTI本身没有DMA请求,但EXTI要触发DMA只能在EXTI中断中启动DMA,配置好存储器到存储器/外设的DMA后,然后再EXTI中断中启动DMA。
有DMAMUX的情况下:触发信号HAL_DMAMUX1_REQ_GEN_EXTI0和信号发生器DMA_REQUEST_GENERATORx关联相当于EXTI0具有了DMA请求,然后配置好DMA传输通道,配置好EXTI0,EXTI0就能触发DMA实现DMA传输了。这里边可能MCU已经做好EXTI边沿信号和DMA启动的关联了,不然和在EXTI中断中启动DMA又有什么区别呢。(猜测,没用过)
2.比如GPIO触发DMA请求实现存储器到GPIO的数据传输
无DMAMUX的情况下:GPIO本身没有DMA请求,要实现存储器到GPIO的DMA传输需要借用一个DMA请求,我当初用的是TIM_UP的DMA请求(当然也可以用其它信号,只要能产生DMA请求就行),然后在DMA配置中按照存储器到外设的DMA配置就行,我用这个可以实现输出一段固定波形的信号,信号的CLK和TIM周期一致,如果这段波形要周期性出现可以用另一个定时器,在定时器中断中使能DMA。
本质上是外设1->存储器->外设2的传输,外设1有DMA请求,外设2没有DMA请求,用外设1的请求干外设2的事情。
有DMAMUX的情况下:触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT和信号发生器DMA_REQUEST_GENERATORx关联产生的DMA请求用作GPIO的DMA请求,然后配置DMA传输通道,配置LPTIM定时器,则启动DMA后,LPTIM定时器每次产生1个DMA请求,发送1个数据。如果DMA是循环模式则会根据NDTR循环传输,如果是正常模式则NDTR传完后DMA自动关闭。
同步发生器的例子
同步信号主要用于周期启动DMA
1.定时进行串口DMA发送数据
无DMAMUX的情况:串口都有DMA请求,不需要触发发生器,直接通过外设请求和DMA传输通道关联,但是我要定时发送串口数据,则需要在一个定时器中断中启动串口DMA发送。
有DMAMUX的情况:先进行串口外设和DMA传输通道的关联,然后选择同步信号HAL_DMAMUX1_SYNC_LPTIM1_OUT关联DMAMUX,配置LPTIM实现周期发出同步信号启动DMA。
同步信号是用来启动DMA的,不是DMA的请求,DMA的请求来自串口。
重点理解:
1.触发信号和同步信号都是固定的
2.理解触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT和HAL_DMAMUX1_SYNC_LPTIM1_OUT在两个项目中应用的区别。
触发信号相当于DMA请求信号,同步信号相当于DMA启动信号。
触发信号多用于外设1->存储器->外设2的类型,同步信号多用于存储器->外设里的周期性启动DMA的情况。
在触发信号HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT下,每一次触发信号引起一次DMA请求,而一次定时器的DMA请求只能传输一个DMA数据块。
在同步信号HAL_DMAMUX1_SYNC_LPTIM1_OUT下,一次同步信号启动一次DMA,DMA会传输完设定长度的数据,而不是单个数据块。
只是理解,没有过多验证。
边栏推荐
- Solution to the problems of the 17th Zhejiang University City College Program Design Competition (synchronized competition)
- notepad++
- nodejs_ fs. writeFile
- [code practice] [stereo matching series] Classic ad census: (6) multi step parallax optimization
- Svgo v3.9.0+
- OpenGL - Model Loading
- Applet (global data sharing)
- Rebuild my 3D world [open source] [serialization-2]
- c#比较两张图像的差异
- 交通运输部、教育部:广泛开展水上交通安全宣传和防溺水安全提醒
猜你喜欢
Applet (global data sharing)
一次 Keepalived 高可用的事故,让我重学了一遍它
Attention is all you need
Introduction Guide to stereo vision (4): DLT direct linear transformation of camera calibration [recommended collection]
[ctfhub] Title cookie:hello guest only admin can get flag. (cookie spoofing, authentication, forgery)
The research trend of map based comparative learning (gnn+cl) in the top paper
AUTOSAR从入门到精通100讲(103)-dbc文件的格式以及创建详解
A detailed explanation of the general process and the latest research trends of map comparative learning (gnn+cl)
[beauty of algebra] singular value decomposition (SVD) and its application to linear least squares solution ax=b
顶会论文看图对比学习(GNN+CL)研究趋势
随机推荐
AUTOSAR from getting started to mastering 100 lectures (103) -dbc file format and creation details
牛顿迭代法(解非线性方程)
编辑器-vi、vim的使用
Information and entropy, all you want to know is here
一题多解,ASP.NET Core应用启动初始化的N种方案[上篇]
Kotlin introductory notes (IV) circular statements (simple explanation of while, for)
Jenkins pipeline method (function) definition and call
[beauty of algebra] solution method of linear equations ax=0
Codeforces round 684 (Div. 2) e - green shopping (line segment tree)
22-07-04 西安 尚好房-项目经验总结(01)
Kotlin introductory notes (V) classes and objects, inheritance, constructors
Codeworks round 639 (Div. 2) cute new problem solution
Introduction Guide to stereo vision (3): Zhang calibration method of camera calibration [ultra detailed and worthy of collection]
Nodemon installation and use
【ManageEngine】如何利用好OpManager的报表功能
【愚公系列】2022年7月 Go教学课程 003-IDE的安装和基本使用
Node collaboration and publishing
C form click event did not respond
520 diamond Championship 7-4 7-7 solution
Priority queue (heap)