|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
设备按键驱动实验教程 / K# [0 q' e" X7 Z
/ M- u( J/ p! B+ d7 }$ J+ n
/ U4 B4 O6 l1 X" {; L6 c4 P- M. [; R: T' y, E
6 o% R4 v% U9 ]3 c5 @ 第一节 引言 --- 如何看一个 GPIO 按键的电路原理图! z; P& [6 y" ]- e9 X
% R1 l& N9 G( l$ {# d 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。
" F$ H0 l3 r! y- N/ |. } 如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。
+ @% L6 w. R* f8 ^" `
; n( \8 m) [; E+ u7 W
- b5 {4 R) x1 i* O
" q# a( e9 p7 u% v. Y0 ^: ~: {: {5 O 图1! p: I2 n/ |0 Y2 j1 u5 v
* M% L& \* ^$ i [2 }% n' M
第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下, i& m2 @+ n0 R& D0 [
( F# b5 n( J( D6 f
gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用 gpio 的输入功能来模拟一个按键。6 ] c: g% {7 z1 D
本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。8 w5 t2 t( }5 [# V- U I: z
' ]% @8 A' T8 S g: i5 L
) e* d. U3 g) _% f0 K5 K3 f
图2% C; j1 d1 `* X
图示红框位置表示将要配置的 gpio 在开发板上的位置% j O) i3 w. j" {9 Y
% I9 b: _" q: W# U
. a" K" C5 _- X gpio 在电路图中的位置
; g8 [% F; G( R# q5 ~% |& i 图31 T# W7 y* e) o& M
9 k. K3 E5 q8 t/ b. N( p: g
第三节 rk3128 开发板 gpio 在 DTS 中的配置
; A6 ~- m! A3 b" C& Z* [/ a# h
" g0 T1 q6 g& C5 i rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:3 O. `: X& N b# y% a
A) V; G8 d" Z% z- R0 R$ n* D
5 r. a2 l9 y0 V0 \; p7 u& q; [
代码1
+ A5 I0 _3 C8 d
5 |* h, v$ d3 o$ K2 P 第四节 实验步骤% C9 I# j6 ], B* m) N
3 l& l5 z' j V/ M 1.如何看中断是否注册成功 --- cat /proc/interrupts
6 Q9 ?/ p5 B f9 b w! j 我们注册的中断名字是:gpio_input_test 对应于中断号 160
& ~+ g8 J7 [% J1 ] U( F
4 ^; \1 q! a. ~) ]; E9 R( v
# \* L) k' G8 q4 J! w 图4: Z4 u- ]! K7 ?9 P) C" J4 a9 {
2.kernel 实验步骤9 ~6 A& D) s4 B! H. I4 n( b
0 b7 q$ \! u$ i) x5 a" X( Q. @
! }9 {2 d6 G0 t4 c+ S
图52 [! C* n/ o$ M' I* K
第五节 实验现象
9 D5 W4 I# T: q+ v6 b* _% x8 K 以一根杜邦线为例,低电平触发中断3 k& U) r% Z9 q' L# B+ Z- e
' ^" M' x4 k( s
; j n g2 S% @
图6
+ ~% O+ x7 E/ S+ K 第六节 AD 按键
, S4 M) L" Y$ Z5 O& u" y/ s6 W8 P) h! V( n
什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1 个,2 个,3 个 多个按键输入。原理就是按键按下的时候,IO 口将检测
) o7 I; y, Z5 d C3 Q 到不同的电压值。
7 b6 o% A6 e$ L! p9 l* N3 D- Z 本节第一张图所示三个按键就组成了 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.c# ^ o1 U- d( P; a' E) f T
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
) w& j6 X) |: t& J! c+ m) g
- J$ f7 W o/ |+ F' M! n
" y( r: \3 u+ K8 l4 l, M
图一 AD 按键原理图
4 s7 T0 `" ~* z1 `2 ~, U 图7% e" _0 C; x' d3 c5 E
% o4 l' W3 l, l+ w* }
, O8 |! L' I. Z) p: M( [* q6 ~ 图二 cpu 侧接线图
D8 v# R+ J! C. \ 图8
! C. V8 W. A- N' T& J; }& X7 K* O e+ [) M) d
第七节 PMIC_PWRON 休眠/唤醒屏幕
1 D# H9 o$ q3 z, L. }3 N/ y1 q- _3 S1 u6 Q% E, f- J
本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c3 E4 P3 s; I3 x
注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。( `4 E8 b0 G, ~1 e- l
" L/ G& | b. I2 Q8 `7 X' \1 A; h+ p
7 a/ D: U# p* I$ w+ }" C+ v( P5 }7 ~- `0 b
) {0 y( s |3 b! |% U
文件下载请点击:
4、设备按键驱动实验.pdf
(887.32 KB, 下载次数: 0)
% [+ k) K: O! ?- L/ }9 p, H5 Y
7 @- d" {5 y6 H8 @" f. d0 G
$ r0 b3 {/ c; x& u ? |
|