Linux内核中断:request_irq,free_irq



Linux内核中断

 

步骤一:打开内核源代码,在里面搜索interrupt.h文件

        

     打开文件后我们可以在里面看到这样的函数

typedef irqreturn_t (*irq_handler_t)(int,void *);

申请中断号

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

           const char *name, void *dev);

irq:中断号,是request_irq函数传递给handler中断函数的int参数。

handler:中断处理函数

flags:如果是外部中断,可以设置为上下降沿触发或电平触发

name:随便取的名字

dev:是request_irq函数传递给handler中断函数的void *参数。

注销中断号

extern void free_irq(unsigned int, void *);

void *:是注册中断request_irq函数传递给handler中断函数的void *参数的

那么中断号在哪里定义了?

搜索irqs.h文件

首先我们看到手册里中断号,外部中断4-7,8-23都是共用一个中断

但是在irqs.h里我们看到,内核重新定义了中断号,把中断号4-7,8-23分开来了,这样不用我们再编写驱动的时候去特别处理判断中断源

#define IRQ_EINT4     S3C2410_IRQ(32)  /* 48 */

#define IRQ_EINT5     S3C2410_IRQ(33)

#define IRQ_EINT6     S3C2410_IRQ(34)

#define IRQ_EINT7     S3C2410_IRQ(35)

#define IRQ_EINT8     S3C2410_IRQ(36)

#define IRQ_EINT9     S3C2410_IRQ(37)

#define IRQ_EINT10    S3C2410_IRQ(38)

#define IRQ_EINT11    S3C2410_IRQ(39)

#define IRQ_EINT12    S3C2410_IRQ(40)

#define IRQ_EINT13    S3C2410_IRQ(41)

#define IRQ_EINT14    S3C2410_IRQ(42)

#define IRQ_EINT15    S3C2410_IRQ(43)

#define IRQ_EINT16    S3C2410_IRQ(44)

#define IRQ_EINT17    S3C2410_IRQ(45)

#define IRQ_EINT18    S3C2410_IRQ(46)

#define IRQ_EINT19    S3C2410_IRQ(47)

#define IRQ_EINT20    S3C2410_IRQ(48)  /* 64 */

#define IRQ_EINT21    S3C2410_IRQ(49)

#define IRQ_EINT22    S3C2410_IRQ(50)

#define IRQ_EINT23    S3C2410_IRQ(51)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值