下面是触摸屏驱动程序(S3c2410_ts.c)中的函数stylus_action,它是IRQ_ADC的中断处理函数,但count=4时,将调用touch_timer_fire完成采样,为什么这里要用定时器来调用它?不能直接调用吗? jiffies+1的意思是下一个时钟周期执行函数吗?
采样完成后设置为等待触笔抬起中断,如果触笔一直不抬起,而是在触摸屏上移动,那AD不是就无法采集到新的坐标信息了吗?
我看这个驱动程序已经好长时间了,实在搞不懂。

请高手指点一下!!!感激不尽!!!

static irqreturn_t stylus_action(int irq, void *dev_id)
{
unsigned long data0;
unsigned long data1;
if (OwnADC) {
data0 = ioread32(base_addr+S3C2410_ADCDAT0);
data1 = ioread32(base_addr+S3C2410_ADCDAT1);
xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
count++;
if (count < (1<<2)) {
iowrite32(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
iowrite32(ioread32(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
} else {
mod_timer(&touch_timer, jiffies+1);/*调用touch_timer_fire完成采样*/
iowrite32(WAIT4INT(1), base_addr+S3C2410_ADCTSC);/*这里为什么要设置为等待触笔抬起中断?*/
}
}
return IRQ_HANDLED;
}