天天看点

触摸屏驱动三部曲之功能实现及优化

        小伙伴们准备好了吗?又到了看手册写代码的时候了。既懂硬件又懂软件的驱动工程师们。come on.....

一.总体框图

触摸屏驱动三部曲之功能实现及优化

二.驱动代码

三.程序分析(代码注释的比较完整,我主要对硬件方面的设置进行讲解)

            1.设置adccon寄存器

触摸屏驱动三部曲之功能实现及优化

                2.设置adctsc寄存器

触摸屏驱动三部曲之功能实现及优化

           3.关于adcdat0与adcdat1

触摸屏驱动三部曲之功能实现及优化
触摸屏驱动三部曲之功能实现及优化

四.程序优化

           1.设置adcdly为最大值, 这使得电压稳定后再发出irq_tc中断(电压不稳肯定测不准,触屏原理是电阻嘛)

           2.如果adc完成时, 发现触摸笔已经松开, 则丢弃此次结果

           3.多次测量求平均值(多测几次,肯定比一次准嘛)

           4.软件过滤 (就是设置个限定值,连续测量时,突然有一个值非常大或者小,那就认定它为错误值,舍去)

           5.使用定时器处理长按,滑动的情况(其实就是加一个定时器延时,定时器在我以前写的按键驱动恩恩怨怨之防抖动那篇文章有详细的讲解)

                   a.初始化

                   b.启动

                   c.处理

五.测试(我用的是tslib 1.4)

                1.主机先安装

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install libtool

                 2.编译

                         tar xzf tslib-1.4.tar.gz

                         cd tslib

                         ./autogen.sh

                         mkdir tmp

                         echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

                         ./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp

                         make

                         make install

                3.安装

                        cd tmp

                        cp * -rf /ts_dir(只要是你的根文件目录就行,不一定是这个文件夹)

                4.使用(先安装s3c_ts.ko, lcd.ko)

                        a.修改 /etc/ts.conf第1行(去掉#号和第一个空格):

                                   # module_raw input

                           改为:module_raw input

                        b.定义环境变量

                              export qws_mouse_proto=tpanel:/dev/input/event0

                              export t_root=/ts_dir                           (这里要和你前面放的那个根目录)

                              export ld_library_path=$t_root/lib

                              export tslib_consoledevice=none

                              export tslib_fbdevice=/dev/fb0

                              export tslib_tsdevice=/dev/event0

                              export tslib_calibfile=$t_root/etc/pointercal

                              export tslib_conffile=$t_root/etc/ts.conf

                              export tslib_plugindir=$t_root/lib/ts

                         c.测试ts_calibrate等。。

参考:韦东山视频第二期