天嵌 ARM开发社区

 找回密码
 注册
查看: 2355|回复: 2

板子上做linux下的ADC驱动实验不能做,帮忙看一下!!

[复制链接]
qiang1092 发表于 2010-3-18 19:49:31 | 显示全部楼层 |阅读模式
本帖最后由 qiang1092 于 2010-3-18 19:51 编辑

在TQ2440板子上做linux(自带的编译好的2.6.13内核)下的ADC驱动实验,设置好ADCCON后,给ADCCON的0位写1开始转换,
读ADCCON总是0x4251(第0位是1-开始转换了,但没结束;第15位是0-在转换的过程中),这是为什么啊?
难道上了linux操作系统了,不能做ADC的驱动???

贴出关键代码:

#define GPJ_CON 0x560000d0
#define ADC_CON 0x58000000

static unsigned long *vir_gpj;
static unsigned long *vir_adc;

int phoenix_open(struct inode *inode,struct file *filp)
{
        //我在其他地方操作GPJ端口了(接了个数码管),操作没有问题       
                vir_gpj=ioremap(GPJ_CON,8);
        vir_gpj[0]=0x55555555;
        vir_gpj[1]=0x1fff;

        vir_adc=ioremap_nocache(ADC_CON,16);//这是映射的ADC寄存器
        vir_adc[0]=(1<<14)|(254<<6)|(2<<3);//用AIN2
       
        return 0;
}
int phoenix_read(struct file *filp,char *buffer,size_t length,loff_t *offset)
{       
        int dat;

        vir_adc[0]=vir_adc[0] | 0x1;//启动转换

//        while(vir_adc[0] & 0x1);//wait begin//这两句都不能要,要了就是死循环,说明等待一段时间读也是一样的
//        while(!(vir_adc[0] & 0x8000));//wait begin
       
        printk("<0>""con=%u\n",vir_adc[0]);//在这里看了一下值,是0x4251
        dat=vir_adc[3] & 0x3ff;        //读DAT0,没意义,反正没转换
        printk("<0>""dat=%d\n",dat);
       
        return 0;
}
 楼主| qiang1092 发表于 2010-3-18 19:56:41 | 显示全部楼层
裸奔也可以做ADC,linux系统驱动就不行了。
回复

使用道具 举报

亚瑟王 发表于 2010-3-19 13:13:09 | 显示全部楼层
检查一下初始化部分的代码,或者参考一下天嵌科技提供的2.6.30.4上面的ADC驱动。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-20 21:13 , Processed in 2.029591 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表