|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ X! h! m2 s) l
一 概述# u* t5 X& T* y8 y
5 j% j1 U: g9 v8 f5 ilinux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的7 r4 Q P0 V% D5 k
9 M8 {+ `. ]6 D* F6 f2 P二 内核中gpio的使用7 N! d# ^2 s1 N% M
7 ?* `& s/ J; V& C# H2 J6 O1 测试gpio端口是否合法& {) |+ m) [. D% `5 W
1 ?# ?4 m/ b" D# g
int gpio_is_valid(int number);
" Q- g% J. l3 U( m5 Z4 _, K* g+ U2 t3 S, d; o, V- d. p$ x
2 申请某个gpio端口当然在申请之前必须配置该gpio端口的pinmux,否则会导致后面的操作失败或者无效
* C4 p6 [8 ` b4 E% v8 p6 M3 Y, P
0 d- f) {& |$ P& z2 ]int gpio_request(unsigned gpio, const char *label)
! C3 h& q# |5 J3 T) p) m4 a7 j
6 F& ~0 b* r) M0 x) \8 _8 n3 标记gpio的使用方向包括输入还是输出
. r8 a5 o4 J% Q+ H- W2 F( X; Z$ C( V
& ~3 B- r- ]; z( D3 H# E" R/*成功返回零失败返回负的错误值*/
$ _( F3 d- Y" R* j
) D. F6 f8 R( nint gpio_direction_input(unsigned gpio);1 Z; h/ A3 j& i' q' [8 N, {
& F3 S( |* y+ D1 h5 S% x. V: Gint gpio_direction_output(unsigned gpio, int value);3 Z5 h3 j5 C; Y/ ]
7 Z2 f3 F3 X! t7 n. J8 D4 ~4 获得gpio引脚的值和设置gpio引脚的值(对于输出)
3 {! q* p& i0 A3 g" f0 x; | g' F% x- }, u C
int gpio_get_value(unsigned gpio);* e) L0 f7 c9 x' U; N
1 V( P$ j. v% j! O4 _+ }# Y
void gpio_set_value(unsigned gpio, int value);
; b) x: M+ x* P8 X3 [% n- K' ]! |, z1 r; H7 f) ~9 t
5 gpio当作中断口使用
1 y0 Y1 I! o& s8 h( @3 K& b
8 u' j3 F) m( S% g' ~' Q/ r' g
/ O4 z3 ?4 G1 z& r5 |' M/ o
3 Y1 ]9 ?3 m1 m5 N% f2 n$ Z3 T, G4 K7 k5 q
|
|