a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 53|回复: 0

[综合辅导] linux指导:Linux中的IO使用方法

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
驱动需要包含 #include & c! B3 @& T. ^; D
    0 s0 t2 C% Z) y' i; }
    判断一个IO是否合法:int gpio_is_valid(int number);. p, T. c2 m( Z4 b3 J
    ; \! Y$ N* D+ o, z6 E8 B5 ], n4 ^
    设置GPIO的方向,如果是输出同时设置电平:
+ v" t& \: N/ F' R. D* v   
# {% _' _2 h  s/ b: C8 M+ p0 C    /* set as input or output, returning 0 or negative errno */
- o) [+ T! P0 g5 a$ h& b    ; |9 g6 H0 U: D4 n9 s
    int gpio_direction_input(unsigned gpio);: U* Q$ f, |! g: c5 _
    + A+ N% C6 Q! v) c) W* ], h
    int gpio_direction_output(unsigned gpio, int value);
* ]7 @& @3 b) E' r* f8 R* R    1 M: r8 f( M' t$ l/ H1 m
    获取输入引脚的电平:4 c+ s2 f0 ^  I( V" v$ P5 p
      S$ U! ]: a) c8 d; z$ n; f; y
    /* GPIO INPUT: return zero or nonzero */
, N  Q4 s  P% K5 z( }    * ]: ^0 S( \  `0 d  g" U3 ^, H2 m; G
    int gpio_get_value(unsigned gpio);
+ q2 H3 @1 j! M; p$ o    4 k+ N- ]9 m/ U, @7 R9 o9 j4 W& |
    /* GPIO OUTPUT */( k6 O7 E* |/ I1 P% \5 ^
   
7 z) j3 X% H1 z; h/ H    void gpio_set_value(unsigned gpio, int value);; K0 u$ g) G. e) Y$ L) G# Z+ b
   
! Z5 \% l/ w8 M: @) ~    int gpio_cansleep(unsigned gpio);
7 {; J# u/ z; k1 {    : i7 z" H' m' y0 Z- E
    To access such GPIOs, a different set of accessors is defined:
8 h: e, n, z0 G% p. b    + S! T! u8 Y8 l7 H
    /* GPIO INPUT: return zero or nonzero, might sleep */# q1 b6 C" T+ V
   
' ^2 N# b; {5 U7 H2 e% d+ t    int gpio_get_value_cansleep(unsigned gpio);/ G) _! o1 o  r! G8 P
   
- R% ]: x9 s- h- b    /* GPIO OUTPUT, might sleep */* z* _8 l0 }7 x
    9 L7 `, A: [( B( S' f5 J6 G% P
    void gpio_set_value_cansleep(unsigned gpio, int value);获取一个GPIO并声明标签:8 b) V2 c  Y) a- [2 ]+ @) }
   
6 j4 N& P2 _6 t" k% t% a% _    /* request GPIO, returning 0 or negative errno." M2 L% L6 v. e7 F# O+ Q! f
    8 e4 z) V7 P0 G2 J3 t% d- `, o
    * non-null labels may be useful for diagnostics.
" M7 D7 z& z* I9 D9 p    0 I; R6 [) P' |
    */
. K2 N' a  q) h$ A3 t! K    / e9 a3 C% K  M$ Z2 I
    int gpio_request(unsigned gpio, const char *label);
+ @4 B* L- Z, H0 t+ t: q# q( }   
  Q  i! [7 ]. d0 ]    /* release previously-claimed GPIO */
$ j6 E) y) z# u& c/ c6 q    ! ^! c- j7 A9 W4 p' h2 ]3 a7 j( Y
    void gpio_free(unsigned gpio);
8 w/ S! S' {$ ]8 U  H   
$ h; n* ?) l5 c( K) S( S8 C    将GPIO映射为IRQ中断:$ I( |+ o2 B* G- f; e2 a7 ?
   
# j  @' S: Q* r7 @6 L) L    /* map GPIO numbers to IRQ numbers */1 b% ]9 h! \, v2 a) l7 O" g
   
1 v6 o  n9 J7 r' `4 A% \. t, H    int gpio_to_irq(unsigned gpio);1 s% L4 D4 z  I, I% v+ [
    1 @  g2 ~1 c& m% W
    /* map IRQ numbers to GPIO numbers (avoid using this) */
$ f1 C$ b5 B9 y4 `    " I( s4 P- j# y
    int irq_to_gpio(unsigned irq);
0 T6 U. j9 L+ I: O1 n/ G$ f   
* Y& h/ e' t  A) o# J5 s    设置GPIO IRQ中断类型:
1 F& j( I6 [* C: \, ]' Z. H   
4 }) `' W) U/ E+ A    if (!sw->both_edges) {$ x6 X) P! k/ T$ f% S
   
! c! f, C; T3 x& O! h    if (gpio_get_value(sw->gpio))3 `# i: o! c; n1 d
   
9 `6 P0 s1 `5 A/ q7 a( z1 l    set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_FALLING);
7 g, X2 K  u- J   
+ x! o0 N9 E  a) ?" B& G6 v; L    else- S4 D; `" D2 A; n% Q- w
    3 L/ H2 @% i4 ?5 W$ @; e9 b6 Y
    set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING);9 }# `6 N- A& U1 k& p; w
   
1 T* Z* l. L' z    }: R5 ~1 K: |, W# F+ E" K# }( O- b  D
    6 N1 g3 V  j' ~  i! f
    在驱动中使用延时函数mdelay,需要包含文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 04:00 , Processed in 0.272411 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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