基于Linux系统的触摸屏驱动方案
3.3 中断处理程序及事件报告
用户对触摸屏进行按下、抬起和拖动等操作时,触发中断INT_TS,内核进入到中断处理函数tc_irq0进行中断处理。tcirq0中,通过ADC—LOCK锁机制保证只有一个驱动程序使用ADC的中断线,通过读取ADCDAT0和ADCDAT1寄存器,判断触摸操作的状态,触摸笔按下时调用ts_timer_fireO进行数据转换。当数据转换完成时产进INT_ADC中断,内核进入中断处理函数adc—irqO,adc_irq()完成触点信息采集并调用ts_timer_fire()进行事件报告。事件报告流程如图2所示。
ts_timer_fire0是主要完成触点坐标信息向应用层报告。updown、count为静态全局变量,updown触点状态,count代表1个jiffies时间内ADC转换的次数,count为0,设置自动X/Y轴坐标转换模式,转换完成后产生相应的INT_ADC中断通知转换完毕。count不为0,input_report_abs()函数向输入子系统报告X,Y绝对坐标事件,inputreport_key()触摸屏对应按键被按下事件,输入子系统使用inputsync()将报告的事件组成一个evdev包,通过/dev/input/eventX发送出去,应用程序通过读取/dev/input/eventX即可获得事件信息。关键代码如下:
4 结论
随着信息技术的快速发展,嵌入式技术与人们的生活越来越紧密,触摸屏作为一种新型输入设备因具有轻便、占用空间少、方便灵活等优点,应用逐渐普及,甚至在工业领域也得到了大量的应用,提高了我国工控自动化的水平。要充分发挥触摸屏的优点,嵌入式中驱动设计至关重要。嵌入式Linux中基于输入子系统实现触摸屏驱动时,利用了Linux输入子系统提供标准事件接口,简化了驱动设计,驱动设计的重点变成了触摸屏控制器相关的硬件操作及功能实现,充分体现Linux内核代码的高可重性,对其他类型输入设备驱动程序的设计有一定参考作用。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
评论