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

【教程4】手把手教你做平板电脑-设备按键驱动实验教程

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
设备按键驱动实验教程
——疯壳·嵌入式平板开发

0 g5 s( t! I% H3 w, E3 H5 e, r/ V" |5 }( I# F$ U2 O, J

- B: ]# F2 q% \0 v8 I: e5 [/ v$ ]1 d4 M0 Y9 }& B2 M

! z: \1 ^+ F- q' x& U    第一节 引言 --- 如何看一个 GPIO 按键的电路原理图# j. Q6 A8 P7 X

) m/ |+ Q5 N5 ^& v    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。
6 ^0 A8 {& E7 X    如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。3 W! a- C, T, B6 E+ {* n! Q
: `. Y4 S  z. E% n- b6 R) I" A

9 W% X) H4 U8 I! i; [    0 G& _7 y: B; B/ P, o7 e: W
    图13 a* z7 L+ O3 r8 M- X0 I
& y$ a8 D, y# m" o! b* [4 g
    第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下& E6 E% `6 G* F2 I! B

  t; D6 ?+ H1 ]+ M3 u6 b    gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用  gpio 的输入功能来模拟一个按键。
; k' d+ k) Q, m  V# O& Y    本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。
' }3 p$ z; Z/ v' ?: L8 n' x8 v  k* N2 z; ]+ y1 B# V' ~" N9 R
   3 u4 r1 E4 c. @; K5 e
    图2- J9 [' C$ G: }- m9 @5 e! L
    图示红框位置表示将要配置的 gpio 在开发板上的位置
- g9 Z* m1 S/ ^. w4 {7 u7 @
$ w. V( j$ B9 Z9 ~* u2 R    6 p, l% s. K8 M' o  c5 Q
    gpio 在电路图中的位置- O- T$ `4 T# a  ]" [) h
    图3  V/ }$ G: o$ t( m( `8 b2 s+ P/ D- B
0 R& e& s' g% @
    第三节 rk3128 开发板 gpio 在 DTS 中的配置
5 o: i% ^' P* p2 l8 E7 Q* s/ R3 ]; X) y
    rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:
# |; s6 P: d  ]$ w$ j7 P5 J6 @3 s7 g6 V
    ) {: X' D( P* p6 i) e* C6 o
代码1
2 c) t8 J( F( _, c) j
+ ]) A% `4 K+ t7 o    第四节 实验步骤* {& D/ V- O8 T) P  o
1 V% @1 X  y7 o2 ^$ g/ Q
    1.如何看中断是否注册成功 --- cat /proc/interrupts7 L5 K1 Y3 i3 K7 L% c- e
    我们注册的中断名字是:gpio_input_test 对应于中断号 1609 R2 }  H$ \  g8 S

( u6 B  ^2 B3 G4 x* p+ Q$ V4 z    
/ j, D4 B' ]" M- ]    图4
! \: q3 W1 t% h2 G* z    2.kernel 实验步骤
+ K1 ~' i$ B/ J9 U( ?
: e: p' O+ J1 _, ~2 `2 L" I: y    
% l1 d; l" W  L    图5
- o) w; E9 t" q& Y6 m- D    第五节 实验现象; F  L6 h  j: z5 v2 V8 Q1 ~
    以一根杜邦线为例,低电平触发中断6 Y1 ?7 Z# M2 H

( f7 w) |3 t  X3 v3 a& q) c    
, J8 N  U) m5 @, I0 l9 `2 i    图6
  y, f% {9 m+ ?7 `; Q9 N0 k9 W' D' g  o    第六节 AD 按键, ^" ?7 b  O8 U% x$ i; N

' C* ]4 Z- l; l( W    什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1  个,2 个,3 个        多个按键输入。原理就是按键按下的时候,IO 口将检测
* b; \4 T: w2 b- L  t5 \6 e7 U    到不同的电压值。" e/ x& a. |' K8 |0 a
    本节第一张图所示三个按键就组成了 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.c6 }+ p" @# [* v. g7 M# Z
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
+ n" d- |, E% B: t- \2 P) V$ G/ Z# ^; z* n9 E, ^& n
   
; B8 e$ }0 O2 ?4 R. D( G5 V; @    图一 AD 按键原理图1 p$ Z( M. N; w8 v7 o
    图7
1 B: i/ ]; ~% o3 ]6 W2 J
  q" d9 M. [8 R    
3 f5 \) K8 _. x$ D: n4 s/ ^    图二 cpu 侧接线图/ z( m5 G; Y  t
    图8
- M. k. V. i- I* _( R4 j+ y* `; M% `/ \$ ]+ d) i# w
    第七节 PMIC_PWRON 休眠/唤醒屏幕+ o  l3 y  A5 V6 S1 p; o
, F0 W# b. e5 U$ ?
    本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c1 g' e; i3 ^: s' O
    注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。; x6 S3 n/ J8 e) M6 K

: I9 R5 V$ R5 o* u5 [5 n) Y5 `8 S% H+ @- K
- M2 g% i4 L& j  T& M

7 E: h: B; {0 X: G    文件下载请点击: 4、设备按键驱动实验.pdf (887.32 KB, 下载次数: 0) 0 v3 u8 E8 k9 O

% q( n% y8 p2 m6 L
  X1 J2 T+ ^. y$ A! c& n
( T5 J9 `9 Q9 x

该用户从未签到

2#
发表于 2022-8-23 15:59 | 只看该作者
实验教程有没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /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

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