Request_irq()调用的界说:
int request_irq(unsigned int irq,
void (*handler)(int irq, void *dev_id, struct pt_regs *regs),
unsigned long irqflags,
const char * devname,
void *dev_id);
irq是要请求的硬件中止号。详细应是何值参见博文http://blog.csdn.net/songqqnew/article/details/6791602。
handler是向体系注册的中止处理函数,是一个回调函数,中止产生时,体系调用这个函数,dev_id参数将被传递给它。便是中止服务子程序,用staticirqreturn_tadc_interrupt(intirq,void*dev_id);界说或声明。
Irqflags是中止处理的一些特点。若设置了IRQF_DISABLED (老版别中的SA_INTERRUPT,本版zhon现已不支持了),则表明中止处理程序是快速处理程序,快速处理程序被调用时屏蔽一切中止,慢速处理程序不屏蔽;若设置了IRQF_SHARED (老版别中的SA_SHIRQ),则表明多个设备同享中止,若设置了IRQF_SAMPLE_RANDOM(老版别中的 SA_SAMPLE_RANDOM),表明对体系熵有贡献,对体系获取随机数有优点。(这几个flag是能够经过或的方法一起运用的)
devname设置中止称号,在cat /proc/interrupts中能够看到此称号。为注册的驱动程序的设备名。
dev_id在中止同享时会用到。一般设置为这个设备的device结构自身或许NULL。中止处理程序能够用dev_id找到相应的操控这个中止的设备,或许用irq2dev_map找到中止对应的设备。
free_irq()调用的界说如下:
Void free_irq(unsigned int irq,
void *dev_id);
irq是由函数request_irq()请求的硬件中止号。详见博文:http://blog.csdn.net/songqqnew/article/details/6791602。
dev_id与前面的相同。