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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
设备按键驱动实验教程
——疯壳·嵌入式平板开发
& Z" h" O, V/ _9 ]6 |& c  N6 j

! z# `& r" _6 \% A2 Z. k/ S8 v8 X$ @) i# W" z+ K4 ?; C. U  w

( l/ t$ |' t4 d& y; L5 V5 B7 {& f4 S9 L9 i: U
    第一节 引言 --- 如何看一个 GPIO 按键的电路原理图
* K! i& e- H8 j6 m% u
  F1 W) O' `$ U  I% {# |    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页和第 12 页。. T: l" R9 Y2 E: d# y& t  a
    如下第一张图 PMIC_PWRON 引脚在按钮按下前一直保持高电平,按键按下后变成低电平并触发中断休眠/唤醒屏幕。第一张图所示 pmic_pwron 连接的是一个按键电路,第二张图所示 pmic_pwron 连接的是 GPIO0_A2。综上所述,按键可以由 gpio 来实现的。
8 E+ z1 |6 d8 R, o! S* q  T
4 {/ C6 V' w/ w5 N" W 8 K: t2 C5 B4 k3 P: I* J* x8 Z4 N
   5 b" n0 B+ k, D+ q$ X) C
    图1
( R' D  i) D" j4 m$ H6 M9 ?
/ R& i0 |, E& M4 d8 s) E. }    第二节 按键配置实例 --- 以 GPIO2_D1 为例,高电平触发上升沿来模拟按键被按下
% i5 ^# {- o! K* z& Q& l& W! `/ m. ?$ U* D
    gpio 引脚通常可以配置成输入和输出功能。作为输入功能,一般在 linux 系统里面是以中断的方式来使用;如果作为输出功能一般主要用来提供一个高低电平信号。本文利用  gpio 的输入功能来模拟一个按键。
) V# Z" D8 z# ]* h( E    本章主要以 GPIO2_D1 为例子讲解,给 GPIO2_D1 一个高电平来触发上升沿产生中断操作并串口打印一条语句。
9 u' W1 g* y$ Z) i! `  e' k' ~/ x) m4 I& ^
   
# O; q" _! e8 ~% h+ f& }; b, R    图2& T- X) {+ m  \% H# w/ ]3 v
    图示红框位置表示将要配置的 gpio 在开发板上的位置6 u& U% ^- ^9 J3 f

7 S$ Y+ Y0 P7 O5 c0 h9 Q    
% p6 d# o# z' T    gpio 在电路图中的位置
  C$ Y+ i, {4 F    图3
0 E0 q8 r0 @- @: s, t9 V2 K% f. O) B- G, L" @+ b# U2 O3 E# \, F
    第三节 rk3128 开发板 gpio 在 DTS 中的配置; t% A- U' O. s
2 R; K) o, B: T& t  F' B
    rk3128 驱 动 配 置 使 用 的 是 Device Tree 的 方 式 , 所 以 在 kernel 路径 $(dir)\rk3128-source\kernel\arch\ARM\boot\dts 中 rk3128-study.dts 描述了我们整个系统的驱动配置,gpio 的配置如下所示:
9 G' \/ `( L) ?$ W4 E! X8 J3 W3 F2 l; T
   3 E# n3 C2 w8 ~1 M+ j
代码1
% p$ @4 q( ?8 }
4 R- b0 R7 Y7 D' h' {    第四节 实验步骤0 A" X  @& g/ R) O2 T7 n+ d

2 I4 I4 @# ]! E* G& a+ z# |- ~6 b    1.如何看中断是否注册成功 --- cat /proc/interrupts
/ T) F" b- p2 V! C5 o    我们注册的中断名字是:gpio_input_test 对应于中断号 160
, l% S3 s2 \, O' G8 ]$ L1 ]" m; I; h
   
" g, C) ~7 G; v7 g+ y* ?2 s    图4+ Y/ V3 U: d) n+ p' V: `8 W& v
    2.kernel 实验步骤
, h/ K( w0 l$ C* P! g+ J: R
- F3 {+ W* B7 d6 A8 J    
# r( @; J- c; t4 m, v# q# f    图5
3 ~! d7 V# U- [1 w! V    第五节 实验现象  `; l7 ?' p; d+ ]$ a
    以一根杜邦线为例,低电平触发中断
- ~4 X4 ?3 Z4 I) \# S6 P1 k, J( U% Q$ `4 m" E& S! i* ~
   
, y  e5 O* Z0 s! ^) E! V. q    图66 i5 c; h7 a# [- j5 G- R8 |+ f
    第六节 AD 按键
8 V# t- l: B* s( ]" K
. x8 R7 T! b, i. p( a' S; |    什么是 AD 按键:“AD 检测法实现简单实用的按键”,仅仅需要一个 AD 接口和若干的电阻,就可以实现 1  个,2 个,3 个        多个按键输入。原理就是按键按下的时候,IO 口将检测5 y7 U; L1 A0 N+ v& x
    到不同的电压值。6 W2 E9 v3 R) L4 ~' S4 o
    本节第一张图所示三个按键就组成了 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
/ a+ ~  D8 I9 s6 t( M    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 9 页。
2 S" k' k% A. C: q, Q! T8 l5 G8 s  A
' K  ^& d& w, W' h0 _$ q/ o      o% p' ^6 X& |% m
    图一 AD 按键原理图
  a; g7 m1 K- k# L1 ?    图7- S' M; S6 X0 R9 E6 E% \0 w* |
3 ^- B) T( |$ b2 ~
   
. x4 X3 R7 x& f. n7 v! w, N    图二 cpu 侧接线图
; p& T& m- j, I1 f. s7 v    图8& Y- F9 Y; h- [5 A( M/ L. \
# x5 f) d+ U% [; q( l
    第七节 PMIC_PWRON 休眠/唤醒屏幕
# ^' S4 D: W2 [! g/ T% s# Y% C# [4 J# u* ^- ]7 K
    本节主要是继续第一节课的原理图讲解一下屏幕的休眠/唤醒功能(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 X3 @5 [8 _% r+ \+ c% R& b    注意中断响应函数 keys_isr(int irq, void *dev_id),具体的屏幕休眠/唤醒由它来处理。
. y9 E+ e! x. N% v5 R3 a1 A: _
! o% }5 r2 J; M  |( f8 }. A, Y" n1 F  F. i7 W% i

3 n9 e- I' k5 m3 M
0 B6 t# A7 e( s3 o8 ?1 a1 S; ]6 B: N    文件下载请点击: 4、设备按键驱动实验.pdf (887.32 KB, 下载次数: 0)
0 G* q% R8 i# k0 I8 R. R2 T# d+ X: C# T
  S6 c' O, N2 L5 `: X* y: d
3 P9 g' Z& g( U, Z1 H
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-25 20:40 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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