触摸屏驱动分析



/*  模块初始化  */

static int __init s3c2410ts_init(void)

{

获得ADC时钟,并使能;

对ADC寄存器地址映射到内存;

配置寄存器;GPIO口: XM,XP,YM,YP,  ADC有关的寄存器;

申请input设备;

设置可支持的事件为同步、按键、绝对坐标事件;设置按键时间类型为触摸屏;有关的数值范围;

设置设备的身份信息

申请触摸屏中断IRQ_TC,ADC转换完成中断IRQ_ADC;

注册设备

}


/*  触摸屏中断函数  */

static irqreturn_t stylus_updown(int irq, void *dev_id)

{

OwnADC = 1

读取ADCDAT0和ADCDAT1寄存器,判断是按下中断还是弹起中断

按下中断

touch_timer_fire(0);

弹起中断

OwnADC = 0;

}


/*  定时器函数可以由定时器中断触发,也可以由触摸屏中断函数触发  */

static void touch_timer_fire(unsigned long data)
{

读取ADCDAT0和ADCDAT1判断为弹起还是按下 

按下

如果count 不是0,报告xp,yp值;报告按键事件; 报告触摸屏的状态,1表明触摸屏被按下;同步;

上报了一次完整的触摸屏事件,用来间隔下一次的报告;

弹起

将count清0,并报告弹起事件,再次设置触摸屏为按下中断模式;


}

/*  ADC中断函数  */

static irqreturn_t stylus_action(int irq, void *dev_id)

{

OwnADC = 1

读取转换后X,Y值

设置时间定时器的定时值;到时  touch_timer_fire  被调用;                        //  因为这个定时器,可以画出轨迹

重新设置触摸屏为等待弹起信号;

}

/*  模块卸载  */

static void __exit s3c2410ts_exit(void)
{

释放中断资源;

释放时钟;

卸载input设备;

释放内存;

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值