天嵌 ARM开发社区

 找回密码
 注册
查看: 1949|回复: 3

ADC驱动问题

[复制链接]
coolestlhl 发表于 2010-4-11 16:13:47 | 显示全部楼层 |阅读模式
我在2.6.13内核编写的ADC驱动
读出的值总是正确一次 错误一次 错误的时候数值很大 希望亚瑟王和 各路高手帮我看看~

读出的值如下所示:
1074188736     
615     
1074188736      
622   
1074188736      
624     
1074188736      
620   
1074188736     
621   

驱动read函数和中断处理函数如下:
static irqreturn_t adcdone_int_handler(int irq, void *dev_id)
{
        if (ADC_enable)
        {
                adc_data = ADCDAT0 & 0x3ff;

                ev_adc = 1;
                wake_up_interruptible(&adcdev.wait);
        }

        return IRQ_HANDLED;
}

static ssize_t tq2440_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
        char str[20];
        int value;
        size_t len;
        if (down_trylock(&ADC_LOCK) == 0)
        {
                return -EAGAIN;
        }
        if(!ev_adc)
        {       
                if(filp->f_flags & O_NONBLOCK)
                {
                        return -EAGAIN;
                }
                else
                {
                ADC_enable = 1;
                START_ADC_AIN(adcdev.channel, adcdev.prescale);
                wait_event_interruptible(adcdev.wait, ev_adc);

                }
        }
                ev_adc = 0;
                copy_to_user(buffer, (char *)&adc_data, sizeof(adc_data));
                ADC_enable = 0;
                up(&ADC_LOCK);
                               return sizeof(adc_data);
}
亚瑟王 发表于 2010-4-12 10:51:10 | 显示全部楼层
错误的数值应该是读到内存的值了。
回复

使用道具 举报

 楼主| coolestlhl 发表于 2010-4-12 20:12:48 | 显示全部楼层
读到内存的值??
那要怎么修改呢
是修改驱动程序 还是应用程序呢??
回复

使用道具 举报

亚瑟王 发表于 2010-4-13 10:58:20 | 显示全部楼层
在应用程序端添加一个延时程序,延迟几秒钟,然后再采集呢。
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-5-1 18:58 , Processed in 2.039601 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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