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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

; z% s  G5 A1 S" A$ Y% X
% X# f$ _- G6 P) A# X: K
) m) o* D% i7 N第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c& _" G5 S3 Y: f8 h: I
; A0 w0 F1 x; J9 q% s, x
触摸屏驱动注册到 input 子系统中后要遵循的框架结构如下:) d4 _2 H. [+ D/ ~! i4 @  k3 m: ]
1.input dev 的注册,参考 gsl_ts_init_ts()函数;
  y! M4 ~: W3 W: `2.input 事件的注册,这部分没有明显的调用 input 子系统的 input_register_handler()函数,说明是用的系统缺省注册的 handler,即 evdev --- 一个原始的(raw)输入设备事件。  Y. h1 z8 D; F$ N) ^

" i/ l8 f+ \) [( q/ p! a 0 b- U" y! g4 m: I1 l% K' n  S
图14 `# o9 p4 \* U4 U4 u+ F* F, z

. K4 y1 A1 `# b6 c& ^# c/ @6 L第二节 电路原理图介绍
" Y  _4 q0 {2 O7 F7 v* C2 `( U7 Z, B% \! g4 S# `- B' t
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 19 页。1 k6 q7 H& B' L) t% `  q. t$ @% v
如下图可以确定 TP 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,TP 作为从设备。TOUCH_INT 是用中断的形式用作告诉 cpu 已经有触摸产生,cpu 可以从 I2c 接口读数据了。TOUCH_RST 是用作触摸的休眠/唤醒。( E5 z" p5 l; E) |/ N

  c* S; _5 s0 v, ^" A. i. d8 m
2 F& ~# T( S, Z* o+ \图2. e: d' Z( T9 C+ }& F+ j! J
+ Q" ]) v1 ]+ a; |! F3 ]5 K
第三节 TP 驱动代码结构
$ [9 R+ ^/ r5 H" g, m& F: S" G, @$ A% w
$(dir)\rk3128-source\kernel\drivers\input\touchscreen\rockchip_gslX680_rk3128.c, P+ u& ?/ }/ @7 V
--- input device driver  @7 U" ^0 [; v2 F4 T$ K
$(dir)\rk3128-source\kernel\drivers\input\evdev.c2 R6 B6 Z9 W9 C  L3 C' D- M5 `
--- input event handler
1 `0 [" M, U# D6 C7 z
8 w( w$ T( ^! w% G( n4 |% ]5 H/ X第四节 .config 文件的配置选择' @1 t- r! P) I4 ?) T! a
6 V2 O# c; {% |; A) K6 x
kernel 目录中输入 make ARCH=ARM menuconfig 然后按下列步骤选择+ C3 v9 N0 l0 [4 x9 D% x
Device Drivers        --->. k; A0 a/ S; _5 O3 y$ Q
Input device support---> 8 @) I4 ~0 N: d; A
Touchscreens        --->
* \& r2 j& s. W+ j( d. Y  c. l<*>        gslX680 touchscreen driver
2 ~4 J6 a. C' T: Z' [" d7 ]
0 F# R5 \" ^* q* Q3 e& W& a( Z选择之后在.config 文件中会有如下项被设置:
! x$ q5 N, A$ MCONFIG_TOUCHSCREEN_GSLX680=y8 m. r- W; Y( t, X9 ]# k1 _. W
' S: O. s5 a8 j7 H3 z2 n! D& U
相应的配置文件目录位于:
* R$ N; ?0 _/ BX:\rk3128-study\rk3128-source\kernel\drivers\input\touchscreen\Kconfig
* ]2 \* ~) l2 F9 K( `$ Bconfig TOUCHSCREEN_GSLX6800 I% E8 K6 T+ D6 P' J% f5 B9 W- [
" ^, a7 R/ t( g+ K6 h
tristate "gslX680 touchscreen driver"
% G2 L/ R  _+ M7 B$ I6 Dhelp
# O  c3 U+ C, }) N$ ~gslX680 touchscreen driver
; _+ T6 y) g$ h. |9 ^) v1 B* F9 n. n2 g, T1 G1 b
8 H: v( [! g" a1 x- C6 o
第五节 实验代码
+ \; P/ R% S; a% C1 z
/ X' [- z: @1 y) C1.dts part:5 J! ^; Z0 n* y) U
% k: z2 ?; o" ^0 S7 C2 B

% Q# w) @- x% b% t6 C: S4 i代码1! f( _: _2 D' ]4 y9 V9 E
2.增加一个可以动态测试的函数到驱动中,用户可以通过 adb shell 或者串口去输入数据完成触摸屏功能测试。
2 T  z" p2 H+ U' K/ m. A; d
. V( x3 L6 i4 t) D6 ^' s4 Q $ m+ v/ p0 A0 d; O" M0 n& g  M
/ F# {0 \0 X" b
代码2
2 d* U, w, F& D6 k! l, S# {3.测试命令: d1 _$ W/ w) j# N9 a' H' ]
命令输入路径/sys/class/touchscreen_test
# ]& a1 N2 Y3 k$ n: X关闭触摸功能:
8 A$ V* ]8 c  d* x: v" N2 _echo sleep > touchscreen - C1 O1 T6 l9 L' o4 b
echo wake > touchscreen
  i' t% ?& u+ T. R镜像触摸屏坐标:9 l- |+ ^: O6 n# n7 A& T
echo mirror > touchscreen 2 }: V% \1 {1 S, l7 `
4.代码调试中遇到问题
6 N7 t+ l5 r2 L0 l: x4 B0 D触摸挂上去后没有反应:a.中断产生了吗?可以通过在中断响应函数中增加调试信  息;b.I2c 通信正常吗?这个可能要接个示波器或 usb 逻辑分析仪去看波形是否正常。' {: I' R3 \- l4 f+ F. f/ r

4 w- M* x. G8 m+ O第六节 实验步骤 --- 镜像后的坐标如何调节
- k8 ^' S, J2 u- r& y" g0 B, X' Y' u8 S) d  g' v: ]
cd        /sys/class/touchscreen_test % ]2 Z& i4 n5 m
echo mirror > touchscreen! P& t( `* Z' Q' E

' L$ t5 x0 r" k( g, i! p, B. G& e! B第七节 实验现象
0 ~5 S: F# b# k5 [! j  s点击位置倒向,需要修改代码
" H+ t( \' j% ^0 m. preport_data()中的两个地方 --- 自己做实验了( x. _  o8 ?3 J0 z
) b: [/ E+ E, R8 A% d/ J( E; |) d) e
& B& m; M- s: C* G' v* B
5 R0 L' P: w) ^: ^$ y/ ~

9 Q3 Z$ \' }8 _
) f/ Z- l2 P4 h  e, {2 Z. @9 h文件下载请点击: 5、触摸屏驱动实验.pdf (446.7 KB, 下载次数: 0)
5 H+ K" n% J9 |4 A. p1 f( y
. [& N: q: o/ F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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