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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
设备按键驱动实验教程
——疯壳·嵌入式平板开发
6 W7 I& a* o" ]. q! L% D+ u

: b( B  d+ z2 H: {9 _0 I& Z$ Q# y1 d

: T9 B+ n0 e, D( C4 c4 i5 r7 _3 g
    第一节 引言 --- 如何看一个 GPIO 按键的电路原理图$ s( e# S& S" t
9 N5 Y  Q. x9 t6 E/ |6 w
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。
8 j8 A) I. B8 W8 A    如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。" H6 G' }! z+ K% b

# ^6 x; k. T" `+ ~0 a 2 f3 B! w) C. _' W: |- L5 u" O
   
) y7 K$ c  B4 m- o% u% _& w- N    图1
+ `" x8 s/ \+ ]% a' h. M! K' V, r) p! l
    第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下# [' q' W0 t! I5 D9 ?

+ M, ?. _4 v+ y9 m* @  w    gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用  gpio 的输入功能来模拟一个按键。! X+ q- i4 g& b( m
    本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。
" Z  P( }4 v& u' {, K: A# o* g1 j" F0 H9 q' W7 [! B
   
( q! t% z% S  L" _9 [    图2
2 t) `' b% e4 n$ D- D6 a# j# Y& W    图示红框位置表示将要配置的 gpio 在开发板上的位置
9 @% R5 N# k9 x. h" S6 t3 F1 x) Y3 I. u7 i1 O  M
    2 q9 |9 |3 w1 T
    gpio 在电路图中的位置2 S! k. p9 T! m) |1 k8 {* v7 M
    图3: C) p- o9 J) T9 o
" J* ~' w9 o  L8 S' V
    第三节 rk3128 开发板 gpio 在 DTS 中的配置
1 g+ Z' R; @# L" M' B. S" q
  {& n; d$ m, A$ E+ J( G    rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:9 f3 y9 m( [9 [  C, \
) I# ?1 Y% u5 m; W/ I' p
   . z( p8 M# C  a. L4 B1 H
代码18 {& {1 H' L0 N$ F
+ d. }. S! {; R7 I+ M
    第四节 实验步骤/ l. S# k) }7 s2 T4 H1 ^& k
# b7 f2 x% E7 I0 s9 u" L# w6 V1 w
    1.如何看中断是否注册成功 --- cat /proc/interrupts
4 \1 b, Z" {: o: O( j    我们注册的中断名字是:gpio_input_test 对应于中断号 160
1 c) ]5 ~9 Q3 j+ G3 h4 R# L2 j/ \9 y/ n* N1 A  R9 W
   
' I# |: {% {# ?% E    图41 {7 k2 w8 e( U# U' l
    2.kernel 实验步骤+ O% t, e5 D* U" N3 ?
% Z0 ?) I" h, s! \2 v9 V! q! o
   
( O/ B0 C$ f* s) a9 d" B! N    图5" a! ~: ?- _  v) _9 g3 X' k  d( E& a
    第五节 实验现象% a! W/ W4 d3 t. Q% B" x0 C
    以一根杜邦线为例,低电平触发中断
; i+ b8 o; A- S& N2 k5 J3 f! m
( Q6 T, {5 y- F3 p+ o    
: t# o# t* r3 ~/ x    图67 g# x8 O& e3 G* V+ o3 N% A9 `
    第六节 AD 按键
& N+ b8 g, O9 u% N& n
+ g: k' F, E& {, y* H    什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1  个,2 个,3 个        多个按键输入。原理就是按键按下的时候,IO 口将检测
% m0 y% [6 d5 N8 Z# ?5 ^    到不同的电压值。. {, C' r- x, U5 s
    本节第一张图所示三个按键就组成了 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.c2 N, s' B) B; [8 J' p' R4 `5 ^
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
0 ]2 r$ x  H( Z6 P: ]. U& f* q; X, v% \0 B# I8 ]3 A, n5 P: m
   , f1 Y8 y& U) q
    图一 AD 按键原理图
: X0 A1 W7 F) u4 S' y- t& }& e: y    图7
0 s( h9 z- Z% `
+ U; t4 X/ u) _    
0 E7 L  S# y7 Z7 J# r0 o% t    图二 cpu 侧接线图& K! Z2 s  N2 ~, |, p
    图8+ b/ w# J& @0 @* z& p6 J
, d' c+ R- l7 [) F1 P' B1 A- X% |
    第七节 PMIC_PWRON 休眠/唤醒屏幕% l. a  `) Y3 e6 g1 M. t; U

( K& L7 R& ]# a    本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(gpio 的一个应用) 相应的 driver 配置看$(dir)\rk3128-source\kernel\arch\arm\boot\dts 中 rk3128-study.dts的&adc{...}选项,源代码对应文件是$(dir)\rk3128-source\kernel\drivers\input\keyboard\rk_keys.c
( p  l1 ?8 k0 N) K' m- E    注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。
- b, n" n, G; e1 M$ H8 l) k
2 x' o' m9 b4 W& W8 J; j' \* `9 y; L* q' u$ x7 o4 ^4 k
- C. `0 ?% [& q5 ?, y/ {2 {

: U3 i) h% B3 U. S4 t8 q    文件下载请点击: 4、设备按键驱动实验.pdf (887.32 KB, 下载次数: 0)
0 X% l- ]; c3 J- a" U2 `: ^9 J  F( H# ]4 g2 _  t/ B: u/ N. u
: ]" Y9 X7 h) K# G4 W8 S
5 J6 @, {& t- H$ P; [8 N4 @6 L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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