int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)
irqflags参数说明:
一、以下标志对应于linux/ioport.h中定义的IORESOURCE_IRQ_*来选择中断行行为。当在没有指定IRQF_TRIGGER的情况下请求中断时,设置应该假定为“已配置”,这可能是根据每个机器或固件初始化而设置的。
#define IRQF_TRIGGER_NONE 0x00000000
#define IRQF_TRIGGER_RISING 0x00000001上升沿触发中断
#define IRQF_TRIGGER_FALLING 0x00000002下降沿触发中断
#define IRQF_TRIGGER_HIGH 0x00000004高电平触发中断
#define IRQF_TRIGGER_LOW 0x00000008低电平触发中断
#define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
#define IRQF_TRIGGER_PROBE 0x00000010
二、以下标志只被内核作为irq处理程序的一部分使用。
- IRQF_SHARED -允许在多个设备之间共享irq
- IRQF_PROBE_SHARED -当调用者期望发生共享不匹配时设置
标记这个中断为定时器中断 - IRQF_PERCPU -中断是每个cpu
- IRQF_NOBALANCING -标志从irq平衡中排除这个中断
- IRQF_IRQPOLL——中断用于轮询(只有在共享中断中首先注册的中断出于性能考虑)
IRQF_ONESHOT -中断在hardirq处理结束后没有重新启用。
用于线程中断,需要保持irq行禁用,直到线程处理程序已经运行。 - IRQF_NO_SUSPEND -不要在挂起期间禁用IRQ。不能保证此中断将从挂起状态唤醒系统。
- IRQF_FORCE_RESUME - Force enable it on resume即使设置了IRQF_NO_SUSPEND
IRQF_NO_THREAD中断不能被线程化 - IRQF_EARLY_RESUME -在系统评分期间早期恢复IRQ,而不是在设备恢复时间。
- IRQF_COND_SUSPEND -如果IRQ与NO_SUSPEND用户共享,在挂起中断后执行这个中断处理程序。对于系统唤醒设备,用户需要在其中断处理程序中实现唤醒检测。