micro虾米 发表于 2017-3-30 17:42:56

Hi3518EV200平台ADC问题请教

请问Hi3518EV200的ADC怎么实现两个通道的采样,以前用的Hi3518E,现在代码移植到V200平台后,ADC部分不太一样,不知道V200的ADC单次扫描模式是不是不支持多通道采样?还有如果需要多通道采样是不是必须采用连续Scan扫描模式采样?请知道的不知道的朋友给点指导,谢谢!

cfgrpg 发表于 2017-3-31 14:43:02

v200驱动,四通道都支持,单次扫描不错的驱动

micro虾米 发表于 2017-3-31 19:36:02

请问ADC的单次扫描,两个通道同时使用可以不?和你说的四通道都支持不太一样吧?

micro虾米 发表于 2017-3-31 19:36:45

cfgrpg 发表于 2017-3-31 14:43
v200驱动,四通道都支持,单次扫描不错的驱动


请问ADC的单次扫描,两个通道同时使用可以不?和你说的四通道都支持不太一样吧?

micro虾米 发表于 2017-4-2 16:08:17

问题已解决,前来结贴!
Hi3518EV200平台的ADC模块支持4个通道,分两种模式采样:
第一种是单次扫描模式,支持多通道扫描;第二种是连续Scan扫描模式,支持多通道扫描(测试验证未成功,在此处就不多说了)
简单说下单次扫描模式的工作实现方法:
1. 打开ADC时钟
2. 各个控制寄存器配置(参考手册流程配置,含采样值位数,通道使能,单次扫描,不支持powerdown等)
3. 使用request_irq注册ADC中断,中断号19
以上我封装成Init函数,模块加载时初始化ADC模块使用
ADC开始采样函数设置为ADC_Start()
包含以下工作:
1. 判断需要采样的通道和上次工作的通道是否为同一个通道
2. Disable中断,停止ADC,清空所有通道中断,清空通道使能,使能需要采样的通道,备份该通道等下次采样判断
3. 如果1中的判断是同一个通道,就忽略2中操作
4. 开始ADC采样,使能ADC中断
中断处理函数工作内容:
1. 判断使能的是哪个通道
2. 判断该使能的通道的中断标志是否置位(即该通道转换是否完成,一般都会完成)
3. 获取该通道转换后的值
4. 如果注册了其他对该数据操作的函数,就执行
5. 清空该通道的中断标志位

需要在中断处理函数中设置ADC转换状态,在调用ADC转换的地方,如果ADC中断正在使用,就延时等待该中断完成之后再开启ADC转换。

以上是ADC转换的简要工作流程,测试可以实现两个通道的采样工作,也可以继续扩展ADC采样通道,最多支持四通道。

guoys5165 发表于 2017-4-7 18:46:20

群主,发来看看,为什么我们只能出一个通道的数据

micro虾米 发表于 2017-4-7 21:29:33

guoys5165 发表于 2017-4-7 18:46
群主,发来看看,为什么我们只能出一个通道的数据

我这边代码不在一个文件中,比较混乱,还没有整理,你要是方便的话,可以把你的控制流程说一下,大家分析下,共同讨论

hanfei69882 发表于 2017-4-8 10:56:19

本帖最后由 hanfei69882 于 2017-4-8 10:58 编辑

micro虾米 发表于 2017-4-2 16:08
问题已解决,前来结贴!
Hi3518EV200平台的ADC模块支持4个通道,分两种模式采样:
第一种是单次扫描模式 ...

支持分享:victory::victory:

有个小问题:这个主要问题是中断处理,类似GPIO的共享中断,就是多个设备(通道)共用一个中断源
理论上讲自己通道负责自己通道的初始化、中断检测、数据处理,比如说中断的处理主要是判断一下是不是自己的,不是的话就返回IRQ_NONE,给别人处理,是的话自己处理,难道是不通的?
怎么还要 判断需要采样的通道和上次工作的通道是否为同一个通道

micro虾米 发表于 2017-4-10 08:31:45

hanfei69882 发表于 2017-4-8 10:56
支持分享

有个小问题:这个主要问题是中断处理,类似GPIO的共享中断,就是多个设 ...

感谢你的回复,你说的对,自己通道负责自己的初始化、中断检测...,这种流程对ADC操作完全没有问题,可以正常工作。
我这边ADC采样的是光照、温度,在采样时间间隔不多的时候,比如光敏一秒一次,温度三秒一次,这样的情况是没有什么差别的,但是如果时间间隔查的很多,比如光敏一秒一次,温度30秒一次,这样的情况,在两次温度采样间隔内的30秒,光敏要采样30次,就要初始化30次,我觉得这是没有必要的。所以就加上了这个判断逻辑,如果需要采样的通道和上次采样的通道为一个通道,就免去了重复初始化同一个通道的操作。基本上就是这样的。

hanfei69882 发表于 2017-4-10 10:52:23

micro虾米 发表于 2017-4-10 08:31
感谢你的回复,你说的对,自己通道负责自己的初始化、中断检测...,这种流程对ADC操作完全没有问题,可以 ...

明白 多谢啦:handshake:handshake

micro虾米 发表于 2017-4-11 12:20:37

hanfei69882 发表于 2017-4-10 10:52
明白 多谢啦

不客气,相互学习,共同进步!:handshake

micro虾米 发表于 2017-7-6 08:56:08

hanfei69882 发表于 2017-4-10 10:52
明白 多谢啦

朋友,请求帮忙,多谢
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=18020&extra=

Steve 发表于 2017-9-22 11:17:08

楼主,这个驱动可以发出来吗,感谢

wu0 发表于 2017-10-31 18:00:01

可以分享个驱动出来吗

fengzheng822 发表于 2017-11-21 10:58:51

可以分享个驱动出来吗
页: [1]
查看完整版本: Hi3518EV200平台ADC问题请教