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

[复制链接]
4210|13
 楼主| 499734424 发表于 2012-4-11 17:00 | 显示全部楼层 |阅读模式
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
aozima 发表于 2012-4-11 17:33 | 显示全部楼层
上面那个算手册么?
aozima 发表于 2012-4-11 17:34 | 显示全部楼层
如果通过USART发送数据,外设地址变了会如何?内在地址不变又如何?
 楼主| 499734424 发表于 2012-4-11 17:43 | 显示全部楼层
4# aozima
应该不算,只是一家所言
香水城 发表于 2012-4-11 17:48 | 显示全部楼层
自己想想:共有几个UART接收的地址寄存器? 又有几个数据存储单元?
 楼主| 499734424 发表于 2012-4-11 19:50 | 显示全部楼层
7# 香水城 TO2楼、7楼:
UART接收的地址寄存器只有1个
USART.jpg

所以要从UART接收数据再存储在存储器中,从UART接收的地址寄存器不变,
同理ADC等都一样。
但为什么存储的内存地址寄存器一定需要递增?
不递增可以吗?什么情况下不需要递增?
 楼主| 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])的数据寄存器都只有一个,那样外设地址寄存器递增应该没有什么用武之地吧?
lut1lut 发表于 2012-4-12 09:46 | 显示全部楼层
LZ,当你做Memory to memory传输的时候,个“外设地址寄存器”就是用来指明其中一个memory location的地址,此时它就需要使能地址自增了啊。
香水城 发表于 2012-4-12 10:28 | 显示全部楼层
即使是真正的外设,也会有用到外设地址寄存器递增的情况。

例如操作CAN的滤波寄存器(CAN_FiRx)时;再例如SDIO的响应寄存器;再例如希望同时操作TIM所有通道的捕获/比较寄存器时;可以有很多情况的。
nongfuxu 发表于 2012-4-12 10:34 | 显示全部楼层
打酱油路过。例子:
1)将一个数组DMA到B外设时,需要递增。
2)将AD采样数据存到某个固定内存地址时,设置为不变。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:开始学习中~

5

主题

434

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部