|
下面是触摸屏驱动程序(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;
- }
复制代码
|
|