NUC970平台触摸屏驱动移植

1.首先要区分lcd和触摸屏,lcd是一个屏幕,触摸屏是贴在lcd上的两层膜。

2.四线电阻触摸屏的原理:触摸屏就是上下两层膜,比如上层代表x轴(XM:负端,XP:正端),下层代表y轴(YM:负端,YP:正端)。当读取x轴坐标时,XP接3.3v,XM接地,从YM读取按下点的电压值作为模拟输入信号,再经过AD转换后就得到了x轴坐标。同理,当读取y轴坐标时,YP接3.3v,YM接地,从XM读取按下点的电压值作为模拟输入,再经过AD转换后就得到了y轴坐标。

触摸屏驱动程序采用中断方式对触摸笔的按下状态进行检测,如果检测到触摸笔按下将产生中断并触发一个事件通知一个工作线程开始采集数据。

ADC触摸屏驱动的工作流程如图 21所示。

NUC970平台触摸屏驱动移植

图 21 ADC触摸屏工作流程

技术实现

ADC触摸屏驱动框架分析

ADC触摸屏驱动目录如图 31所示。

NUC970平台触摸屏驱动移植

图 31 ADC触摸屏驱动所在目录

bspnuc970/driver_module/touch_drv/src/touch_drv.c文件主要提供SylixOS的ADC触摸屏驱动。主要关注函数如程序清单 31所示。

程序清单 31

INT  __tsDrv (VOID)  INT  __tsDevCreate (PCHAR         pcName)  static void __tsThread (TS_DEV   *ptsDev)  static irqreturn_t __tsIsr (void  *arg)

框架的流程图

整个框架的流程如图 33所示。

NUC970平台触摸屏驱动移植

图 33 ADC触摸屏驱动框架

代码实现

BSP中驱动配置

根据NUC970相关芯片手册,配置寄存器地址并定义touch screen设备结构。如程序清单 32所示。

程序清单 32

/*********************************************************************************************************   touch screen 设备结构 *********************************************************************************************************/ typedef struct {     LW_DEV_HDR                 TS_devhdr;                               /*  设备头                      */     touchscreen_event_notify   TS_tData;                                /*  采集到的数据                */     BOOL                       TS_bIsReadRel;                           /*  是否读取的 release 操作     */     LW_HANDLE                  TS_hThread;                              /*  扫描线程                    */     LW_SEL_WAKEUPLIST          TS_selwulList;                           /*  select() 等待链             */     LW_SPINLOCK_DEFINE        (TS_slLock);                              /*  自旋锁                      */ } TS_DEV;

__tsDrv

该函数注册一系列触摸屏设备驱动程序,包括:

1)    驱动程序中的建立函数__tsOpen;

2)    驱动程序中的关闭函数__tsClose;

3)    驱动程序中的读函数__tsRead;

具体实现如程序清单 33所示。

程序清单 33

INT  __tsDrv (VOID) { ……     /*      *  安装触摸屏驱动,LW_NULL为待实现功能      */     touch_dev_num = iosDrvInstall(__tsOpen,                               LW_NULL,                               __tsOpen,                               __tsClose,                               __tsRead,                               LW_NULL,                               LW_NULL); …… }

__tsDevCreate

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/60b54a751ee374d2f7b83a966e80b0d2.html