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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

3 T5 D; H  `; V4 }2 V2 l; b
& |& U5 `$ ^0 Q& n
! h2 X  m& J" Z( d" b) A
3 N5 {  U. Y9 h+ M% N, b& H1 B: F6 k) D3 W, }8 R4 U
    第一节 引言 --- 如何看一个 GPIO 按键的电路原理图
% G* ~& @$ E' l: K. @5 m# V! }- K
9 q2 ], A0 [- S& C    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。
5 F& y  V6 j8 Q9 U    如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。2 q2 R' w7 ]5 i* x

/ q( A6 o1 H  d) l , A* S# ^9 n- D0 q+ F& ^7 k
   
  [) ~, d/ x5 w0 b7 [    图1" I2 S4 d! S( o7 D$ N  ~4 ]1 w* T
- R, r! _1 u% k2 j' [
    第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下% X- S( S$ v& D

4 _2 ]# w* H) @8 f& t8 H# V    gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用  gpio 的输入功能来模拟一个按键。
4 v2 z0 n, Q  H! ^" F    本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。+ s( u% T$ U6 y/ H/ W

/ E5 z7 S. q% I2 p    & w/ S1 _9 z6 }  Q/ `0 b
    图2; a2 M. _* |, p( c. L- Z; K
    图示红框位置表示将要配置的 gpio 在开发板上的位置2 y( V2 m1 I& s5 R+ h$ I
3 v8 J2 p- @2 T. E0 ~' e
   % ?7 m0 b6 n1 |8 Y  r( V
    gpio 在电路图中的位置1 z4 {+ ?$ h/ \/ M+ X) h  |7 f
    图3% \; }7 H7 O& [9 V8 a! G" _

/ J; B" R' A* k% q& Y" E, a    第三节 rk3128 开发板 gpio 在 DTS 中的配置0 ~' S( w& ^  f+ z
9 ?0 i$ t) v/ `! p: S
    rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:
3 m! w( f( a0 M1 K, G) x: Z4 ?+ W& W8 R$ e3 r! G
    4 n% C6 C" k+ U' @) z! u
代码1
! y( f+ s" f2 k9 ]  G( [6 z" p; v# s
    第四节 实验步骤
8 i( q. v; Y9 b3 _, R
5 b8 S: w4 h1 \5 `1 H; r- ?    1.如何看中断是否注册成功 --- cat /proc/interrupts
, d, L) V! c* q% z# @" y    我们注册的中断名字是:gpio_input_test 对应于中断号 160! d" x* t1 C4 t2 T
/ H3 L; A! p8 m' \
    ) F: F$ P0 h/ ^$ [( Y
    图49 L2 u) Z- P1 X7 w1 @8 k
    2.kernel 实验步骤6 q# I+ b" F6 O# r+ J% W4 {

. c$ J% G/ U; v    
: o* C& l% W8 P3 A! C. ?: A    图5
5 e% L6 {4 U; d- g4 G    第五节 实验现象7 N. y9 o. p! s, K. P
    以一根杜邦线为例,低电平触发中断
0 |, {% n) f8 |5 j: D; U: f: Y7 i. H# O+ |3 X, A3 ]
   
4 w9 ]0 E& p2 R3 @* A    图6
  S8 _0 O/ b3 w9 q& I$ o    第六节 AD 按键! r8 N; D* v- X8 b6 l
5 U4 w9 ]+ a/ T. M4 t9 Y$ y' l
    什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1  个,2 个,3 个        多个按键输入。原理就是按键按下的时候,IO 口将检测5 c8 g1 o/ N  u* D) T; u
    到不同的电压值。
8 y& E8 J# z4 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& v8 r9 d% j. b
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
  P( J! F5 P6 N1 O( k  D2 N5 U! e# @: |- Q1 y2 \9 V
   1 O/ t2 z% ?4 D9 r8 ^0 R( ^; K
    图一 AD 按键原理图/ S/ p9 q# l$ S/ ^
    图76 a6 \5 ]) W! N% k* I% m0 N
% m" i+ S. }- A$ Y% E) a2 Q
   
' `/ U1 v0 h! x$ p" R2 H7 S  q! I    图二 cpu 侧接线图
5 |: P8 T/ ?$ ?. P6 R2 N1 R    图8
2 L) y. b0 s, x# m% R& i" `. l: i& I: a/ \0 a' H3 n
    第七节 PMIC_PWRON 休眠/唤醒屏幕+ J- ^! T: L! L' Z) @
/ e3 N0 f! z$ Y" _8 S; d
    本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(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 v- [* |! |: Y& ~    注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。% \+ N- _4 b0 ^1 X  u

5 f  `: N: i  [* }0 m8 b2 \8 l- `2 v7 Y; c) @, H$ c

6 ]1 m" @( t7 e2 \$ n) `/ p1 Q# T9 J: A3 W( C' \$ N
    文件下载请点击: 4、设备按键驱动实验.pdf (887.32 KB, 下载次数: 0)
2 x9 `- ?! ~2 D( s( y% C. A  P" P$ w/ }& f5 q

, O- h* B, o* k& j$ U6 u, M( u: ?, u7 B

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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