|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
设备按键驱动实验教程 & Z" h" O, V/ _9 ]6 |& c N6 j
! z# `& r" _6 \% A2 Z. k/ S8 v8 X$ @) i# W" z+ K4 ?; C. U w
( l/ t$ |' t4 d& y; L5 V5 B7 {& f4 S9 L9 i: U
第一节 引言 --- 如何看一个 GPIO 按键的电路原理图
* K! i& e- H8 j6 m% u
F1 W) O' `$ U I% {# | 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。. T: l" R9 Y2 E: d# y& t a
如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。
8 E+ z1 |6 d8 R, o! S* q T
4 {/ C6 V' w/ w5 N" W
8 K: t2 C5 B4 k3 P: I* J* x8 Z4 N
5 b" n0 B+ k, D+ q$ X) C
图1
( R' D i) D" j4 m$ H6 M9 ?
/ R& i0 |, E& M4 d8 s) E. } 第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下
% i5 ^# {- o! K* z& Q& l& W! `/ m. ?$ U* D
gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用 gpio 的输入功能来模拟一个按键。
) V# Z" D8 z# ]* h( E 本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。
9 u' W1 g* y$ Z) i! ` e' k' ~/ x) m4 I& ^
# O; q" _! e8 ~% h+ f& }; b, R 图2& T- X) {+ m \% H# w/ ]3 v
图示红框位置表示将要配置的 gpio 在开发板上的位置6 u& U% ^- ^9 J3 f
7 S$ Y+ Y0 P7 O5 c0 h9 Q
% p6 d# o# z' T gpio 在电路图中的位置
C$ Y+ i, {4 F 图3
0 E0 q8 r0 @- @: s, t9 V2 K% f. O) B- G, L" @+ b# U2 O3 E# \, F
第三节 rk3128 开发板 gpio 在 DTS 中的配置; t% A- U' O. s
2 R; K) o, B: T& t F' B
rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:
9 G' \/ `( L) ?$ W4 E! X8 J3 W3 F2 l; T
3 E# n3 C2 w8 ~1 M+ j
代码1
% p$ @4 q( ?8 }
4 R- b0 R7 Y7 D' h' { 第四节 实验步骤0 A" X @& g/ R) O2 T7 n+ d
2 I4 I4 @# ]! E* G& a+ z# |- ~6 b 1.如何看中断是否注册成功 --- cat /proc/interrupts
/ T) F" b- p2 V! C5 o 我们注册的中断名字是:gpio_input_test 对应于中断号 160
, l% S3 s2 \, O' G8 ]$ L1 ]" m; I; h
" g, C) ~7 G; v7 g+ y* ?2 s 图4+ Y/ V3 U: d) n+ p' V: `8 W& v
2.kernel 实验步骤
, h/ K( w0 l$ C* P! g+ J: R
- F3 {+ W* B7 d6 A8 J
# r( @; J- c; t4 m, v# q# f 图5
3 ~! d7 V# U- [1 w! V 第五节 实验现象 `; l7 ?' p; d+ ]$ a
以一根杜邦线为例,低电平触发中断
- ~4 X4 ?3 Z4 I) \# S6 P1 k, J( U% Q$ `4 m" E& S! i* ~
, y e5 O* Z0 s! ^) E! V. q 图66 i5 c; h7 a# [- j5 G- R8 |+ f
第六节 AD 按键
8 V# t- l: B* s( ]" K
. x8 R7 T! b, i. p( a' S; | 什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1 个,2 个,3 个 多个按键输入。原理就是按键按下的时候,IO 口将检测5 y7 U; L1 A0 N+ v& x
到不同的电压值。6 W2 E9 v3 R) L4 ~' S4 o
本节第一张图所示三个按键就组成了 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
/ a+ ~ D8 I9 s6 t( M 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
2 S" k' k% A. C: q, Q! T8 l5 G8 s A
' K ^& d& w, W' h0 _$ q/ o
o% p' ^6 X& |% m
图一 AD 按键原理图
a; g7 m1 K- k# L1 ? 图7- S' M; S6 X0 R9 E6 E% \0 w* |
3 ^- B) T( |$ b2 ~
. x4 X3 R7 x& f. n7 v! w, N 图二 cpu 侧接线图
; p& T& m- j, I1 f. s7 v 图8& Y- F9 Y; h- [5 A( M/ L. \
# x5 f) d+ U% [; q( l
第七节 PMIC_PWRON 休眠/唤醒屏幕
# ^' S4 D: W2 [! g/ T% s# Y% C# [4 J# u* ^- ]7 K
本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c
4 X3 @5 [8 _% r+ \+ c% R& b 注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。
. y9 E+ e! x. N% v5 R3 a1 A: _
! o% }5 r2 J; M |( f8 }. A, Y" n1 F F. i7 W% i
3 n9 e- I' k5 m3 M
0 B6 t# A7 e( s3 o8 ?1 a1 S; ]6 B: N 文件下载请点击:
4、设备按键驱动实验.pdf
(887.32 KB, 下载次数: 0)
0 G* q% R8 i# k0 I8 R. R2 T# d+ X: C# T
S6 c' O, N2 L5 `: X* y: d
3 P9 g' Z& g( U, Z1 H
|
|