有点小烦躁!!!
1、Linux 中断接口函数
①、request_irq
头文件 | #include <linux/interrupt.h> |
函数原型 | int request_irq(unsigned int irq,irq_handler_t handler,unsigned long flags, const char *name,void *dev); |
功能描述 | 申请中断 |
函数参数 | ▲:irq:中断号,某些平台上中断号到硬件中断号的映射并不是一一对应的。 ▲:handler:指向要安装的中断处理函数的指针。 ▲:flags:与中断管理有关的各种选项的字节掩码。 例如: IRQF_DISABLED(SA_INTERRUPT):如果设置该位,表示是一个快速中断处理程序,否则为慢速的! IRQF_SHARED(SA_SHIRQ):该位表明终端可以在设备间共享(就是将不同的设备挂到同一个中断信号线上)。 ▲:name:传递给 requeset_irq 的字符串,在 /proc/interrupts 中用于显示中断的拥有者。 ▲:dev:共享中断信号时用于区别的标识符。多个中断使用同一个中断处理函数也可以通过该参数区分。不使用置 NULL |
返回值 | 返回值为 0 时表示成功,或者返回一个负的错误符,函数返回 -EBUSY 通知另一个设备驱动程序已经使用了要申请的中断信号线。 |
②、free_irq
头文件 | #include <linux/interrupt.h> |
函数原型 | void free_irq(unsigned int irq,void *dev_id); |
功能描述 | 释放中断 |
函数参数 | ▲:irq:中断号 ▲:dev_id:通 request_irq 的参数 dev。 |
返回值 | 无。 |
然后贴一张国嵌制作的中断处理流程吧:
其中编写中断程序(在中断上下文中运行)必须注意一下几点:
①、不能向用户空间发送或者接收数据。
②、不能使用可能引起阻塞的函数。
③、不能引起可能引起调度的函数。