关于DMA循环模式的疑问?

2019-07-25 12:15发布

手册上看到DMA循环模式的描述

循环模式
循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。在DMA_CCRx寄存器中
的CIRC位用于开启这一功能。当启动了循环模式,数据传输的数目变为0时,将会自动地被恢
复成配置通道时设置的初值, DMA操作将会继续进行。

问题一:
假设:
 
dma设置为循环模式,设置正常,
unsigned char ArryTest[5]缓存长度为5,

DMA多久会读取一次缓存,

比如 缓存5ms更新一次,那么DMA在这5ms内发送几次缓存数据?
如果只发送一次,那么是不是可以理解为ADC数据寄存器更新后DAM才会发送数据,那么DAM怎么知道数据更新了呢?


问题2:
ADC发送,启动DMA后,

DMA多久会读取一次adc的数据寄存器


比如假设ADC5ms采集一次,那么那么DMA在这5ms内发送几次ADC采集结果?
如果只发送一次,那么是不是可以理解为ADC数据寄存器更新后DAM才会发送数据,那么DAM怎么知道数据更新了呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-07-25 12:43
1,DMA的时间由外设控制,所以多久传输一次,取决于你的触发源。    2,ADC转换完成就会有EOC,EOC会启动传输,如果5ms采集一次,那么就是5ms传输一次。
止天
2楼-- · 2019-07-25 15:20
 精彩回答 2  元偷偷看……
T故事
3楼-- · 2019-07-25 18:21
新手上路,同问一下
l6931639
4楼-- · 2019-07-25 19:04
第一,dma循环模式发送完成后就会重新读取要发送的数据,发送速度通过寄存器可以选择。如果你想要数据更新了再发送,可以设置成普通模式用中断的方式执行
操作系统
5楼-- · 2019-07-25 21:13
本帖最后由 操作系统 于 2017-8-27 17:06 编辑

DMA是一个高效率的数据传送神器.但是并不复杂.DMA初始化完后.ADC转换完成会产生一个完成事件.这个事件会自动触发MDA来读取ADC的DR到指定内存.然后,内存位置自增加到下一个位置.开启循环DMA功能.当时只是下一个内存位置超出指定的最大位置时就回到开始位置罢了.其它的事情.它就不管了.如有开启DMA完成中断事件..会有DMA完成中断事件.
Crossoverall
6楼-- · 2019-07-26 00:37
操作系统 发表于 2017-8-27 17:04
DMA是一个高效率的数据传送神器.但是并不复杂.DMA初始化完后.ADC转换完成会产生一个完成事件.这个事件会自 ...

有个问题,使能循环模式后,还可以使能中断么,如果允许每次传输完起一次中断,是不是需要软件清除中断,那是否会影响依然在运行的dma?

一周热门 更多>