OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6709|回复: 7

DMA数据流与源/目标地址的关系

[复制链接]

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-7-24
在线时间
7 小时
发表于 2021-8-13 19:33:55 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 laiwei 于 2021-8-14 16:09 编辑

大家好,最近在看F407的DMA传输,有一点不很理解。DMA一开始要配置数据流,并且要开启相关外设的DMA通道,同时还要设置源/目标地址。
那是不是说,源/目标地址中的一个必须要是这个数据流的外设呢?

例程是用串口的TX通道作为DMA的数据流,然后直接在代码中手动开启EN触发了DMA传输,并且目标地址就是串口TX的DR寄存器。

所以DMA的数据流言外之意就是确定了源/目标地址中的一个是吗。。。

总结起来就是:
DMA传输是由软件设置EN位进行触发,
数据流确定了传输的源/目标地址的其中一个?

还有个问题是:为什么DMA传输数据不会在串口数据寄存器还未清空时发送下一数据,DMA的传输速度靠什么来决定的?

最佳答案

查看完整内容[请看2#楼]

DMA是受控传输的 你串口发送,使用DMA的时候,是串口控制DMA的传输。 每次必须上一个字节发送完成,才会触发下一个dma传输,所以不存在覆盖的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-8-13 19:33:56 | 显示全部楼层
laiwei 发表于 2021-8-18 15:18
如果DMA请求被对应的外设发起后,DMA传输一个值呢还是传所有值呢?
如果传一个值的话,那在传值后DMA请求 ...

DMA是受控传输的
你串口发送,使用DMA的时候,是串口控制DMA的传输。
每次必须上一个字节发送完成,才会触发下一个dma传输,所以不存在覆盖的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2021-8-16 10:45:02 | 显示全部楼层
找个探索者指南看一下里面的DMA简介里面的那个DAM控制器的图片应该就挺清晰的了!他要去搬运也要满足他里面的电路进行选择搬运!再到后面图片讲流的感觉挺清晰的
日常敲键--头秃一片
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-8-16 18:59:54 | 显示全部楼层
串口波特率决定了传输速度。发送寄存器未空不会发下一字节。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-7-24
在线时间
7 小时
 楼主| 发表于 2021-8-17 21:58:50 | 显示全部楼层
c2007s 发表于 2021-8-16 18:59
串口波特率决定了传输速度。发送寄存器未空不会发下一字节。

那是说在串口发送寄存器空的时候就会发送DMA请求么?如果DMA的目标地址不是DR(TX)寄存器的话,那DMA是传一次还是持续传输一直到设定的最大数据量呢……
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-7-24
在线时间
7 小时
 楼主| 发表于 2021-8-17 21:59:37 | 显示全部楼层
日渐秃兀 发表于 2021-8-16 10:45
找个探索者指南看一下里面的DMA简介里面的那个DAM控制器的图片应该就挺清晰的了!他要去搬运也要满足他里面 ...

我就是不太理解DMA请求的发生过程
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-7-24
在线时间
7 小时
 楼主| 发表于 2021-8-18 15:18:22 | 显示全部楼层
如果DMA请求被对应的外设发起后,DMA传输一个值呢还是传所有值呢?
如果传一个值的话,那在传值后DMA请求是有的还是没有的?
比如,串口的TX发出了DMA请求,然后DMA将数据传输给TX的DR寄存器,在DR非空时,DMA请求还在吗?如果在的话,为什么DMA不会继续传值把先存在DR寄存器中的值覆盖掉?如果不在的话,是DMA每次传输数据后都会像中断一样清空标志位吗?那下一次DMA是以什么为标志呢?TXE为1还是TXE从0跳变为1(上升沿)?
如果DMA的信息流配置为串口的TX,但DMA配置的是从RAM到DAC的DHR寄存器,那是不是说,TXE为1的时候一直会有DMA请求(即便每次传输都会清一次),之后一次请求对应传输一个数据,一直到数据量达到设定值?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2021-7-24
在线时间
7 小时
 楼主| 发表于 2021-8-19 06:27:55 | 显示全部楼层
正点原子 发表于 2021-8-19 02:20
DMA是受控传输的
你串口发送,使用DMA的时候,是串口控制DMA的传输。
每次必须上一个字节发送完成,才会 ...

哇,感谢原子哥的解答!
所以DMA的数据流配置实际上是在配置DMA请求的使能位,FIFO前后的源/目标地址才是真正的‘数据流’,每当DMA信号使能,DMA请求发起时,DMA会向对应地址传输一个字节并清除DMA请求,直到下次请求再次发起或是传输完成,对么
假若传输对应的源/目标地址中不包括使能数据流的外设,例如用串口的TX做DMA的数据流,源/目标地址是RAM和DAC,那么每当TX的DMA请求被清除后,由于发送寄存器依旧处于‘空’的状态,请求会再一次被发起(只要TX的数据寄存器是空,就算前一次已经清除了DMA请求,还是会立即发起新的请求,而不是下一次请求发生在从有数据到空的边沿),从而上一字节传输完成后就会立即发起下一次传输
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表