|
我在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);
} |
|