|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
[1 j# A p6 z一 概述/ B) `2 ~3 X; ]9 Z! I9 R' J
1 E3 `: \: `' n8 `+ t3 f* ^linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的
; S& R7 [$ a: p3 j; W5 g4 {& U0 J; |' z( t
二 内核中gpio的使用
8 t% P- y) D8 c6 s, `! E3 f! M$ [7 q; D, g( E
1 测试gpio端口是否合法
( E6 P+ ~5 y' y0 S) s8 A7 Y, _/ F: m% O( G3 x! m
int gpio_is_valid(int number);! o; Z+ T% \& D' |" g2 J( v4 }
( M9 M9 v, r& ]/ x4 n! T; Y2 申请某个gpio端口当然在申请之前必须配置该gpio端口的pinmux,否则会导致后面的操作失败或者无效6 @$ S) W* @3 s1 s+ l' `
& F7 Z% M+ v0 Y! J8 \, _int gpio_request(unsigned gpio, const char *label)
k% |: c; S0 `6 G0 l
( Q' t- V4 f/ ~5 m. Z/ x1 l3 标记gpio的使用方向包括输入还是输出" F3 G+ v. k2 p' a+ H% b
9 I2 K2 N# a# P9 d1 ~0 ]: E/*成功返回零失败返回负的错误值*/
& G. `) W' }1 ?) f, R
9 {" _) h+ A/ [! \2 H6 G: W4 Iint gpio_direction_input(unsigned gpio);6 u( G; \0 m% Q' |, L8 S8 u
" X, J) v! o1 f0 l: G7 d3 o& s6 }int gpio_direction_output(unsigned gpio, int value); j' v2 v9 Q5 J5 z; ^% J' J0 X' F0 l
$ K D/ L7 {$ ]) D
4 获得gpio引脚的值和设置gpio引脚的值(对于输出)
* b8 a& ?, M( ~7 u( N2 @
# c9 B% R7 M1 L' J. r. Sint gpio_get_value(unsigned gpio);
! Q5 [! e( g' Y& U/ a( T* ^8 _
# Y- Z7 U$ r) {: yvoid gpio_set_value(unsigned gpio, int value);
; F2 U6 f1 O, N0 ]( U7 D2 w3 T" @) G. M1 @$ R$ O/ A
5 gpio当作中断口使用
; F f/ z i) k+ q2 t9 K/ l8 j- D7 {9 B, N7 y b$ z! w& i
' x j$ c6 W$ T( R( Q
; d& \) V5 q' w; B" n X. [* @
6 V! w2 ]" X0 j' v5 D0 V
4 o" x: p3 Q& \. M& Q2 v |
|