找回密码
 注册
关于网站域名变更的通知
查看: 154|回复: 0
打印 上一主题 下一主题

【嵌入式开发教程5】疯壳·平板电脑-触摸屏驱动实验教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-3 11:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
触摸屏驱动实验教程
——疯壳·嵌入式平板开发

0 x" E8 p0 {, |9 t+ E+ B0 _: e$ p/ @( g! l
9 Q* N. I' A$ s" S' m! D/ b/ [
第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c; |4 ^* f2 ~) l; Y& e. _

& G3 ^3 i; ~& z* p% h" |触摸屏驱动注册到 input 子系统中后要遵循的框架结构如下:
; N% l& s  M3 A# n2 V" W1 b1.input dev 的注册,参考 gsl_ts_init_ts()函数;
' H. C: d: p! \) {% S2.input 事件的注册,这部分没有明显的调用 input 子系统的 input_register_handler()函数,说明是用的系统缺省注册的 handler,即 evdev --- 一个原始的(raw)输入设备事件。2 n7 A2 A4 n4 w, Q& ~5 p. d
! B' ]; |7 c& I, `9 x- h; P  l1 E
  [+ t% {2 r3 e$ P
图1. y  V" P5 e9 \

+ U- b; M2 Q) |9 e8 a- k第二节 电路原理图介绍2 }+ ~+ A8 F. I. @% r. x! ^

/ Q! e3 Y) N1 E  {& c6 v) q% i下图来源于文档 3128_sdk_a02_20170325.pdf 中第 19 页。% L  {3 W2 r, I' X
如下图可以确定 TP 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,TP 作为从设备。TOUCH_INT 是用中断的形式用作告诉 cpu 已经有触摸产生,cpu 可以从 I2c 接口读数据了。TOUCH_RST 是用作触摸的休眠/唤醒。* ^8 Z3 N( T. x% N3 j0 g4 z- J+ Y
1 b3 F6 k! C+ \/ }. c
4 M. U- T' A- P) Z
图2
! X* X; G" h0 N% ^' f8 e  }2 U* f0 H* n% Z5 _
第三节 TP 驱动代码结构) I% ]2 r% u7 Q& V( e
% j& y  E1 M% U: Z3 I; P9 \# W/ U
$(dir)\rk3128-source\kernel\drivers\input\touchscreen\rockchip_gslX680_rk3128.c3 w9 F# b5 n- m& S- s
--- input device driver& E+ ~7 A9 I* t' Z. v' V! S
$(dir)\rk3128-source\kernel\drivers\input\evdev.c
7 m: Q+ V& b0 B' {% a3 v, K3 q--- input event handler5 H7 w- u+ S7 y+ W* g0 E0 T1 T
5 t7 S: v9 b; o9 f4 ]5 i
第四节 .config 文件的配置选择
$ D5 }8 C9 Z* x6 B3 Z5 Q5 p# }. A+ B3 j3 _' a  I6 b1 X2 Z3 z5 S
kernel 目录中输入 make ARCH=ARM menuconfig 然后按下列步骤选择
  q# c+ q# W3 f- K! j/ NDevice Drivers        --->" a, g: _; u0 R( c* O* k7 V) b7 w
Input device support--->
0 v7 q$ Q- I1 V1 }# BTouchscreens        --->
. F0 E7 Y) x: U% b: e6 ~<*>        gslX680 touchscreen driver* k+ f) c( k8 m3 j) b/ ?- c7 e

6 h; v2 S: e) z; r( E! b3 ~选择之后在.config 文件中会有如下项被设置:
& w! p5 m4 }# e1 F* d" u! h1 f* ]CONFIG_TOUCHSCREEN_GSLX680=y
. @" X8 Z; [+ x( Q; r1 t
$ e+ ], h5 G0 T7 K# k6 M7 t相应的配置文件目录位于:
8 r& l% k# n8 W% tX:\rk3128-study\rk3128-source\kernel\drivers\input\touchscreen\Kconfig
0 F3 V# \  h% p. I+ Xconfig TOUCHSCREEN_GSLX680$ o8 {+ U7 M( {: z1 K; A3 w' R

% t9 _, S" ^1 J$ R8 J$ Jtristate "gslX680 touchscreen driver" # d% x6 ]0 K/ E% |- L- V; @
help
: z4 D2 _8 i0 w3 sgslX680 touchscreen driver
; a- h7 K7 k3 a, L+ B1 P; ^+ c! }9 K/ g. g+ B; \7 ]

% J" t+ r( ]+ B; n6 l  W* E第五节 实验代码
' D! }: y; k: J+ F3 |; T! y2 _/ A, m2 F- I  s
1.dts part:
1 H$ }/ v0 |2 t! `4 p+ a
/ B; h! ]) I0 v# x+ K 1 k/ M+ i" L9 ^% d6 Q! m9 O
代码1$ T" L9 I* S5 E5 `: p! w4 w, v. T
2.增加一个可以动态测试的函数到驱动中,用户可以通过 adb shell 或者串口去输入数据完成触摸屏功能测试。  q$ p+ \2 w2 y, u2 O
1 S1 y) O& x& b: Z

4 A# i0 w% Q5 d" I * o' O, `4 @4 v3 X
代码2
( [/ w2 O- i8 ]7 Y6 ^3.测试命令
0 G1 P3 E4 T9 q5 z( C$ B命令输入路径/sys/class/touchscreen_test
) U# E" }5 y% ?7 ?7 O. _3 X关闭触摸功能:
  P+ W$ @0 o/ D* K0 g0 e; cecho sleep > touchscreen
# Q/ g+ l5 l& y, W6 f% d- {4 m( xecho wake > touchscreen
: F/ Y) a4 _& k4 L2 @( `! Q0 t9 E镜像触摸屏坐标:
2 v) q0 E8 N: k  V; R! ^echo mirror > touchscreen
6 r  Z5 Y9 u# ]1 a- W  H- |4.代码调试中遇到问题# ^4 h, B; E* B6 [
触摸挂上去后没有反应:a.中断产生了吗?可以通过在中断响应函数中增加调试信  息;b.I2c 通信正常吗?这个可能要接个示波器或 usb 逻辑分析仪去看波形是否正常。1 H: a/ p. U+ N8 f* C0 w4 w5 F
; ~$ C9 F& ^; o
第六节 实验步骤 --- 镜像后的坐标如何调节
" O6 h2 k! z% S1 G3 G- W  M" J/ K
$ K7 Z3 f1 R9 r% S- r: O. Xcd        /sys/class/touchscreen_test
9 b/ [% c' s1 ~3 aecho mirror > touchscreen
% S: \7 q1 x* a6 h4 Q. {, C
8 f1 U( Z) c* A9 d! Z" r第七节 实验现象
  g6 c$ r$ F0 A2 q! x: E- u0 R点击位置倒向,需要修改代码' y) S! s) p9 C) x: h7 K
report_data()中的两个地方 --- 自己做实验了9 Z. K* J% K! C
; w- _$ S; p# [- |- E  R$ I) ?5 d

' t5 S' W4 N  a/ f
9 V; M3 ?0 x  `7 J
2 M" B) q! y/ K, ^
) r8 B9 A0 R2 w. ]2 e8 w( \文件下载请点击: 5、触摸屏驱动实验.pdf (446.7 KB, 下载次数: 0)
" h, q- f0 W$ O; v: [! C
4 g. \! n* H+ j# f! f( u( M2 q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 02:22 , Processed in 0.140625 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表