打印
[STM32F1]

STM32的DMA是模拟的,还是真正的?

[复制链接]
1357|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bear1|  楼主 | 2014-9-29 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
真正的DMA是由硬件抢占总线后同时启动两端设备,在一个周期内这边读,那边写。但很多嵌入CPU内的DMA只是模拟而已,启动每一次DMA之前要做不少准备工作(设起始地址和长度等),在传输时往往是先读到芯片内暂存,然后再写出去,即搬一次数据需两个时钟周期,比软件来搬要快一些(不需要取指令,没有循环跳转等额外工作),但如果一次只搬几个字节,还要做一堆准备工作,一般还涉及函数调用,效率并不高。所以这种DMA只对大
数据块才适用。
沙发
aozima| | 2014-9-29 16:13 | 只看该作者
本帖最后由 aozima 于 2014-9-29 18:31 编辑

不管你理解的真正和模拟的是什么样的,DMA都只是适合大的数据块(也可以是非常慢的小数据块,如I2C)。

DMA主要用于慢速外设传输数据,所以DMA的性能只要高于外设的速度就可以了。
准备时间不要大于外设的超时即可(如UART的话只要在发送下一字节前DMA把数据搬来即可)。

DMA一次搬多少数据一般是由接收方决定的,比如没有FIFO的UART一次只能搬一字节,不管你DMA和CPU有多NB。
所以使用DRAM和CACHE的芯片上面,UART这类设备尽量要有FIFO,不然浪费挺大。

从数据手册的总线矩阵上面,DMA的数据搬运是master接口,所以应该属于“真正”的。
不见,你见过的“模拟”的DMA又是什么样的?

使用特权

评论回复
板凳
s_f_tan| | 2014-9-29 17:09 | 只看该作者
模拟的DMA好像没有见过

使用特权

评论回复
地板
mmuuss586| | 2014-9-29 20:05 | 只看该作者
传输数据时,不用软件干预的,应该都算是DMA;
包括你说的模拟DMA,也算是DMA;

使用特权

评论回复
5
pattywu| | 2014-9-30 00:55 | 只看该作者
lz厉害,发明了模拟DMA这个名词。^_^

使用特权

评论回复
6
huzi2099| | 2014-9-30 01:48 | 只看该作者
对于某些情况还是有优势的,比如ADC,dma可以在ADC转换完成后自动发起传送,这样可以实现采样后自动刷新存储。可以设置dma循环在整块完成后再次刷新。

使用特权

评论回复
7
shdjdq| | 2014-9-30 10:06 | 只看该作者
DMA用的好,还是很有好处的。慢速的无所谓,当你是高速处理时,那边还有高速干扰,那时就分身无术了。

使用特权

评论回复
8
zitral| | 2014-9-30 10:24 | 只看该作者
最近被DMA弄的好头疼!LZ说的模拟的DMA应该是带点模仿的意思吧!不应该是区别于“数字”的“模拟”!

使用特权

评论回复
9
PIGYONG801| | 2014-9-30 13:37 | 只看该作者
我想不是模拟的,因在SLEEP时,DMA也在工作,只是为了避免总线冲突才有优先级

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

959

帖子

1

粉丝