|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
触摸屏驱动实验教程
1 s b7 J2 f5 E' X' `2 f$ i
$ p4 @/ j2 z- v Q9 q$ T% V
6 P5 _ N" x$ y+ Y3 a) s1 R9 Y第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c
4 a! n' P8 O' {& B$ `/ m' @' B9 V& t" N# d+ \, B& r0 `3 @2 A2 j' D
触摸屏驱动注册到 input 子系统中后要遵循的框架结构如下:% L$ }- h: C. {, K. m
1.input dev 的注册,参考 gsl_ts_init_ts()函数;
8 Z+ O2 x* B& E( \6 ~6 S+ o2.input 事件的注册,这部分没有明显的调用 input 子系统的 input_register_handler()函数,说明是用的系统缺省注册的 handler,即 evdev --- 一个原始的(raw)输入设备事件。; m$ u( U, I+ X
( {$ r V; V7 K |2 U, M
! A! A+ }3 k' A
图1
$ P* a9 R% B- l- U' U1 g. X9 ]" {: Y" {9 B+ x- u2 F. D
第二节 电路原理图介绍% }2 G6 u: Q5 ]) ?
2 H6 G" |' P. ]5 ~: R7 u( Y3 k7 N
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 19 页。
; k0 g! b7 {8 ^/ t# J如下图可以确定 TP 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,TP 作为从设备。TOUCH_INT 是用中断的形式用作告诉 cpu 已经有触摸产生,cpu 可以从 I2c 接口读数据了。TOUCH_RST 是用作触摸的休眠/唤醒。" C5 m5 h9 \9 v' \" w0 d* _
9 n) S* I* ^7 D0 g
6 \7 K" ~# q" u2 g! z5 F1 ]图2% c1 l5 O: Q" q/ F9 h, q
, F6 K, ]* L' m2 ]; h! F% f第三节 TP 驱动代码结构4 \. v6 z+ [# e7 J1 B6 x
3 c+ R/ E; o( K) K$(dir)\rk3128-source\kernel\drivers\input\touchscreen\rockchip_gslX680_rk3128.c. m6 T1 e1 B+ @8 b# l) ^$ z
--- input device driver' f; R# V! U0 x% B
$(dir)\rk3128-source\kernel\drivers\input\evdev.c# C/ r: E" O, W0 ]- j- A8 d
--- input event handler
1 W3 U4 H3 i' B$ v7 [) S5 {$ ^. I/ |- W6 z
第四节 .config 文件的配置选择
( j, o, q0 r, e5 n
% g5 b: I% c* kkernel 目录中输入 make ARCH=ARM menuconfig 然后按下列步骤选择, |, k% R+ g! |# e
Device Drivers --->; u D+ M: H5 f( b; N2 }% A
Input device support--->
, a( X0 g* E- k% Z6 ]/ a3 gTouchscreens --->4 C5 \' {, Q' I* C
<*> gslX680 touchscreen driver
1 q$ [: Y# v; ^) t2 }- k9 c( _' F3 x4 L- m
选择之后在.config 文件中会有如下项被设置:5 }* a9 U" z& l+ Z7 }
CONFIG_TOUCHSCREEN_GSLX680=y
. T6 a9 M3 k# ~1 t ?
* f& j& O0 K2 `+ J$ _. v2 ^相应的配置文件目录位于:
' Y0 \8 S8 r. f0 ?; f. z) NX:\rk3128-study\rk3128-source\kernel\drivers\input\touchscreen\Kconfig
/ g( b$ Q& z1 R5 {/ M6 ^7 ~config TOUCHSCREEN_GSLX680
8 i& J- G0 N0 ]0 q7 ]: G5 e6 P6 @ O3 L6 b1 T* g( U# Y+ M
tristate "gslX680 touchscreen driver"
4 @ v' g1 ]$ S2 U) T( J5 b" B- @+ chelp' Z, A. j' x( Z
gslX680 touchscreen driver
" J @. U8 m$ ^4 d4 V; I, C$ U$ {$ B2 P# h3 [$ T, L
* y8 m9 Q# t# P0 N6 _. `第五节 实验代码8 d% L' r$ r' ]
# K& q3 C7 I0 r5 b) a5 {9 B1.dts part:5 ~# X) [6 W2 W, T9 X/ e/ j( c. ]
; m: Y0 p: c, t$ `* b6 r( S4 D
6 K" W M6 B1 J. V0 z代码1
& j$ _5 ~, w: s2.增加一个可以动态测试的函数到驱动中,用户可以通过 adb shell 或者串口去输入数据完成触摸屏功能测试。 R6 v7 a' a# y$ r# T' D8 [6 w- T
6 t% Y2 F! x" C" }
3 A1 i2 d$ s; s/ _+ c
, `5 u5 t/ _. I: V) I$ j* f6 ]
代码2
; g* z8 P! {7 A: {3.测试命令! `% W1 W! N! d
命令输入路径/sys/class/touchscreen_test h3 q7 c' y0 W: i2 ^6 z
关闭触摸功能:
- n5 F7 j5 N6 _6 kecho sleep > touchscreen " l6 {& D( O/ A; ^1 s% I! g$ x
echo wake > touchscreen' |6 p, g2 W; q4 l0 N% e* q: ~
镜像触摸屏坐标:1 F7 c. {! L9 I m% U1 T. _$ s( f; ^6 A2 w
echo mirror > touchscreen
! q0 c1 Z' i$ \- C4.代码调试中遇到问题
% v7 n v5 q4 U3 w9 b1 U触摸挂上去后没有反应:a.中断产生了吗?可以通过在中断响应函数中增加调试信 息;b.I2c 通信正常吗?这个可能要接个示波器或 usb 逻辑分析仪去看波形是否正常。) ~% G6 u1 j; K3 L. D
]8 L* |- F1 {0 C$ D% I. Y
第六节 实验步骤 --- 镜像后的坐标如何调节
, E% O8 O4 Q& \# l5 \& L2 O
$ N" b! `$ C" S( Rcd /sys/class/touchscreen_test 3 H% @. V4 h% o# [0 N
echo mirror > touchscreen! j: K/ Y# Z V" A4 t
' T- Z W5 ]5 `5 p
第七节 实验现象
& E- T; Z6 b$ P# O点击位置倒向,需要修改代码/ v7 h' S) W' U; U3 n* d6 L% s4 l( n
report_data()中的两个地方 --- 自己做实验了
8 R' ]& R2 |; C6 c1 }
$ m# y- z' r$ G0 _0 | p
4 d1 D. u5 T3 _9 m! d: H" J( L% G
; L: |# y. O" T6 O7 E. {/ B
- M, k/ }% Z9 Q) C$ ^+ A文件下载请点击:
5、触摸屏驱动实验.pdf
(446.7 KB, 下载次数: 0)
/ D6 L% Z1 Q/ ^5 B. l! f( a- K1 a
' C% J; o, a9 Y7 V! a |
|