This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x linux上的ADC驱动问题

Other Parts Discussed in Thread: AM3358

 有找到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值不是应该变化很大。。还是怎样??
打印出来的值,都不知道是什么来的。。
  • 有没有知道怎么处理的???

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

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

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

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

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

    (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)。这是我的理解。

  • 首先,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寄存器中。

  • Hi Steven,

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

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

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

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

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

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

  • 我在TI上下载了你之前说的SDK6.0,发现里面的Kernel是linux-3.2.0-psp04.06.00.11,但iio里面的ti_adc.c貌似要新一点,我把linux-3.2.0-psp04.06.00.11的ti_adc.c移植到我自己的版本上后,得到了跟http://processors.wiki.ti.com/index.php/AM335x_ADC_Driver%27s_Guide上描述的相同的目录及内容:

    但是关于ti_adc.c中stepconfig的配置我还是没有弄懂。看了一下手册有16个stepconfig寄存器,然后你说每个通道都可以配置这个16个寄存器。是根据手册上提供的16个step来配置吗,那为什么ti_adc.c中没有这16个step,而只是配置了每个通道的stepconfig9~stepconfig16呢?所以之前楼主才会认为9~16 step是用于通用ADC配置的

  • 明白,严格同步肯定不可能,那四路循环输出时候,最小间隔大概能配置到最小为多少呢,对我们来说,只要我们观察感觉是同步的就可以满足要求,

  • 不是这个意思,不是说每个通道可以配16个寄存器,而是在16个step寄存器中,你可以配置采样哪个通道。

    注意看理解一下figure 12-3的sequencer FSM:

    ADC的运行模式是有一个状态机,16个step,每个step中可以配置采取哪个通道,并且你可以选择是否使能该step,可以参考看一偏移量为54h的STEPENABLE寄存器,就是使能step的过程;下面偏移量为64h的STEPCONFIG1,就是对1通道的配置过程(当然只有在这个step1被enable了后,这个配置才有意义)。对应的,你可以看一下ti_adc.c文件中tsc_step_config函数就是配置寄存器的过程。我有点忘了最后配的是几个通道进行TSC的采样了,这些你可以通过翻代码找到答案。

    至于你说的9~16 step用于通用ADC的配置,需要根据代码看实际的配置。从功能支持的角度上来说,这样做是可以的,step1~step16都只是采样后面几个通道也是可以的,这都是取决于你对stepconfign寄存器的配置。

  • 有没驱动adc有测试程序呢,没有的话我驱动没什么基础,看着有点吃力

  • 联系方式是什么,我们可以交流下

  • 触摸屏就是调用ADC驱动的啊

    看看触摸的驱动应该是有帮助的

  • 那ti_adc.c到底是哪个驱动呢?因为我没有用TI的SDK,用的是开发板,核心板是cortexA8,

  • 没错,触摸屏的驱动就是adc的驱动。电阻式触摸屏,你可以简单理解为一个横纵交错的电阻网,在X轴方向加电压,y方向上面采样;在Y方向上加定压,从X方向上采样,由此得到的就是当前的触点数值。这个ti_adc中有关于触摸屏的配置,你先从这部分入手,确实是个好方法。

  • Ti_tscadc.c是触摸屏驱动吧,那ti_adc.c是哪个驱动呢?是总的八路的驱动?

  • Steven

    为什么我的/dev下面没有自动创建iio:device0节点呢,导致我使用测试generic_buffer的时候打开出错,我的配置是

    <*>   TI's ADC driver

    并没有配置为

    <M>   TI's ADC driver。
    并且我的 /sys/bus/iio/devices目录下也生成了目录iio:device0。我读取的ADC值不正确呢
  • 我的也是啊,打不开节点,这个是不是需要配置才能打开呢

  • Hi Steven

    Ti 的Kernel中已经在/sys下创建了对应的属性文件,你知道如何在/dev创建一个设备节点与这些属性文件关联起来吗

  • 这两个,文件名字是新旧版本的差异。新版本的带ADC驱动的,应该都是ti_adc.c了。

  • 如果你配成built-in的,那么系统启动的时候在就应该会自动生成节点

    root@am335x-evm:~# ls /dev/i
    i2c-1 iio:device0 initctl input/

    如果配置成为模块,需要insmod。

    配成built-in的,生成节点不成功,建议查一下log,我刚在EVM跑出来log如下,读取值不正确的,建议检查一下测试脚本。

    [    1.369415] input: ti-tsc as /devices/platform/omap/ti_tscadc/tsc/input/input1

    [    1.503540] tiadc tiadc: attached adc driver

  • nihao,我们想自己写驱动,按照你说的,每个step可以配置通道等信息,那么我们想用四路或者八路通道为普通ad,不用触摸屏,那我只用step9-16来配置1-8路可以吗

  • 可以啊。你用step1~16采样都没问题啊。

    那个触摸屏的驱动和你的普通AD驱动之间的差异,就在于触摸屏的驱动中,通过控制switch开关,给通道上面加上了电压,普通的采样并不需要。

  • 我是打算这样做来实现adc采样,step9-16分别配置为1-8通道,每通道配置模式1,连续软件使能,16采样平均,按照手册上是配置好后配置延时,配置了opendelay延时,把这些配置好后,我该配置哪个寄存器开始采集呢?还有fifo里面有三个中断fifothreshold,overrun和underflow,我不配置可以吗,另外一个就是你们的16个step是轮询工作的吗,

  • Hi ZE LIU1

    你的问题解决了吗,如何解决的,加q 2980409296 讨论一下

  • 我翻了一下当时自己写的ADC driver,印象中是基于Linux 5.04版本的,你若是想自己写这块的话,可以参考看看。

  • 当时的调试记录,需要创造一个节点:

    After insmod the ti_adc_driver.ko , it needs to use command “mknod /dev/adc0 c 252 0”(252 is the major device number, may different) before using the looptest script to test output.

    然后测试代码写了个looptest,一段测试小程序比较简单,编译出来测试用的。应该是这个:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/time.h>
    #define ADC_DEVICE "/dev/adc0"
    int main()
    {
    int ret;
    unsigned int data;
    printf("script begin!steven!\n");

    ret=open(ADC_DEVICE,0);

    if(ret<0)
    {
    printf("Open adc fail\n");
    printf("the ret is : %d", ret);
    return ret;
    }
    for(;;)
    {
    read(ret,&data,sizeof(data));
    sleep(1);

    }
    printf("open succeed!steven!\n");

    close(ret);
    return 0;
    }

  • 最终测试的结果记录:

    供电:1.823V --->VDD_ADC


    1.8v result:                          4096*1.8/1.823 =4044
    [ 2593.909393]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2593.915924] start_adc enter...
    [ 2593.919158] adc_interrupt enter, ev_adc 0...
    [ 2593.923614] adc_interrupt status 4...
    [ 2593.927429] adc_interrupt fifo0count 8...
    [ 2593.931610] fifo0count 0 : 4053
    [ 2593.934875] fifo0count 1 : 4052
    [ 2593.938140] fifo0count 2 : 4058
    [ 2593.941406] fifo0count 3 : 4047
    [ 2593.944671] fifo0count 4 : 4053
    [ 2593.947937] fifo0count 5 : 4057
    [ 2593.951202] fifo0count 6 : 4057
    [ 2593.954498] fifo0count 7 : 4056
    [ 2593.957763] adc_data 4054                         (误差0.0044v)
    [ 2593.960571] stop_adc enter...
    [ 2593.963653] adc_interrupt end
    [ 2594.966949]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2594.973510] start_adc enter...
    [ 2594.976745] adc_interrupt enter, ev_adc 0...
    [ 2594.981201] adc_interrupt status 4...
    [ 2594.985015] adc_interrupt fifo0count 8...
    [ 2594.989196] fifo0count 0 : 4056
    [ 2594.992462] fifo0count 1 : 4050
    [ 2594.995727] fifo0count 2 : 4050
    [ 2594.998992] fifo0count 3 : 4052
    [ 2595.002258] fifo0count 4 : 4047
    [ 2595.005523] fifo0count 5 : 4050
    [ 2595.008789] fifo0count 6 : 4048
    [ 2595.012084] fifo0count 7 : 4053
    [ 2595.015350] adc_data 4050
    [ 2595.018157] stop_adc enter...
    [ 2595.021240] adc_interrupt end
    [ 2596.024597]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2596.031158] start_adc enter...
    [ 2596.034393] adc_interrupt enter, ev_adc 0...
    [ 2596.038848] adc_interrupt status 4...
    [ 2596.042663] adc_interrupt fifo0count 8...
    [ 2596.046844] fifo0count 0 : 4047
    [ 2596.050109] fifo0count 1 : 4052
    [ 2596.053375] fifo0count 2 : 4056
    [ 2596.056640] fifo0count 3 : 4052
    [ 2596.059906] fifo0count 4 : 4047
    [ 2596.063171] fifo0count 5 : 4039
    [ 2596.066436] fifo0count 6 : 4052
    [ 2596.069732] fifo0count 7 : 4049
    [ 2596.072998] adc_data 4049
    [ 2596.075805] stop_adc enter...
    [ 2596.078887] adc_interrupt end
    [ 2597.083007]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2597.089569] start_adc enter...
    [ 2597.092803] adc_interrupt enter, ev_adc 0...
    [ 2597.097229] adc_interrupt status 4...
    [ 2597.101043] adc_interrupt fifo0count 8...
    [ 2597.105224] fifo0count 0 : 4050
    [ 2597.108489] fifo0count 1 : 4054
    [ 2597.111755] fifo0count 2 : 4057
    [ 2597.115020] fifo0count 3 : 4051
    [ 2597.118316] fifo0count 4 : 4058
    [ 2597.121582] fifo0count 5 : 4049
    [ 2597.124847] fifo0count 6 : 4051
    [ 2597.128112] fifo0count 7 : 4057
    [ 2597.131378] adc_data 4053
    [ 2597.134185] stop_adc enter...
    [ 2597.137268] adc_interrupt end
    [ 2598.140594]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2598.147155] start_adc enter...
    [ 2598.150360] adc_interrupt enter, ev_adc 0...
    [ 2598.154815] adc_interrupt status 4...
    [ 2598.158630] adc_interrupt fifo0count 8...
    [ 2598.162811] fifo0count 0 : 4052
    [ 2598.166076] fifo0count 1 : 4055
    [ 2598.169342] fifo0count 2 : 4055
    [ 2598.172607] fifo0count 3 : 4054
    [ 2598.175872] fifo0count 4 : 4031
    [ 2598.179138] fifo0count 5 : 4055
    [ 2598.182434] fifo0count 6 : 4055
    [ 2598.185699] fifo0count 7 : 4047
    [ 2598.188964] adc_data 4050
    [ 2598.191772] stop_adc enter...
    [ 2598.194854] adc_interrupt end
    [ 2599.198120]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2599.204681] start_adc enter...
    [ 2599.207916] adc_interrupt enter, ev_adc 0...
    [ 2599.212371] adc_interrupt status 4...
    [ 2599.216186] adc_interrupt fifo0count 8...
    [ 2599.220336] fifo0count 0 : 4053
    [ 2599.223632] fifo0count 1 : 4054
    [ 2599.226898] fifo0count 2 : 4050
    [ 2599.230163] fifo0count 3 : 4047
    [ 2599.233428] fifo0count 4 : 4054
    [ 2599.236694] fifo0count 5 : 4051
    [ 2599.239959] fifo0count 6 : 4056
    [ 2599.243225] fifo0count 7 : 4060
    [ 2599.246490] adc_data 4053
    [ 2599.249328] stop_adc enter...
    [ 2599.252410] adc_interrupt end
    [ 2600.255706]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2600.262268] start_adc enter...
    [ 2600.265472] adc_interrupt enter, ev_adc 0...
    [ 2600.269927] adc_interrupt status 4...
    [ 2600.273742] adc_interrupt fifo0count 8...
    [ 2600.277923] fifo0count 0 : 4050
    [ 2600.281188] fifo0count 1 : 4052
    [ 2600.284454] fifo0count 2 : 4050
    [ 2600.287719] fifo0count 3 : 4043
    [ 2600.290985] fifo0count 4 : 4050
    [ 2600.294281] fifo0count 5 : 4052
    [ 2600.297546] fifo0count 6 : 4047
    [ 2600.300811] fifo0count 7 : 4056
    [ 2600.304077] adc_data 4050
    [ 2600.306884] stop_adc enter...
    [ 2600.309997] adc_interrupt end
    [ 2601.313262]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2601.319854] start_adc enter...
    [ 2601.323089] adc_interrupt enter, ev_adc 0...
    [ 2601.327545] adc_interrupt status 4...
    [ 2601.331329] adc_interrupt fifo0count 8...
    [ 2601.335510] fifo0count 0 : 4049
    [ 2601.338775] fifo0count 1 : 4056
    [ 2601.342071] fifo0count 2 : 4051
    [ 2601.345336] fifo0count 3 : 4054
    [ 2601.348602] fifo0count 4 : 4052
    [ 2601.351867] fifo0count 5 : 4053
    [ 2601.355133] fifo0count 6 : 4055
    [ 2601.358398] fifo0count 7 : 4049
    [ 2601.361663] adc_data 4052
    [ 2601.364471] stop_adc enter...
    [ 2601.367584] adc_interrupt end
    [ 2602.370880]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2602.377441] start_adc enter...
    [ 2602.380676] adc_interrupt enter, ev_adc 0...
    [ 2602.385101] adc_interrupt status 4...
    [ 2602.388916] adc_interrupt fifo0count 8...
    [ 2602.393096] fifo0count 0 : 4051
    [ 2602.396362] fifo0count 1 : 4051
    [ 2602.399627] fifo0count 2 : 4056
    [ 2602.402893] fifo0count 3 : 4054
    [ 2602.406188] fifo0count 4 : 4047
    [ 2602.409454] fifo0count 5 : 4051
    [ 2602.412719] fifo0count 6 : 4058
    [ 2602.415985] fifo0count 7 : 4053
    [ 2602.419250] adc_data 4052
    [ 2602.422058] stop_adc enter...
    [ 2602.425140] adc_interrupt end 
    1.6v result:               4096*1.6/1.823 = 3595
    [ 2172.262512]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2172.269073] start_adc enter...
    [ 2172.272308] adc_interrupt enter, ev_adc 0...
    [ 2172.276763] adc_interrupt status 4...
    [ 2172.280578] adc_interrupt fifo0count 8...
    [ 2172.284759] fifo0count 0 : 3594
    [ 2172.288024] fifo0count 1 : 3598
    [ 2172.291290] fifo0count 2 : 3594
    [ 2172.294555] fifo0count 3 : 3596
    [ 2172.297821] fifo0count 4 : 3593
    [ 2172.301086] fifo0count 5 : 3598
    [ 2172.304351] fifo0count 6 : 3595
    [ 2172.307647] fifo0count 7 : 3594
    [ 2172.310913] adc_data 3595 
    [ 2172.313720] stop_adc enter...
    [ 2172.316802] adc_interrupt end 
    [ 2173.320098]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2173.326660] start_adc enter...
    [ 2173.329895] adc_interrupt enter, ev_adc 0...
    [ 2173.334350] adc_interrupt status 4...
    [ 2173.338165] adc_interrupt fifo0count 8...
    [ 2173.342346] fifo0count 0 : 3604
    [ 2173.345611] fifo0count 1 : 3595
    [ 2173.348876] fifo0count 2 : 3593
    [ 2173.352142] fifo0count 3 : 3597
    [ 2173.355407] fifo0count 4 : 3597
    [ 2173.358673] fifo0count 5 : 3597
    [ 2173.361968] fifo0count 6 : 3597
    [ 2173.365234] fifo0count 7 : 3591
    [ 2173.368499] adc_data 3596 
    [ 2173.371307] stop_adc enter...
    [ 2173.374389] adc_interrupt end 
    [ 2174.377685]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2174.384246] start_adc enter...
    [ 2174.387481] adc_interrupt enter, ev_adc 0...
    [ 2174.391937] adc_interrupt status 4...
    [ 2174.395751] adc_interrupt fifo0count 8...
    [ 2174.399902] fifo0count 0 : 3595
    [ 2174.403198] fifo0count 1 : 3591
    [ 2174.406463] fifo0count 2 : 3600
    [ 2174.409729] fifo0count 3 : 3597
    [ 2174.412994] fifo0count 4 : 3598
    [ 2174.416259] fifo0count 5 : 3597
    [ 2174.419525] fifo0count 6 : 3599
    [ 2174.422790] fifo0count 7 : 3602
    [ 2174.426055] adc_data 3597 
    [ 2174.428894] stop_adc enter...
    [ 2174.431976] adc_interrupt end 
    [ 2175.435272]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2175.441864] start_adc enter...
    [ 2175.445098] adc_interrupt enter, ev_adc 0...
    [ 2175.449554] adc_interrupt status 4...
    [ 2175.453369] adc_interrupt fifo0count 8...
    [ 2175.457550] fifo0count 0 : 3601
    [ 2175.460815] fifo0count 1 : 3598
    [ 2175.464080] fifo0count 2 : 3599
    [ 2175.467346] fifo0count 3 : 3600
    [ 2175.470611] fifo0count 4 : 3591
    [ 2175.473876] fifo0count 5 : 3599
    [ 2175.477142] fifo0count 6 : 3597
    [ 2175.480407] fifo0count 7 : 3598
    [ 2175.483673] adc_data 3597 
    [ 2175.486511] stop_adc enter...
    [ 2175.489593] adc_interrupt end 
    [ 2176.492919]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2176.499511] start_adc enter...
    [ 2176.502746] adc_interrupt enter, ev_adc 0...
    [ 2176.507202] adc_interrupt status 4...
    [ 2176.510986] adc_interrupt fifo0count 8...
    [ 2176.515167] fifo0count 0 : 3593
    [ 2176.518432] fifo0count 1 : 3600
    [ 2176.521728] fifo0count 2 : 3596
    [ 2176.524993] fifo0count 3 : 3597
    [ 2176.528259] fifo0count 4 : 3596
    [ 2176.531524] fifo0count 5 : 3598
    [ 2176.534790] fifo0count 6 : 3583
    [ 2176.538055] fifo0count 7 : 3598
    [ 2176.541320] adc_data 3595 
    [ 2176.544128] stop_adc enter...
    [ 2176.547241] adc_interrupt end 
    [ 2177.550506]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2177.557037] start_adc enter...
    [ 2177.560272] adc_interrupt enter, ev_adc 0...
    [ 2177.564727] adc_interrupt status 4...
    [ 2177.568542] adc_interrupt fifo0count 8...
    [ 2177.572723] fifo0count 0 : 3598
    [ 2177.575988] fifo0count 1 : 3600
    [ 2177.579254] fifo0count 2 : 3596
    [ 2177.582519] fifo0count 3 : 3597
    [ 2177.585784] fifo0count 4 : 3595
    [ 217count 5 : 3595
    [ 2177.592315] fifo0count 6 : 3598
    [ 2177.595611] fifo0count 7 : 3591
    [ 2177.598876] adc_data 3596 
    [ 2177.601684] stop_adc enter...
    [ 2177.604766] adc_interrupt end 
    [ 2178.608062]  no ave internal ===========adc_read enter,178.614593] start_adc enter...
    [ 2178.617828] adc_interrupt enter, ev_adc 0...
    [ 2178.622283] adc_interrupt status 4...
    [ 2178.626098] adc_interrupt fifo0count 8...
    [ 2178.630279] fifo0count 0 : 3600
    [ 2178.633544] fifo0count 1 : 3596
    [ 2178.636810] fifo0count 2 : 3600
    [ 2178.640075] fifo0count 3 : 3600
    [ 2178.643341] fifo0count 4 : 3597
    [ 2178.646606] fifo0count 5 : 3594
    [ 2178.649871] fifo0count 6 : 3596
    [ 2178.653137] fifo0count 7 : 3600
    [ 2178.656433] adc_data 3597 
    1.5V result:
    [ 2923.492645]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2923.499206] start_adc enter...
    [ 2923.502441] adc_interrupt enter, ev_adc 0...
    [ 2923.506896] adc_interrupt status 4...
    [ 2923.510711] adc_interrupt fifo0count 8...
    [ 2923.514892] fifo0count 0 : 3380
    [ 2923.518157] fifo0count 1 : 3380
    [ 2923.521423] fifo0count 2 : 3383
    [ 2923.524688] fifo0count 3 : 3385
    [ 2923.527984] fifo0count 4 : 3392
    [ 2923.531250] fifo0count 5 : 3380
    [ 2923.534515] fifo0count 6 : 3388
    [ 2923.537780] fifo0count 7 : 3381
    [ 2923.541046] adc_data 3383
    [ 2923.543884] stop_adc enter...
    [ 2923.546966] adc_interrupt end
    [ 2924.550292]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2924.556854] start_adc enter...
    [ 2924.560089] adc_interrupt enter, ev_adc 0...
    [ 2924.564514] adc_interrupt status 4...
    [ 2924.568359] adc_interrupt fifo0count 8...
    [ 2924.572509] fifo0count 0 : 3382
    [ 2924.575805] fifo0count 1 : 3375
    [ 2924.579071] fifo0count 2 : 3385
    [ 2924.582336] fifo0count 3 : 3384
    [ 2924.585601] fifo0count 4 : 3389
    [ 2924.588867] fifo0count 5 : 3385
    [ 2924.592132] fifo0count 6 : 3381
    [ 2924.595428] fifo0count 7 : 3383
    [ 2924.598693] adc_data 3383
    [ 2924.601501] stop_adc enter...
    [ 2924.604583] adc_interrupt end
    [ 2925.607940]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2925.614471] start_adc enter...
    [ 2925.617736] adc_interrupt enter, ev_adc 0...
    [ 2925.622192] adc_interrupt status 4...
    [ 2925.626007] adc_interrupt fifo0count 8...
    [ 2925.630187] fifo0count 0 : 3375
    [ 2925.633453] fifo0count 1 : 3384
    [ 2925.636718] fifo0count 2 : 3384
    [ 2925.639984] fifo0count 3 : 3382
    [ 2925.643249] fifo0count 4 : 3384
    [ 2925.646545] fifo0count 5 : 3375
    [ 2925.649810] fifo0count 6 : 3383
    [ 2925.653076] fifo0count 7 : 3388
    [ 2925.656341] adc_data 3381
    [ 2925.659149] stop_adc enter...
    [ 2925.662261] adc_interrupt end
    [ 2926.665557]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2926.672119] start_adc enter...
    [ 2926.675354] adc_interrupt enter, ev_adc 0...
    [ 2926.679809] adc_interrupt status 4...
    [ 2926.683624] adc_interrupt fifo0count 8...
    [ 2926.687805] fifo0count 0 : 3380
    [ 2926.691070] fifo0count 1 : 3382
    [ 2926.694335] fifo0count 2 : 3379
    [ 2926.697601] fifo0count 3 : 3383
    [ 2926.700866] fifo0count 4 : 3378
    [ 2926.704162] fifo0count 5 : 3381
    [ 2926.707427] fifo0count 6 : 3382
    [ 2926.710693] fifo0count 7 : 3381
    [ 2926.713958] adc_data 3380
    [ 2926.716766] stop_adc enter...
    [ 2926.719879] adc_interrupt end
    [ 2927.723144]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2927.729675] start_adc enter...
    [ 2927.732910] adc_interrupt enter, ev_adc 0...
    [ 2927.737365] adc_interrupt status 4...
    [ 2927.741180] adc_interrupt fifo0count 8...
    [ 2927.745361] fifo0count 0 : 3385
    [ 2927.748626] fifo0count 1 : 3384
    [ 2927.751892] fifo0count 2 : 3382
    [ 2927.755157] fifo0count 3 : 3381
    [ 2927.758453] fifo0count 4 : 3384
    [ 2927.761718] fifo0count 5 : 3390
    [ 2927.764984] fifo0count 6 : 3390
    [ 2927.768249] fifo0count 7 : 3380
    [ 2927.771514] adc_data 3384
    [ 2927.774322] stop_adc enter...
    [ 2927.777435] adc_interrupt end
    [ 2928.780700]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 2928.787292] start_adc enter...
    [ 2928.790496] adc_interrupt enter, ev_adc 0...
    [ 2928.794952] adc_interrupt status 4...
    [ 2928.798767] adc_interrupt fifo0count 8...
    [ 2928.802947] fifo0count 0 : 3400
    [ 2928.806213] fifo0count 1 : 3387
    [ 2928.809509] fifo0count 2 : 3381
    [ 2928.812774] fifo0count 3 : 3359
    [ 2928.816040] fifo0count 4 : 3382
    [ 2928.819305] fifo0count 5 : 3378
    [ 2928.822570] fifo0count 6 : 3379
    [ 2928.825836] fifo0count 7 : 3384
    <4>[ 2928.829132] adc_data 3381 
    1.2V result:

    [ 3135.222106]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3135.228668] start_adc enter...
    [ 3135.231903] adc_interrupt enter, ev_adc 0...
    [ 3135.236358] adc_interrupt status 4...
    [ 3135.240142] adc_interrupt fifo0count 8...
    [ 3135.244323] fifo0count 0 : 2710
    [ 3135.247619] fifo0count 1 : 2703
    [ 3135.250885] fifo0count 2 : 2716
    [ 3135.254150] fifo0count 3 : 2716
    [ 3135.257415] fifo0count 4 : 2709
    [ 3135.260681] fifo0count 5 : 2712
    [ 3135.263946] fifo0count 6 : 2711
    [ 3135.267211] fifo0count 7 : 2710
    [ 3135.270507] adc_data 2710
    [ 3135.273315] stop_adc enter...
    [ 3135.276397] adc_interrupt end
    [ 3136.279693]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3136.286285] start_adc enter...
    [ 3136.289520] adc_interrupt enter, ev_adc 0...
    [ 3136.293975] adc_interrupt status 4...
    [ 3136.297760] adc_interrupt fifo0count 8...
    [ 3136.301940] fifo0count 0 : 2711
    [ 3136.305206] fifo0count 1 : 2703
    [ 3136.308502] fifo0count 2 : 2713
    [ 3136.311767] fifo0count 3 : 2720
    [ 3136.315032] fifo0count 4 : 2716
    [ 3136.318298] fifo0count 5 : 2712
    [ 3136.321563] fifo0count 6 : 2711
    [ 3136.324829] fifo0count 7 : 2707
    [ 3136.328094] adc_data 2711
    [ 3136.330902] stop_adc enter...
    [ 3136.334014] adc_interrupt end
    [ 3137.337310]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3137.343841] start_adc enter...
    [ 3137.347106] adc_interrupt enter, ev_adc 0...
    [ 3137.351531] adc_interrupt status 4...
    [ 3137.355346] adc_interrupt fifo0count 8...
    [ 3137.359527] fifo0count 0 : 2711
    [ 3137.362792] fifo0count 1 : 2714
    [ 3137.366058] fifo0count 2 : 2715
    [ 3137.369354] fifo0count 3 : 2717
    [ 3137.372619] fifo0count 4 : 2716
    [ 3137.375885] fifo0count 5 : 2713
    [ 3137.379150] fifo0count 6 : 2712
    [ 3137.382415] fifo0count 7 : 2709
    [ 3137.385681] adc_data 2713
    [ 3137.388519] stop_adc enter...
    [ 3137.391601] adc_interrupt end
    [ 3138.394897]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3138.401458] start_adc enter...
    [ 3138.404693] adc_interrupt enter, ev_adc 0...
    [ 3138.409118] adc_interrupt status 4...
    [ 3138.412933] adc_interrupt fifo0count 8...
    [ 3138.417114] fifo0count 0 : 2712
    [ 3138.420379] fifo0count 1 : 2715
    [ 3138.423645] fifo0count 2 : 2714
    [ 3138.426940] fifo0count 3 : 2720
    [ 3138.430206] fifo0count 4 : 2720
    [ 3138.433471] fifo0count 5 : 2715
    [ 3138.436737] fifo0count 6 : 2721
    [ 3138.440002] fifo0count 7 : 2716
    [ 3138.443267] adc_data 2716
    [ 3138.446075] stop_adc enter...
    [ 3138.449188] adc_interrupt end
    [ 3139.452453]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3139.459014] start_adc enter...
    [ 3139.462249] adc_interrupt enter, ev_adc 0...
    [ 3139.466705] adc_interrupt status 4...
    [ 3139.470489] adc_interrupt fifo0count 8...
    [ 3139.474670] fifo0count 0 : 2713
    [ 3139.477935] fifo0count 1 : 2713
    [ 3139.481231] fifo0count 2 : 2724
    [ 3139.484497] fifo0count 3 : 2712
    [ 3139.487762] fifo0count 4 : 2712
    [ 3139.491027] fifo0count 5 : 2712
    [ 3139.494293] fifo0count 6 : 2712
    [ 3139.497558] fifo0count 7 : 2713
    [ 3139.500823] adc_data 2713
    [ 3139.503631] stop_adc enter...
    [ 3139.506744] adc_interrupt end
    [ 3140.510070]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3140.516662] start_adc enter...
    [ 3140.519866] adc_interrupt enter, ev_adc 0...
    [ 3140.524322] adc_interrupt status 4...
    [ 3140.528137] adc_interrupt fifo0count 8...
    [ 3140.532318] fifo0count 0 : 2717
    [ 3140.535583] fifo0count 1 : 2712
    [ 3140.538848] fifo0count 2 : 2712
    [ 3140.542114] fifo0count 3 : 2710
    [ 3140.545379] fifo0count 4 : 2709
    [ 3140.548675] fifo0count 5 : 2716
    [ 3140.551940] fifo0count 6 : 2714
    [ 3140.555206] fifo0count 7 : 2710
    [ 3140.558471] adc_data 2712
    [ 3140.561279] stop_adc enter...
    [ 3140.564361] adc_interrupt end
    [ 3141.567687]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3141.574218] start_adc enter...
    [ 3141.577453] adc_interrupt enter, ev_adc 0...
    [ 3141.581909] adc_interrupt status 4...
    [ 3141.585723] adc_interrupt fifo0count 8...
    [ 3141.589904] fifo0count 0 : 2717
    [ 3141.593170] fifo0count 1 : 2708
    [ 3141.596435] fifo0count 2 : 2710
    [ 3141.599700] fifo0count 3 : 2717
    [ 3141.602966] fifo0count 4 : 2720
    [ 3141.606262] fifo0count 5 : 2709
    [ 3141.609527] fifo0count 6 : 2714
    [ 3141.612792] fifo0count 7 : 2716
    [ 3141.616058] adc_data 2713
    [ 3141.618865] stop_adc enter...
    [ 3141.621948] adc_interrupt end 


    0.8V result:
    [ 3233.914703]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3233.921295] start_adc enter...
    [ 3233.924499] adc_interrupt enter, ev_adc 0...
    [ 3233.928955] adc_interrupt status 4...
    [ 3233.932769] adc_interrupt fifo0count 8...
    [ 3233.936950] fifo0count 0 : 1802
    [ 3233.940216] fifo0count 1 : 1801
    [ 3233.943481] fifo0count 2 : 1805
    [ 3233.946746] fifo0count 3 : 1802
    [ 3233.950012] fifo0count 4 : 1802
    [ 3233.953308] fifo0count 5 : 1797
    [ 3233.956573] fifo0count 6 : 1801
    [ 3233.959838] fifo0count 7 : 1799
    [ 3233.963104] adc_data 1801
    [ 3233.965911] stop_adc enter...
    [ 3233.968994] adc_interrupt end
    [ 3234.972259]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3234.978820] start_adc enter...
    [ 3234.982055] adc_interrupt enter, ev_adc 0...
    [ 3234.986511] adc_interrupt status 4...
    [ 3234.990325] adc_interrupt fifo0count 8...
    [ 3234.994476] fifo0count 0 : 1809
    [ 3234.997772] fifo0count 1 : 1802
    [ 3235.001037] fifo0count 2 : 1805
    [ 3235.004302] fifo0count 3 : 1809
    [ 3235.007568] fifo0count 4 : 1806
    [ 3235.010833] fifo0count 5 : 1797
    [ 3235.014099] fifo0count 6 : 1805
    [ 3235.017364] fifo0count 7 : 1805
    [ 3235.020629] adc_data 1804
    [ 3235.023468] stop_adc enter...
    [ 3235.026550] adc_interrupt end
    [ 3236.029846]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3236.036437] start_adc enter...
    [ 3236.039672] adc_interrupt enter, ev_adc 0...
    [ 3236.044128] adc_interrupt status 4...
    [ 3236.047943] adc_interrupt fifo0count 8...
    [ 3236.052093] fifo0count 0 : 1808
    [ 3236.055358] fifo0count 1 : 1808
    [ 3236.058654] fifo0count 2 : 1807
    [ 3236.061920] fifo0count 3 : 1816
    [ 3236.065185] fifo0count 4 : 1808
    [ 3236.068450] fifo0count 5 : 1807
    [ 3236.071716] fifo0count 6 : 1807
    [ 3236.074981] fifo0count 7 : 1809
    [ 3236.078247] adc_data 1808
    [ 3236.081054] stop_adc enter...
    [ 3236.084167] adc_interrupt end
    [ 3237.087554]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3237.094085] start_adc enter...
    [ 3237.097320] adc_interrupt enter, ev_adc 0...
    [ 3237.101776] adc_interrupt status 4...
    [ 3237.105590] adc_interrupt fifo0count 8...
    [ 3237.109771] fifo0count 0 : 1799
    [ 3237.113037] fifo0count 1 : 1803
    [ 3237.116302] fifo0count 2 : 1803
    [ 3237.119567] fifo0count 3 : 1806
    [ 3237.122833] fifo0count 4 : 1803
    [ 3237.126098] fifo0count 5 : 1799
    [ 3237.129394] fifo0count 6 : 1810
    [ 3237.132659] fifo0count 7 : 1805
    [ 3237.135925] adc_data 1803
    [ 3237.138732] stop_adc enter...
    [ 3237.141815] adc_interrupt end
    [ 3238.145141]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3238.151702] start_adc enter...
    [ 3238.154937] adc_interrupt enter, ev_adc 0...
    [ 3238.159362] adc_interrupt status 4...
    [ 3238.163177] adc_interrupt fifo0count 8...
    [ 3238.167358] fifo0count 0 : 1824
    [ 3238.170623] fifo0count 1 : 1806
    [ 3238.173889] fifo0count 2 : 1807
    [ 3238.177154] fifo0count 3 : 1808
    [ 3238.180419] fifo0count 4 : 1809
    [ 3238.183715] fifo0count 5 : 1805
    [ 3238.186981] fifo0count 6 : 1806
    [ 3238.190246] fifo0count 7 : 1807
    [ 3238.193511] adc_data 1809
    [ 3238.196319] stop_adc enter...
    [ 3238.199401] adc_interrupt end
    [ 3239.202728]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3239.209259] start_adc enter...
    [ 3239.212493] adc_interrupt enter, ev_adc 0...
    [ 3239.216949] adc_interrupt status 4...
    [ 3239.220764] adc_interrupt fifo0count 8...
    [ 3239.224945] fifo0count 0 : 1804
    [ 3239.228210] fifo0count 1 : 1804
    [ 3239.231475] fifo0count 2 : 1802
    [ 3239.234741] fifo0count 3 : 1803
    [ 3239.238006] fifo0count 4 : 1807
    [ 3239.241271] fifo0count 5 : 1805
    [ 3239.244537] fifo0count 6 : 1809
    [ 3239.247802] fifo0count 7 : 1808
    [ 3239.251098] adc_data 1805 
    0.1V result:
    [ 3404.142089]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3404.148620] start_adc enter...
    [ 3404.151855] adc_interrupt enter, ev_adc 0...
    [ 3404.156311] adc_interrupt status 4...
    [ 3404.160125] adc_interrupt fifo0count 8...
    [ 3404.164306] fifo0count 0 : 232
    [ 3404.167480] fifo0count 1 : 226
    [ 3404.170654] fifo0count 2 : 219
    [ 3404.173828] fifo0count 3 : 256
    [ 3404.177001] fifo0count 4 : 219
    [ 3404.180206] fifo0count 5 : 221
    [ 3404.183380] fifo0count 6 : 230
    [ 3404.186553] fifo0count 7 : 225
    [ 3404.189727] adc_data 228
    [ 3404.192443] stop_adc enter...
    [ 3404.195556] adc_interrupt end
    [ 3405.198822]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3405.205352] start_adc enter...
    [ 3405.208618] adc_interrupt enter, ev_adc 0...
    [ 3405.213073] adc_interrupt status 4...
    [ 3405.216857] adc_interrupt fifo0count 8...
    [ 3405.221038] fifo0count 0 : 225
    [ 3405.224212] fifo0count 1 : 224
    [ 3405.227416] fifo0count 2 : 228
    [ 3405.230590] fifo0count 3 : 221
    [ 3405.233764] fifo0count 4 : 223
    [ 3405.236938] fifo0count 5 : 226
    [ 3405.240112] fifo0count 6 : 230
    [ 3405.243286] fifo0count 7 : 226
    [ 3405.246459] adc_data 225
    [ 3405.249206] stop_adc enter...
    [ 3405.252288] adc_interrupt end
    [ 3406.255584]  no ave internal ===========adc_read enter, ev_adc 0...
    [ 3406.262145] start_adc enter...
    [ 3406.265380] adc_interrupt enter, ev_adc 0...
    [ 3406.269836] adc_interrupt status 4...
    [ 3406.273651] adc_interrupt fifo0count 8...
    [ 3406.277832] fifo0count 0 : 225
    [ 3406.281005] fifo0count 1 : 226
    [ 3406.284179] fifo0count 2 : 217
    [ 3406.287353] fifo0count 3 : 232
    [ 3406.290557] fifo0count 4 : 225
    [ 3406.293731] fifo0count 5 : 226
    [ 3406.296905] fifo0count 6 : 225
    [ 3406.300079] fifo0count 7 : 221
    [ 3406.303253] adc_data 224 
  • Hi Steven

    我照着你的驱动进行了相关寄存器的配置,但是stepconfig寄存器却写不进去,写stepconfig寄存器之前,只需要将ctrl寄存器的StepConfig_WriteProtect去掉就可以了,是吗?

  • 有没有使能ADC模块以及相关的clock?

    太细节的东西记不住了,参考代码做吧。

  • Hi Steven

    我就是想重新做一个ADC的驱动,不使能TI 本身的ADC模块。我看你的驱动里面就是全部重新实现的,原本CLK的配置是在ti_tscadc.c里面做的,需要使能ADC模块才能工作,但是你的驱动里面CLK的配置等内容也重新实现了,所以是不是就不需要使能上TI的ADC模块了呢?

    另外为什么物理地址映射到内存的时候,一定要用platform设备呢,直接用ioremap不行吗?

  • 加载驱动后,我测试程序按照这个测试,测试程序没有输出,是不是设备节点或者主设备号不对呢?

  • insmod 驱动后,

    用mknod建立一个可用的节点后,

    open的时候:返回

    #####################

    script begin!steven!
    Open adc fail  

    ###################

    求解:probe函数没有运行起来,所以也就没有添加到字符设备,所以也就open不了。

    这问题该怎么解决??

  • 你驱动程序发上来啊

  •  驱动就在帖子里面,ti做的驱动,现在先将这个驱动使用起来,要配置adc的resource,但是我还不会配,所以需要贴出来看看。

  • 请问一下:运行测试程序后,发现跑步 了。

    一直read不到值,驱动一直都没有进入中断。

    ##############

    所以在配置平台资源的时候,还有错误。adc的irq该配什么求解。

  • 我用的是AM335X的板子,AIN4做测试,adc的resource怎么配置啊?可以教下我吗?

  • 你好,我使用了你写的ti_adc_driver.c 这个驱动 ,但是加载进去之后,根本就找不到设备号,无法open, 跟踪调试了下,发现static int __devinit adc_probe(struct platform_device *pdev)根本就不执行。 另外我仿照你的驱动自己写了一个,能read到值,但感觉数据不对,是不是我的时钟没设置好啊。我的驱动放在附件里了,麻烦你帮我看看吧。非常感谢!

  • 社区里怎么没有技术支持啊

  • 您好,请问您的ad分通道的问题解决了吗?我看了您的驱动,ioctl没用吧?

  • 你的驱动probe进不去??

  • 后来找到原因了,我改写的程序是对的,问题出在:内核配置了触摸屏驱动,将ADC通道占用了。

  • 您好,我现在也在处理AD分通道的问题,我怎么和你细聊呢,这个问题困扰了我好几天了,万分感谢,希望可以得到您的指点,我的口口418073482

  • 我编译了您的代码,然后发现在init时需要ioremap(),然后我想问的是您的ioctl函数您测试可以用?谢谢!

  • 刘工:

    您好,我看了您的adc驱动代码,我在borad里面添加了resource等,probe也可以进入,但是interrupt中断进不去,请问是否我的resource里面的IQ是否设置不正确???请指导,我的IQresource项设置的start和end为AM33XX_IRQ_ADC_GEN,flags设置为IORESOURCE_IRQ

  • 刘工:

           您好,我最近一直在调试AM3358的ADC,看了你的代码后我在board中添加了platform device 并且添加了resource,但是在read的过程中无法进入interrupt,我在board中填加如下:

    static struct resource am335x_adc_resource[] = {

               {

                  .start = 0x44e0d000,

                  .end  = 0x44e0d000 + SZ_8K - 1,

                  .flags = IORESOURCE_MEM,

               },

             {

                   .start = AM33XX_IRQ_ADC_GEN,

                  .end = AM33XX_IRQ_ADC_GEN,

                    .flags = IORESOURCE_IRQ,

             },

    };

    另外就是添加am335x_adc_device和am335x_adc_init(void)同时在evm_dev_cfg 对应的结构体中添加am335x_adc_init.

    望指点进不去中断的原因,谢谢