搜索
bottom↓
回复: 11

谁来普及下ADC是如何向DMA发出请求的?

[复制链接]

出0入36汤圆

发表于 2020-1-13 22:17:27 | 显示全部楼层 |阅读模式
    以F030为例,我们知道将 ADC中DMAEN的bit写1后就开启了DMA传输。 手册中描述当DMA 模式开启时(ADC_CFGR1 寄存器中的DMAEN =1), 每次“转换结束时”都会产生一个
DMA 请求。这样就允许把在ADC_DR 寄存器中的转换数据传送到软件指定的目标地址中。  我的理解是每次ADC转换完成后置位 转换结束标志EOC, 是用这个标志来产生DMA
请求毕竟中断也是由这货来传达(所以清除这货是否就可以清除或者说阻止DMA请求产生)。 我做了一个测试: 用一个定时器的更新事件(假设1ms)来触发ADC,ADC用DMA
正常模式搬运(搬运完N个数据后停止搬运进入中断置位f标志)。 在程序中监测到f后,将定时器复位从0开始计数并清除溢出更新标志,跟着将ADC转换完成标志EOC清除掉。
最后再次开启DMA的传输,我的理解是DMA搬运的首个数据应该是在定时器溢出时产生。但实际仿真却是立即搬运了一次数据,是否清除EOC并不能清除上次已经潜伏下的DMA请求?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入36汤圆

 楼主| 发表于 2020-1-14 13:02:46 来自手机 | 显示全部楼层
sme 发表于 2020-1-14 08:29
不是靠EOC。有另外的硬件,只要转换完成就会有DMA请求。

那这个首次数据如何同步呢

出0入0汤圆

发表于 2020-1-14 13:30:31 | 显示全部楼层
这个理解与文档不符,因而据此的推论也是有偏差的(RM中EOC与DMA请求是并行的):
我的理解是每次ADC转换完成后置位 转换结束标志EOC, 是用这个标志来产生DMA
请求

出0入36汤圆

 楼主| 发表于 2020-1-14 16:40:44 来自手机 | 显示全部楼层
styleno1 发表于 2020-1-14 13:30
这个理解与文档不符,因而据此的推论也是有偏差的(RM中EOC与DMA请求是并行的):
...

就是说无法清除上一次产生的DMA请求了? 那再次使能DMA时,如何确保搬运的不是使能前产生的请求?

出0入0汤圆

发表于 2020-1-14 17:12:10 | 显示全部楼层
DMA请求应该没有记忆功能,错过就没了。可能是你代码问题。

出0入36汤圆

 楼主| 发表于 2020-1-15 13:36:12 | 显示全部楼层
styleno1 发表于 2020-1-14 17:12
DMA请求应该没有记忆功能,错过就没了。可能是你代码问题。

   再次使能DMA前,能清的都清了。

出0入36汤圆

 楼主| 发表于 2020-1-15 13:50:22 | 显示全部楼层
sme 发表于 2020-1-14 18:24
要确保不出错,有以下措施:
1. 确保先开DMA(DMAEN=1),再启动AD转换(ADSTART=1)。
2. 如果原来转换 ...

感谢回复,AD倒是没有没有停过。
如果原来转换过,那应该按以下处理?
1.清空TIM触发标志.
2. ADSTP=1,停止AD。
3. DMAEN=0,重设外设和buf地址以及传输数量。
4. 读DR 清标志。
5 .DMAEN=1  
6. ADSTART=1,等待TIM触发信号到来。
ADSTP=1,停止AD。应该只是暂停转换,不需要重新初始化并校准AD吧?
DMA传输完,需要采集下一轮数据时重复1~6。

另 FCM32F030可以私信下参考价格吗?

出0入0汤圆

发表于 2020-1-15 14:16:55 | 显示全部楼层
styleno1 发表于 2020-1-14 17:12
DMA请求应该没有记忆功能,错过就没了。可能是你代码问题。

会的  stm32的定时器dma请求会被保持的

出0入0汤圆

发表于 2020-1-15 14:48:02 | 显示全部楼层
myxiaonia 发表于 2020-1-15 14:16
会的  stm32的定时器dma请求会被保持的

有道理,我看了下应用文档AN4031,确实提到了:

DMA request enable bit in the peripheral control register should be reset ("0") to guarantee that any pending request from peripheral side is cleared.

出0入0汤圆

发表于 2020-1-15 14:49:26 | 显示全部楼层
GZZXB 发表于 2020-1-15 13:36
再次使能DMA前,能清的都清了。

见12楼,官方文档里提到的办法

出0入36汤圆

 楼主| 发表于 2020-1-15 17:24:05 | 显示全部楼层
styleno1 发表于 2020-1-15 14:49
见12楼,官方文档里提到的办法

    文档描述应用于F2F4F7,不知道这个文档是否适用于F0系列。
晚上回去好好看看。

出0入36汤圆

 楼主| 发表于 2020-1-15 17:24:39 | 显示全部楼层
myxiaonia 发表于 2020-1-15 14:16
会的  stm32的定时器dma请求会被保持的

    这个有在AN4031里提及吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 06:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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