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

【嵌入式开发教程4】疯壳·平板电脑-设备按键驱动实验教程

[复制链接]

该用户从未签到

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

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-28 19:49 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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