触摸屏中断产生以及AD转换,上报事件的过程

当我们按下触摸屏时:

1,首先进入触摸屏中断,RQ_TC

2,如果触摸屏是被按下的状态,则调用touch_timer_fire启动ADC中断adc_irq

3,如果1个时间滴答到来则进入定时器服务程序touch_timer_fire

4,判断触摸屏是否仍然处于按下状态

5,如果是,则上报事件和转换的数据,并重启ADC转换,重复第(2)

6,如果不是(松开),则上报事件和转换的数据,本次转换完成

 

函数追踪:

 

/*触摸屏中断服务程序*/

static irqreturn_t stylus_irq(int irq, void *dev_id)

{

       //printk("stylus_irq\n");

       /*用于记录这一次AD转换后的值*/

       unsigned long data0;

       unsigned long data1;

       bool down;

              /*本次读取时为了判断,还有获取坐标 */

       data0 = readl(ts.io + S3C2410_ADCDAT0);

       data1 = readl(ts.io + S3C2410_ADCDAT1);

       /*在等待中断的时候,获取触摸屏按下的状态*/

       down = get_down(data0, data1);

 

       /* TODO we should never get an interrupt with down set while

        * the timer is running, but maybe we ought to verify that the

        * timer isn't running anyways. */

        

       /*如果触摸屏被按下,则启动ADC*/

       if (down)

              s3c_adc_start(ts.client, 0, 1 << ts.shift);

       else/*如果是抬起状态,就结束了这一次的操作,所以就释放ADC资源的占有*/

              dev_dbg(ts.dev, "%s: count=%d\n", __func__, ts.count);

 

       if (ts.features & FEAT_PEN_IRQ) {

              /* Clear pen down/up interrupt  清中断*/

              writel(0x0, ts.io + S3C64XX_ADCCLRINTPNDNUP);

       }

 

       return IRQ_HANDLED;

}

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值