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

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

[复制链接]

该用户从未签到

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

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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