OpenEdv-开源电子网

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

最近在学STM32的DMA? 有两个概念有点模糊不清。

[复制链接]

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
发表于 2016-1-24 13:57:08 | 显示全部楼层 |阅读模式
31金钱
大家好。。我就是那一条脸皮比较厚的大一菜狗。。原谅我的出现让原子论坛充斥一些低级问题.......

寄存器应该就是处于内存顶端的储存器吧?   寄存器和内存不都是有具体地址 而且可以放东西的地方么? 我是这么理解的。

STM32   DMA 的转移方向中     外设  和 储存器  的具体区别又是什么呢?       求通俗解释。

最佳答案

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

DMA的作用是代替CPU搬运数据,这样在DMA搬运数据的同时,CPU可以干别的事情。至于为什么区别存储器和外设我个人理解这个应该跟芯片的设计有关。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-24 13:57:09 | 显示全部楼层

DMA的作用是代替CPU搬运数据,这样在DMA搬运数据的同时,CPU可以干别的事情。至于为什么区别存储器和外设我个人理解这个应该跟芯片的设计有关。
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-24 22:04:20 | 显示全部楼层
外设就指的是SPI,GPIO,I2C,USART这种功能性硬件。存储器就是片内RAM或是FLASH。
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-24 22:28:48 | 显示全部楼层
ricefat 发表于 2016-1-24 22:04
外设就指的是SPI,GPIO,I2C,USART这种功能性硬件。存储器就是片内RAM或是FLASH。

也就是外设的寄存器吧? 既然DMA就是将一个地址里面的东西转移到另一个地址里面, 那么DMA区分外设和储存器的意义又是什么呢?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-25 09:23:05 | 显示全部楼层
中国救星 发表于 2016-1-24 22:28
也就是外设的寄存器吧? 既然DMA就是将一个地址里面的东西转移到另一个地址里面, 那么DMA区分外设和储存 ...

DMA全称就是Direct Memory Access,直接内存访问,从原理上本来就只能是从一个存储器搬运到另外一个存储器。

这不过STM32中内部存储器和外设地址存在映射关系,你从一个存储器搬运到一个外设,跟从一个存储器搬运到另外一个存储器本质上没有区别。我没有仔细看过库函数外设和存储器在值上有什么区别。具体的你可以看看这个
http://anlx27.iteye.com/blog/1539628
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-25 11:23:15 | 显示全部楼层
我这么理解的,有点乱:
1.寄存器比内存速度快。但是非常小。硬件定义该放啥就只能放啥,我们要用就得拿出来放到内存里处理。内存就像一个大缓冲区。
2.DMA的工作以前本来是处理器来做的,为了让处理器不那么累,就给他雇了个秘书DMA来做一些简单的事。这样处理器就腾出手来做一些重要的或者说只有他才能做的事。
3.处理器是总经理,内存就是总经理的办公桌,他坐在这个桌子上不能动,只能处理桌子上有的东西。要做任何事都得把东西先放到桌子上。为了让他不停处理事情,就把DMA叫过来专门给他往桌子上搬或搬走,不用他自己搬来搬去。
小小蜗牛
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-25 13:09:41 | 显示全部楼层
ricefat 发表于 2016-1-25 09:23
DMA全称就是Direct Memory Access,直接内存访问,从原理上本来就只能是从一个存储器搬运到另外一个存储 ...

谢谢哥
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-25 13:10:48 | 显示全部楼层
jiutianshenjian 发表于 2016-1-25 11:23
我这么理解的,有点乱:
1.寄存器比内存速度快。但是非常小。硬件定义该放啥就只能放啥,我们要用就得拿出 ...

哥你的比喻真是形象........理解是能理解。我想问一下DMA区分外设和储存器的意义是什么?
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-25 13:56:22 | 显示全部楼层
这个事情和dma没有关系,没有dma也需要做,dma只是替处理器做。
小小蜗牛
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-25 15:03:37 | 显示全部楼层
jiutianshenjian 发表于 2016-1-25 13:56
这个事情和dma没有关系,没有dma也需要做,dma只是替处理器做。

。。。。我用CPU给两个地址用个中间变量直接就可以调换内容。不用区分外设和储存器啊。
回复

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2016-1-25 16:09:16 | 显示全部楼层
DMA从外设到RAM,或者是从RAM到外设是,是因为外设是有硬件控制,通过一些标志位来判断是否请求DMA,如果你不用外设模式,DMA 一样会工作,但是DMA会按总线速度去工作,对外设来就没什么意义了
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-25 16:55:46 | 显示全部楼层
中国救星 发表于 2016-1-25 15:03
。。。。我用CPU给两个地址用个中间变量直接就可以调换内容。不用区分外设和储存器啊。

互换不用中间变量也可以啊。异或和加减法都行。
这跟外设没关系啊。都是内存的东西。
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-1-25 17:03:30 | 显示全部楼层
上次你不是看了adc采集吗,adc采集到的放到数据寄存器里了,你怎么用里面的值呢?
这不就得需要内存了
小小蜗牛
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-25 17:11:02 | 显示全部楼层
jiutianshenjian 发表于 2016-1-25 17:03
上次你不是看了adc采集吗,adc采集到的放到数据寄存器里了,你怎么用里面的值呢?
这不就得需要内存了

谢谢哥。 大概好像是能领会一点意思。。。我再想想? 。。我的意思是为什么DMA 要设立那个 外设到储存器 , 储存器到储存器 储存器到储存器 的方向选择?  直接把他们全当成内存不行么? 反正DMA所要的信息只有地址而已? 它要做的就是将一个地址的内容放到另一个地址里? 为什么搞得这么这么复杂在使用之前还要区分外设地址和储存器地址。 有什么具体意义呢。
回复

使用道具 举报

10

主题

65

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-1-9
在线时间
30 小时
 楼主| 发表于 2016-1-25 17:46:18 | 显示全部楼层
jiutianshenjian 发表于 2016-1-25 17:03
上次你不是看了adc采集吗,adc采集到的放到数据寄存器里了,你怎么用里面的值呢?
这不就得需要内存了

我理解力有点底下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 11:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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