打印

DMA什么时候需要设置为递增,什么时候设置为不变呢?

[复制链接]
3149|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DMA_PeripheralInc 用来设定外设地址寄存器递增与否。
DMA_PeripheralInc_Enable           外设地址寄存器递增
DMA_PeripheralInc_Disable          外设地址寄存器不变


DMA_MemoryInc 用来设定内存地址寄存器递增与否。
DMA_PeripheralInc_Enable           内存地址寄存器递增
DMA_PeripheralInc_Disable          内存地址寄存器不变

那到底什么时候需要设置为递增,什么时候设置为不变呢?
最好能举例说明一下。
沙发
香水城| | 2012-4-11 17:25 | 只看该作者
比如要从UART接收数据再存储在存储器中,从UART接收的地址寄存器不变,存储的内存地址寄存器递增。

使用特权

评论回复
板凳
499734424|  楼主 | 2012-4-11 17:31 | 只看该作者
本帖最后由 499734424 于 2012-4-11 17:41 编辑

2# 香水城
还是不大明白,
找到这个说法,感觉和手册上讲解的差距太大
http://bbs.**/BLOG_ARTICLE_123085.HTM

QQ截图20120411174049.jpg (40.45 KB )

QQ截图20120411174049.jpg

使用特权

评论回复
地板
aozima| | 2012-4-11 17:33 | 只看该作者
上面那个算手册么?

使用特权

评论回复
5
aozima| | 2012-4-11 17:34 | 只看该作者
如果通过USART发送数据,外设地址变了会如何?内在地址不变又如何?

使用特权

评论回复
6
499734424|  楼主 | 2012-4-11 17:43 | 只看该作者
4# aozima
应该不算,只是一家所言

使用特权

评论回复
7
香水城| | 2012-4-11 17:48 | 只看该作者
自己想想:共有几个UART接收的地址寄存器? 又有几个数据存储单元?

使用特权

评论回复
8
499734424|  楼主 | 2012-4-11 19:50 | 只看该作者
7# 香水城 TO2楼、7楼:
UART接收的地址寄存器只有1个


所以要从UART接收数据再存储在存储器中,从UART接收的地址寄存器不变,
同理ADC等都一样。
但为什么存储的内存地址寄存器一定需要递增?
不递增可以吗?什么情况下不需要递增?

使用特权

评论回复
9
499734424|  楼主 | 2012-4-12 08:23 | 只看该作者
谢谢香主,昨晚看了别人写的程序,今天算是思路清晰许多,不过对于外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])的数据寄存器都只有一个,那样外设地址寄存器递增应该没有什么用武之地吧?

使用特权

评论回复
10
lut1lut| | 2012-4-12 09:46 | 只看该作者
LZ,当你做Memory to memory传输的时候,个“外设地址寄存器”就是用来指明其中一个memory location的地址,此时它就需要使能地址自增了啊。

使用特权

评论回复
11
香水城| | 2012-4-12 10:28 | 只看该作者
即使是真正的外设,也会有用到外设地址寄存器递增的情况。

例如操作CAN的滤波寄存器(CAN_FiRx)时;再例如SDIO的响应寄存器;再例如希望同时操作TIM所有通道的捕获/比较寄存器时;可以有很多情况的。

使用特权

评论回复
12
nongfuxu| | 2012-4-12 10:34 | 只看该作者
打酱油路过。例子:
1)将一个数组DMA到B外设时,需要递增。
2)将AD采样数据存到某个固定内存地址时,设置为不变。

使用特权

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

本版积分规则

个人签名:开始学习中~

5

主题

434

帖子

2

粉丝