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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
设备按键驱动实验教程
——疯壳·嵌入式平板开发
# W; X2 `6 q' z

, P; M- J6 V8 l. r' X: B! L4 u% ^
  q# S" K2 u+ I, n0 B
  u( \, t. A& g2 g; Y; i/ M1 f) y0 s2 t# V6 N$ Y! H
    第一节 引言 --- 如何看一个 GPIO 按键的电路原理图
& n3 o5 V( c7 T* c# c: C" R2 ^  m3 ~' ~
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。
* ?8 V0 Y: V) f& D* c    如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。
& ^4 D& l( j9 z3 g6 x& u
+ q/ l" }6 m) w; E6 a, @4 G
# Z, i9 y9 _$ R0 n    2 x- K9 i8 s/ }  C+ m+ ?
    图1) _. f* m4 V3 y* R# C5 P
. F8 a, G- Z- B7 I$ m3 W) v
    第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下2 A9 R0 @' g, O% V% F$ B' y2 d5 b
" l+ A* K7 }/ H! W# q6 u5 e- l
    gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用  gpio 的输入功能来模拟一个按键。
: F8 a3 Y" N- O* @5 t/ [" V# Y    本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。6 A% F  f9 K2 f' U9 U* I
( L& I$ P; c) e8 P6 d+ ~
   
4 u3 S0 E2 m) y( Y    图2
  @& |5 n1 q, O& _- I7 `    图示红框位置表示将要配置的 gpio 在开发板上的位置& W, S, X/ j) e" Y% \

! l, @& s/ ]* O+ f. B/ ~    
7 Y0 _7 t0 G% g% A    gpio 在电路图中的位置
- O0 Q% p" a. Z& ?* r( d: {    图39 R$ D; g/ ^0 q9 o3 f$ _+ V
6 U1 {8 [7 J0 v2 g
    第三节 rk3128 开发板 gpio 在 DTS 中的配置
+ b: j9 \- B# z5 ?+ u( s$ {
  P7 X6 t+ c: ?. w    rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:4 J, ?+ B# q' v2 Y/ D; F
, o. {) s3 s. {9 K. h3 u, ~
   
# E7 H0 T/ A: p& n! S代码1
5 o- A( Q9 h( }, x5 ^; m1 b( I
) ^! {0 F# d8 K    第四节 实验步骤/ g1 C; z' R5 t& X9 ~& W1 s
* b: `" \4 W" M" `' P! c7 m7 U
    1.如何看中断是否注册成功 --- cat /proc/interrupts
+ ~" N6 K$ p  ~5 ]6 B+ j+ t    我们注册的中断名字是:gpio_input_test 对应于中断号 1609 f1 e+ ?$ c1 Z% I3 P8 h6 M
) @" S# D8 p+ a0 n  b5 C" K
    , O; R/ e5 B: y$ ~0 ~8 q
    图4
! N9 Z( f+ F0 A" ]: Z    2.kernel 实验步骤2 @! d+ [1 F, k1 M

' l! _9 P0 p" l5 I    
. Q" G- M2 S) C0 g- Y" W) D3 p    图5+ A& ?. B' ^+ ?' D  D+ F9 M
    第五节 实验现象2 i, }5 B7 I6 |3 ]9 I4 u% V, e! B
    以一根杜邦线为例,低电平触发中断  G' |6 ^4 o$ q: v) W3 \# e) F3 `

4 P1 W6 W# _4 X% |! J1 w7 I* T     8 d" ]% p; S% Q  ~, y& p4 @; m
    图6/ b0 I/ p( o5 @+ A8 M; o) ?* t6 `; M
    第六节 AD 按键; \, ?  k" k) M1 d

' m8 @; z/ [- j# \! R. {    什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1  个,2 个,3 个        多个按键输入。原理就是按键按下的时候,IO 口将检测+ ^6 ]% D; f1 Q2 j( S
    到不同的电压值。) {% O! z7 b* k+ K0 `0 I" k8 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.c
5 e, y1 a6 v6 T" s  W    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。6 o+ M, n) e7 y
; A4 |. `0 q6 x, x+ o
   ) _( T) u/ q9 O  W& ?
    图一 AD 按键原理图
5 a9 ]" _0 c& S+ V: V, [9 r6 |    图7& N2 z' C  z* G3 {* V7 f7 N% y& q+ e

" v5 a$ T9 P) r9 }     . Y  ~0 l# B8 Y2 i( M0 F3 ~
    图二 cpu 侧接线图
8 T# n. I& d8 j2 Q6 J: o% ?5 o) d3 L    图8. z3 f8 u& N3 s; H' Y9 W; U

. a; \3 a7 m4 m3 _    第七节 PMIC_PWRON 休眠/唤醒屏幕
; T- k% @4 X$ n3 D, z3 C7 ?
, ~0 r1 [: m' j: ]7 b    本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c* J7 ]4 i2 b6 V+ f
    注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。1 [2 H1 f2 \* W& Z) B

; s( q; q4 j- x( f$ h$ c+ B1 x6 w2 q; i' \8 m- f9 h
2 |6 Z9 _; \; h' S) `4 y
4 h8 \$ C3 E9 ]- h  N  s
    文件下载请点击: 4、设备按键驱动实验.pdf (887.32 KB, 下载次数: 0) " v* [& @3 S* G# b

7 ^& z" J+ Q* B& {% p+ W! D4 Y8 H4 `# X8 V0 _3 R

0 H. t1 X/ `% [8 Y, o8 x' n

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 02:00 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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