主题 : 触摸屏驱动 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3574
精华: 0
发帖: 17
金钱: 170 两
威望: 165 点
综合积分: 34 分
注册时间: 2009-01-19
最后登录: 2010-05-15
楼主  发表于: 2009-05-31 21:59

 触摸屏驱动

下面是触摸屏驱动程序(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;
}
级别: 新手上路
UID: 3574
精华: 0
发帖: 17
金钱: 170 两
威望: 165 点
综合积分: 34 分
注册时间: 2009-01-19
最后登录: 2010-05-15
1楼  发表于: 2009-06-01 15:16
高人现身帮个忙啊!
级别: 新手上路
UID: 6233
精华: 0
发帖: 6
金钱: 60 两
威望: 60 点
综合积分: 12 分
注册时间: 2009-05-24
最后登录: 2012-05-17
2楼  发表于: 2009-06-10 10:37
网上搜一下了,分析有的