TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x linux上的ADC驱动问题

 有找到TI提供的触屏驱动,可以参考来学习ADC驱动,

目的:使用的是AN0 和AN1作为AI输入。读出 AN0 和AN1的值。

(1)时钟设置 (引脚配置)

(2)地址映射

(3)控制寄存器       (配置:TSCADC_CNTRLREG_TSCSSENB)

 for(i=0;i<2;i++)
 {
 tscadc_writel(ts_dev, TSCADC_REG_STEPCONFIG(i),
 TSCADC_STEPCONFIG_AVG_16 | TSCADC_STEPCONFIG_FIFO1|0x11 ); // 允许循环采样??
 tscadc_writel(ts_dev, TSCADC_REG_STEPDELAY(i),
 TSCADC_STEPCONFIG_OPENDLY);
 }
//这步该怎么配置才是正确的呢?? 问题一: 上面AN0 和AN1的值都写入了FIFO1吗??

但是查看 了代码发现有很多的疑惑不懂。 

 fifo0count = tscadc_readl(ts_dev, TSCADC_REG_FIFO0CNT);
 fifo1count = tscadc_readl(ts_dev, TSCADC_REG_FIFO1CNT);
 readx1 = tscadc_readl(ts_dev, TSCADC_REG_FIFO0); //FIFO0 和 FIFO1 分别又128 ADC值。
 ready1 = tscadc_readl(ts_dev, TSCADC_REG_FIFO1);
 printk("cnt0=%d,cnt1=%d,FIFO0=%d,FIFO1=%d\n",fifo0count,fifo1count,readx1,ready1); 问题二: 
假如: 我改变AI0 的电压 一种:0V 一种5V。,它的FIFO1值不是应该变化很大。。还是怎样??
打印出来的值,都不知道是什么来的。。
andarm lin1:

有没有知道怎么处理的???

andarm lin1:

回复 andarm lin1:

现在只能获得AIN0通道的数据,AIN1的数据怎么获取?

Steven Liu1:

回复 andarm lin1:

对于Linux上的ADC驱动,我们在SDK6.0之后,已经有提供了支持了,不过是针对后四个通道的。你可以参考这个去写你现在的配置。

我之前也写过,不难,主要参考一下AM335x的TRM手册第12章:touchscreen controller。一定要理解ADC模块的状态机,这样你才明白整个流程,你上面提的问题就全明晰了。

再插一句,如果你的AIN0通道可以成功了,AIN1也是一样的,改动不大的,但前提还是我上面说的那样,先理解手册里面的内容。

andarm lin1:

回复 Steven Liu1:

现在是看了手册,和参考代码后仍然有疑惑的地方。

(1)配置

 for (i = 9; i <= 16; i++) {
 tscadc_writel(ts_dev, TSCADC_REG_STEPCONFIG(i),TSCADC_STEPCONFIG_FIFO1|TSCADC_STEPCONFIG_AVG_16|TSCADC_STEPCONFIG_MODE_SWCNT|TSCADC_STEPCONFIG_INP(i-9) );
 tscadc_writel(ts_dev, TSCADC_REG_STEPDELAY(i), delay);
 }

(2)开启通道

当AN0通的时候,读到ID=15;那么AN1能够通也只需要开启通道14.

问题 一: AI0虽然通了,但是那正常的数据却是在FOFO0获得的,而我上面的配置明明是在FIFO1 。

问题二 : step1-8是触屏用的,step9-step16是ADC使用的,分别对应(AI7,…AI2,AI1,AI0)。这是我的理解。

Steven Liu1:

回复 andarm lin1:

首先,16个step中,每个step都有自己的config寄存器,可以配置采样的是哪一个通道,也是在这个寄存器配置里面可以设置fifo的通道数。

所以你上面说的对“step1-8是触屏用的,step9-16是adc用的"这个理解好像有点问题:

1. 其实每一个step采样哪个通道都是可以随意配置的,完全取决于你driver设置;

2. 在原始driver中用作触屏的部分,也是ADC采样,只是在stepconfig中加上了电压开关的设置。

对着TRM的12.3.7节的12-2图,你先理解一下原始触屏部分driver采样的原理,这个明确了,改driver就容易了。

PS: 你上面说的读到的ID=15是指哪个寄存器的哪个bit?印象中某个寄存器里面有个step_id的bit,但只是个状态量显示;使能的设置,在偏移量为0x54h的STEPENABLE寄存器中。

xixiguo:

回复 Steven Liu1:

Hi Steven,

你用的是 linux-3.2.0-psp05.06.00.00 吗,可否参考一下你之前写的adc驱动呢

ZE LIU1:

回复 Steven Liu1:

您好,请问你们的ad驱动支持4路同时采集吗,如果支持,如何配置呢

Steven Liu1:

回复 xixiguo:

很早的了,不太记得版本号了,好像是5.4的。后面SDK5.6的版本中已经添加了ADC的相关功能,所以版本应该比这个老。

建议你还是学习现在我们官方提供给的驱动比较好。

Steven Liu1:

回复 ZE LIU1:

这个要看你要怎么去理解“同时”的概念,我们的ADC你可以理解为一个状态机循环,可有16个step,依次循环,step 1  -> step 2 -> …..-> step 16,这16个step中,你可以自由分配采样的通道,数值等等,但你要是在某一个时刻,必须4路数据一起并行出来,这就做不了了。建议你看一下TRM你就明白了。

ZE LIU1:

回复 Steven Liu1:

haoba ,我有你们的驱动源码,就是不知道是什么版本,用的是ok335开发板,那你们官网的sdk能提供个链接吗

赞(0)
未经允许不得转载:TI中文支持网 » am335x linux上的ADC驱动问题
分享到: 更多 (0)