|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
设备按键驱动实验教程
0 ]- r+ J/ }& h/ p3 C6 ]5 N' D$ V( k
) L' [. V R) _2 W$ ?' T( E) B! b
' A# o! i2 i0 z, q
8 c9 j0 t( a# Q" b
第一节 引言 --- 如何看一个 GPIO 按键的电路原理图
# L6 J/ L( P9 k3 `* |$ z2 n
3 d, e5 X6 c2 H8 X 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。. U- ^. B& G3 W
如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。8 S0 G9 `, K4 x7 R: \
2 H7 A4 n. L0 x8 S
, K' d. j+ ^7 Q! B
8 Z/ _8 H/ @; z- T) p: D 图1
# k* O" c! p; V. [1 ^
" D' J+ o) t* W9 q/ ]5 H' y7 G 第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下4 r3 k3 U: A" h4 T: k1 Q" G
+ V; r8 Q8 g5 G6 i' g- Z5 E
gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用 gpio 的输入功能来模拟一个按键。6 n! l2 g; H4 P+ ?8 S" C* p
本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。6 S* ^4 P3 H+ y, g& C" b
. R+ T2 J- b; ]) Y3 J: D1 d* _
+ P" e' M: I% j2 U
图2
- E7 c6 p- M0 o" S( E% } 图示红框位置表示将要配置的 gpio 在开发板上的位置
2 P4 Z" a: H/ y: W( c; X% [4 I* S2 E' a3 j
, P8 ]( H; _6 y9 b4 N
gpio 在电路图中的位置
9 e Y, q9 i+ ?. M 图32 Y/ g: X; ~) e- a) a% f- v
' J8 r) l% E% T3 v1 J 第三节 rk3128 开发板 gpio 在 DTS 中的配置4 I0 E* I A( g' P- `! \# K7 F7 c
) }9 u/ v- F+ e rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:, M5 J L# h! v$ T' r5 \& E' ^
2 B2 {/ W+ Z+ q6 L- U% O$ m
8 p$ }2 T! T: e" `9 r% I代码1& x+ k/ e; S4 n4 I' M! `7 J5 {
5 c6 o8 U/ }/ Q8 x 第四节 实验步骤" U ~" K7 F( | w; M
' k5 @5 X- ^0 x 1.如何看中断是否注册成功 --- cat /proc/interrupts8 x; S B% {6 g0 d
我们注册的中断名字是:gpio_input_test 对应于中断号 160" t" `$ I5 ?& v6 D9 s
8 d6 V$ r5 U1 K3 c( @
0 D; i0 G1 n# F" r7 ], M M& E 图4
( m9 p5 ~0 [: ?. Z: q% V- X 2.kernel 实验步骤) v5 t4 I! P Q+ E
2 X2 G8 \. s) Z; j
0 f6 ~: }2 F6 `( u/ h u
图5: ^6 B, `3 |0 o& Z
第五节 实验现象5 o4 \' \, Q1 r: }
以一根杜邦线为例,低电平触发中断
" y& i2 T5 }+ L8 ]1 H2 e, ~+ V5 q" `. V" ^% H# q
0 ^% J/ Y, w& b8 N$ \, V7 z/ @/ k
图6' m8 H$ Q9 C0 O0 G+ O+ E
第六节 AD 按键
% q9 Z' E" I. g" Q- R& [ M" q d
1 H$ }! V f+ P$ I 什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1 个,2 个,3 个 多个按键输入。原理就是按键按下的时候,IO 口将检测+ {: s, W" t4 n4 y/ x: K8 n, S
到不同的电压值。0 ~" Y1 U; }% l
本节第一张图所示三个按键就组成了 AD 按键并对应不同的阻值报告给 cpu,cpu 检测后知道那个键被按下,相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中rk3128-study.dts 的&adc{ }选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c9 o4 q0 P Q; t: f
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
0 ~( W4 G8 C: Z" f# ~8 k6 ?- `- y& E4 t, o+ G
# k" V, [7 C: w1 u' p
图一 AD 按键原理图
! ^" c/ D& k2 g( T }2 ?9 O8 n, W: z 图7
" S- W" I3 d; Y4 }; V
" ^4 G7 _: u7 Q5 H8 `
1 K3 i) [% _$ c% |5 w7 Z 图二 cpu 侧接线图& }1 s6 {* n4 g, b% R8 L
图8
! q! p) k: X( ]1 A# E1 j' c. u0 R
8 x( F* E- J8 ?4 o6 l) U. x 第七节 PMIC_PWRON 休眠/唤醒屏幕; G2 v4 C& r2 s
( D8 y* w" @2 N' V* F+ g9 S 本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c
$ C5 t' d( m, j) C1 Z, | 注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。
; k$ A0 d k# Z$ w" T& j4 C/ B, x6 B8 h0 E- Q! p3 ?8 Y- p! }
. A+ W8 X! x, A# t0 K
- E# |$ ^# l- u" Z) a# `8 h1 k
) T8 y% G) v$ ]3 w9 w3 k
文件下载请点击:
4、设备按键驱动实验.pdf
(887.32 KB, 下载次数: 0)
/ s; e Y" U3 G8 R3 A% J; {
: z5 }+ a2 j" @/ d7 i" F0 r/ u2 ^+ C5 G
0 F# _9 m0 X7 W& _. v3 R2 H |
|