主题 : adc多通道采样的实现? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 18441
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-04-09
最后登录: 2013-08-20
楼主  发表于: 2010-07-12 11:53

 adc多通道采样的实现?

管理提醒: 本帖被 kasim 从 Qtopia技术交流专区 移动到本区(2010-07-12)
单个通道的AD我以移植成功了,用qt4.5.3编译一个显示程序,在开发板上可以成功显示采到的值,怎么去实现多通道呢?我看了只有一个ADCDAT0数据寄存器,可是我要4个通道的,这样就需要开4次通道,4次中断去取各个通道的值,这样就有些麻烦,请问有什么好的解决办法吗?在AD的寄存器中我也没看到由于序列通道连续采样这样的寄存器,不知道怎么解决啊?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-07-12 17:11
如果ADC的输入来自四个不同的通道,那输出也需要读四次,这是硬件决定的。
不管是哪个通道的值,输出值都保存在ADCDAT0, 这也是由硬件决定的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2010-07-12 17:14
2.6.32.2的内核里已经包含了一个支持多通道AD转换的ADC驱动,基于一个Server和Client架构实现的,源代码在arch/arm/plat-s3c24xx/adc.c。
注意这是一个给驱动使用的“驱动”,不是设计给应用程序直接使用的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 18441
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-04-09
最后登录: 2013-08-20
3楼  发表于: 2010-07-13 08:39

 回 2楼(kasim) 的帖子

好的,我去看先,呵呵,就和测试程序类似
级别: 新手上路
UID: 18441
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-04-09
最后登录: 2013-08-20
4楼  发表于: 2010-07-13 09:00

 回 2楼(kasim) 的帖子

kasim你好
      我现在用的一个比较笨的方法就是写四个驱动,每个通道写一个驱动加载到内核当中,然后用到哪个通道就开哪一个,然后去读取值,这种方法可以满足我现在的要求,因为四个通道不是同时工作的,但是,我想如果以后是每次需要同时采四个通道的值,这样的话现在这种方法就不能够满足了,可能对于我应用层的来说,ad的“采样率”就会相对变的慢了,看到论坛上好多关于s3c2240的ad多通道采样的帖子,都没有解决方法,希望和斑竹探讨,望你指点一二
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2010-07-13 15:16

 回 4楼(songfangfang) 的帖子

2440上只有一个ADC,ADC的驱动当然也只需要一个实例。你所要做的就是告诉这个驱动当前的输入来自哪个channel, 当AD转换完成后,从ADCDAT0读出结果(通过驱动释放出的接口)。
我上面给出的例子就是这样的一个驱动。你需要先理解它的工作原理。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 18441
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-04-09
最后登录: 2013-08-20
6楼  发表于: 2010-07-13 16:49

 回 5楼(kasim) 的帖子

谢谢kasim,我已经移植好了,在open函数中同时开4个通道,然后再读函数中分别设置每个通道的ENABLE_START位,然后相应的去读取ADCDAT0里面的数值,0通道时可以的,因为板子上其他通道没有给出,所以没测试,理论上是没问题的,我已经整理好发了一篇多通道采集的帖子,您看下有什么错误没有
级别: 新手上路
UID: 49204
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2011-06-09
最后登录: 2011-06-15
7楼  发表于: 2011-06-09 11:07
帖子在哪里呢
级别: 新手上路
UID: 49204
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2011-06-09
最后登录: 2011-06-15
8楼  发表于: 2011-06-09 11:07

 回 6楼(songfangfang) 的帖子

帖子在哪里
马上找工作 压力有点大
级别: 新手上路
UID: 76634
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2012-08-27
最后登录: 2012-12-30
9楼  发表于: 2012-10-07 00:50
MASK MASK 就等帖子呢~