加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux  中断函数返回值的分析

(2016-09-06 15:55:31)
分类: LINUX

from:http://blog.chinaunix.net/uid-25014876-id-90740.html

from:http://blog.sina.com.cn/s/blog_a6559d9201015vx9.html

  static inline int gpio_to_irq(unsigned gpio)

    8gpioToIrq = gpio_to_irq (RK29_PIN0_PA0);// GPIO0_A0PIN值转换为相应的IRQ值,并赋值给变量gpioToIrq

   gpio_to_irq()返回的中断编号可以传给request_irq()和free_irq()。

   irq_to_gpio()返回的gpio编号通常用来调用gpio_get_value(),比如在沿触发的中断中获取引脚的状态。有些平台不支持这种映射,应该避免调用映射函数

 

注册中断处理函数:

 

int request_irq(unsigned int irq, irq_handler_t handler,

unsigned long irqflags, const char *devname, void *dev_id)

使用:

将中断号irq与中断处理函数handler对应

参数:

irq:指定要分配的中断号,中断号的定义在“include/mach/irqs.h”中。注意,不管是单独占有中断请求线的中断,还是共享中断请求线的每个中断,都有一个对应的中断号。,所以,调用该函数不需要考虑是哪种中断(是否共享寄存器),你想哪种中断响应,你就填对应的中断号。

handler:中断处理函数指针。

irqflags:中断处理标记,待会介绍:

devname:该字符串将显示在/proc/irq/pro/interrupt中。

dev_idID 号,待会会介绍。

返回值:成功返回0,失败返回非0

注册函数需要注意两件事:

1)该函数会睡眠。

2)必须判断返回值。


中断处理标志irqflags,这里先介绍几个待会要用的:

 

29 #define IRQF_TRIGGER_NONE 0x00000000

30 #define IRQF_TRIGGER_RISING 0x00000001 //上升沿触发中断

31 #define IRQF_TRIGGER_FALLING 0x00000002 //下降沿触发中断

32 #define IRQF_TRIGGER_HIGH 0x00000004 //高电平触发中断

33 #define IRQF_TRIGGER_LOW 0x00000008 //低电平触发中断

34 #define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \

35 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)

36 #define IRQF_TRIGGER_PROBE 0x00000010


释放中断处理函数:

void free_irq(unsigned int irq, void *dev_id)


编写中断处理函数:

中断处理函数声明如下:

static irqreturn_t intr_handler(int irq, void *dev_id)

先看第一个参数irq,这是调用中断处理函数时传给它的中断号,对于新版本的内核,这个参数已经用处不大,一般只用于打印。

第二个参数dev_id,这个参数与request_irq()的参数dev_id一致,由于待会的程序我并不需要用这个参数,所以先不介绍。

再看返回值,中断处理函数的返回值有三个:

 

21 #define IRQ_NONE (0) //如果产生的中断并不会执行该中断处理函数时返回该值

22 #define IRQ_HANDLED (1) //中断处理函数正确调用会返回

23 #define IRQ_RETVAL(x) ((x) != 0) //指定返回的数值,如果非0,返回IRQ_HADLER,否则

26 #ifndef IRQ_NONE //返回IRQ_NONE


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有