有点小烦躁!!!
1、Linux 中断接口函数
①、request_irq
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。
返回值无。
然后贴一张国嵌制作的中断处理流程吧:
其中编写中断程序(在中断上下文中运行)必须注意一下几点:
①、不能向用户空间发送或者接收数据。
②、不能使用可能引起阻塞的函数。
③、不能引起可能引起调度的函数。
无论何时何地,只要创造就有收获,只有不息的奋进,才能证明生命的存在。