009_Linux驱动之_request_irq()函数
1. request_irq()函数原型
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
2.
功能:注册中断服务函数
* @irq:要申请的硬件中断号
* @handler: IRQ发生时要调用的函数
* @irqflags:中断类型标志
* @devname:声明设备的ascii名称
* @dev_id:传递回处理器函数的cookie。中断和卸载的时候用到
3. 使用示例:
![](https://img2018.cnblogs.com/blog/1496483/201906/1496483-20190613083721698-2010992662.png)
4. 解析上面程序
1. 上面程序是按键中断程序,中断号对应引脚上面的中断号,具体可以查芯片手册上面有
2. 中断函数是buttons_irq(),当出现按键按下或者松开时候调用buttons_irq()函数,并传
入参数irq和dev_id
3. IRQT_BOTHEDGE是双边沿触发方式,当有按键按下或者松开时候就触发中断
4. 名字是S2-S4,需要时ascii名称
5. 当中断发生或者卸载时候,需要用到dev_id的地址
5. 使用free_irq()函数来释放已经注册的中断
函数原型:void free_irq(unsigned int irq, void *dev_id)
解析:需要用到中断号irq和dev_id
使用示例:释放上面注册了的中断
![](https://img2018.cnblogs.com/blog/1496483/201906/1496483-20190613083727767-1800028835.png)
6. 触发方式
1. IRQT_NOEDGE
2. IRQT_RISING//上升沿触发
3. IRQT_FALLING //下降沿触发
4. IRQT_BOTHEDGE//双边沿触发
5. IRQT_LOW//低电平触发
6. IRQT_HIGH//高电平触发
7. IRQT_PROBE
![](https://img2018.cnblogs.com/common/1496483/201912/1496483-20191226082914967-1982997931.png)