K60可以实现ADC的自动采集么?DMA怎么使用呢

[复制链接]
2741|9
 楼主| 冰是睡着的冰 发表于 2016-7-22 21:53 | 显示全部楼层 |阅读模式
K60可以实现ADC的自动采集么?DMA怎么使用呢
yesherecn 发表于 2016-7-23 11:32 | 显示全部楼层
就K60而言,他的ADC有ADC0和ADC1,每个ADCx又有A和B两组控制通道,因此最多可以实现4组ADC通道的连续自动采集,而且配合DMA和PDB,无需CPU对采集过程进行干预,我们可以直接读取内存中的转换结果!
playergatsby 发表于 2016-7-23 23:04 | 显示全部楼层
yesherecn 发表于 2016-7-23 11:32
就K60而言,他的ADC有ADC0和ADC1,每个ADCx又有A和B两组控制通道,因此最多可以实现4组ADC通道的连续自动采 ...

这样的话,想要停止采样的时候,应该如何停止呢?
jouney316 发表于 2016-7-24 10:19 | 显示全部楼层
yesherecn 发表于 2016-7-23 11:32
就K60而言,他的ADC有ADC0和ADC1,每个ADCx又有A和B两组控制通道,因此最多可以实现4组ADC通道的连续自动采 ...

我想要单次转换,不需要连续的,用DMA是否可以呢?
Dennis-Zhou 发表于 2016-7-25 19:07 | 显示全部楼层
jouney316 发表于 2016-7-24 10:19
我想要单次转换,不需要连续的,用DMA是否可以呢?

要开启DMA读取数据,AD必须连续转换,不能单次的
l科科1987 发表于 2016-7-26 09:58 | 显示全部楼层
简单说下基本的原理吧:
Step 1.配置ADC模块,配置A组和B组控制通道均为硬件触发,使能DMA请求。并使能相关输入通道。
Step 2.配置DMA模块,分别用2个DMA通道来控制ADC0和ADC1的DMA传输,并配置DMA源地址为ADC结果寄存器,配置主循环计数2次,因为要分别传输R[A]和R[B]结果寄存器的值。
Step 3.配置PDB模块,使用软件触发或其他外设触发均可,例程中位软件触发。关键步骤是要配置PDB的ADC预触发模式,使能通道0和通道1的预触发,并配置为Back to Back模式,这样才能让ADC的COCO转换完成标志自动触发下一个AD转换!
Step 4.触发PDB工作,坐享其成!
dongbaohui 发表于 2016-7-27 18:01 | 显示全部楼层
DMA有三种工作模式:无效模式、正常模式、和周期触发模式。
周期触发模式:触发源是PIT(周期定时器中断),这种模式仅仅适用与DMA Channel 0 -- DMA Channel 3。
正常工作模式:触发源是由DMAMUX_CHCFG_REG的SOURCE[0:5]决定的,它们之间的映射关系野火的ADC驱动中DMA_sources枚举已经定义好了。触发源包含很多,有UART、SPI、ADC、FTM、PDB、CPM、I2C、IO口触发,以及 Always On(一直使能,DMA Request完全由Peripheral Request决定,但是这个Peripheral Request,我不知道它是怎么来的,从这里我就开始理解不清楚了) 。其中看到例程中用的最多是IO口触发了,这个比较好理解。但是触发源还可以ADCn等触发,这个我也不理解了。
liutongda 发表于 2016-7-28 17:49 | 显示全部楼层
DMA采集不放到中断里的话,采集的时候不会被中断打断吗?这样的话出来的数据就不连续了吧?
enginezhong 发表于 2016-7-28 18:40 | 显示全部楼层
liutongda 发表于 2016-7-28 17:49
DMA采集不放到中断里的话,采集的时候不会被中断打断吗?这样的话出来的数据就不连续了吧? ...

不会的,DMA相当于一个小型的cpu,专门用来做数据的搬运,因此不会被中断所打断的
 楼主| 冰是睡着的冰 发表于 2016-12-21 16:10 | 显示全部楼层
l科科1987 发表于 2016-7-26 09:58
简单说下基本的原理吧:
Step 1.配置ADC模块,配置A组和B组控制通道均为硬件触发,使能DMA请求。并使能相关 ...

谢谢你,讲的太详细了,最后就是这么搞定的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

213

帖子

0

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