OpenEdv-开源电子网

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

F103 DMA的循环模式到底有什么用?

[复制链接]

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-11-17
在线时间
5 小时
发表于 2020-5-9 10:54:45 | 显示全部楼层 |阅读模式
1金钱
今天学习了DMA的应用,在看到循环模式时很迷糊:在每次响应DMA请求时,DMA控制器会把初始值全部重新装进去。那也就是每次DMA的时候,目标内存地址是一样的,那后一次的数据不就把前一次的覆盖掉了吗?
比如我用循环模式去采集ADC在扫描模式中发送的数据,而ADC_DR只能存一个数据(也就是每转换一个通道就要申请一次DMA),每次DMA都把更新后的ADC结果传入相同的内存地址,那前面几次转换的结果不就丢掉了吗?
所以循环模式到底有什么作用,求大侠解答。

最佳答案

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

DMA可以配置成指针增量模式,如果要从ADC搬运数据到SRAM里面,可以保持ADC_DR地址不变,设置内存增量模式,这样就可以记录“变化轨迹”了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

89

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1286
金钱
1286
注册时间
2020-4-7
在线时间
309 小时
发表于 2020-5-9 10:54:46 | 显示全部楼层
DMA可以配置成指针增量模式,如果要从ADC搬运数据到SRAM里面,可以保持ADC_DR地址不变,设置内存增量模式,这样就可以记录“变化轨迹”了。
DMA.jpg
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-27
在线时间
0 小时
发表于 2020-5-9 10:54:47 | 显示全部楼层
菜鸟路过留痕,帮顶
回复

使用道具 举报

0

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2018-8-3
在线时间
8 小时
发表于 2020-5-9 11:12:31 | 显示全部楼层
不懂不能装懂啊,只能帮顶。
回复

使用道具 举报

0

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2583
金钱
2583
注册时间
2019-10-18
在线时间
414 小时
发表于 2020-5-9 14:40:42 | 显示全部楼层
我觉的循环模式和半中断+全中断一起组成的类似双缓冲才是绝配.
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-11-17
在线时间
5 小时
 楼主| 发表于 2020-5-9 15:26:18 | 显示全部楼层
decai 发表于 2020-5-9 14:40
我觉的循环模式和半中断+全中断一起组成的类似双缓冲才是绝配.

如果像ADC采集这样数据长度只有一,岂不是每采集一个数据都要引起中断?那倒不如直接由CPU响应ADC中断读出数据了,DMA的意义又何在呢?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-11-17
在线时间
5 小时
 楼主| 发表于 2020-5-9 15:31:32 | 显示全部楼层
或者我换一个问法:我想像记忆示波器那样在SRAM里记录模拟信号的“变化轨迹”,DMA应该如何设置?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-11-17
在线时间
5 小时
 楼主| 发表于 2020-5-9 16:45:31 | 显示全部楼层
lv浅陌 发表于 2020-5-9 16:21
DMA可以配置成指针增量模式,如果要从ADC搬运数据到SRAM里面,可以保持ADC_DR地址不变,设置内存增量模式, ...

感谢您的回复。指针增量模式是在响应同一次DMA请求时发生的吧,在一次DMA响应过程中如果要传输多个数据可以采用这个模式。但是ADC_DR的宽度为1,一次DMA请求只能传输一个数据,在ADC_DR更新后就是下一次DMA请求了,所以这个模式貌似不管用啊。。。
不知我理解的对不对。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-5-9 23:17:23 | 显示全部楼层
2sc3357 发表于 2020-5-9 16:45
感谢您的回复。指针增量模式是在响应同一次DMA请求时发生的吧,在一次DMA响应过程中如果要传输多个数据可 ...

ADC触发DMA采集, 是每完成一次转发, 触发一次采集, 所以完全没问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 06:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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