中断处理程序可能返回两个特殊的值:IRQ_NONE和IRQ_HANDLED 当中断处理程序检测到一个中断,但该中断对应的设备并不是在注册处理函数期间指定的产生源时,返回IRQ_NONE 当中断处理程序被正确调用, 且确实是它所对应的设备产生了中断时,返回IRQ_HANDLED 另外,也可以使用宏IRQ_ RETVAL(val): 如果val为非0值,那么该宏...
可能返回2个特殊值:IRQ_NONE和IRQ_HANDLED。当中断处理程序检测到一个中断,但该中断并非注册处理函数时指定的产生源时,返回IRQ_NONE;当中断处理程序被正确调用,而且确实是它所对应的设备产生的中断时,返回IRQ_HANDLED。 返回值也可以用宏IRQ_RETVAL(x):x为非0,宏返回IRQ_HANDLED;x为0,返回IRQ_NONE。 定义说明:...
irqreturn_t (*irq_handler_t) (int, void *) 第一个参数是要中断处理函数要相应的中断号。第二个参数是一个指向 void 的指针 返回值为 irqreturn_t 类型: enum irqreturn { IRQ_NONE = (0 << 0), IRQ_HANDLED = (1 << 0), IRQ_WAKE_THREAD = (1 << 1), }; 中断使能与静止 void enable_...
intirq_a28=0; //中断处理函数(中断顶半部,不能被中断打断,也不参与进程调度) irqreturn_tkey_irq_handler(intirqno,void*args) { printk(KERN_ERR"[%s-%s-%d]:Interrupted...\n",\ __FILE__,__func__,__LINE__); /*添加按键处理语句*/ ... returnIRQ_HANDLED; } //加载函数 staticint__ini...
第二参数:指向void的指针,也就是一个通用指针,需要与request_irq函数的dev参数保持一致,用于区分共享中断的不同设备 返回值: enumirqreturn{IRQ_NONE = (0<<0), IRQ_HANDLED = (1<<0), IRQ_WAKE_THREAD = (1<<1), }; 中断使能与禁止函数
最后返回IRQ_HANDLED,表明已经正确完成对此设备的操作。 六、中断上下文 当执行一个中断处理程序时,内核处于中断上下文中。 中断上下问和进程没有什么瓜葛。 中断上下文具有较为严格的时间限制,因为它打断了其他代码。 中断处理程序栈的设置是要给配置选项,32位8KB,64位16KB 。
#defineIRQ_HANDLED (1) #defineIRQ_RETVAL(x) ((x) != 0) 中断上下文 中断上下文注意事项: 1)中断上下文代码绝不可以停止运行。不能做任何可能发生休眠的操作,在从中断处理函数中调用一个内核API之前,应该仔细分手它,以确保其内部不会触发阻塞等待!
irq:可断号 handler:中断处理程序 irqflags:中断处理标志.SA_SHIRQ:共享中断线 SA_INTERRUPT:快速处理中断 必须在关中断的情况下运行.SA_SAMPLE_RANDOM:该中断可能用于产生一个随机数 devname dev_id:设备名称与ID */ int request_irq(unsigned int irq, ...
staticirqreturn_tirq_handle(intirq,void*dev__id); 1. 参数:irq:表示中断号,这个参数还保留由于历史遗留问题,往后可能越来越没用了。由于第二个参数信息更强大 dev__id:就是request_irq()中void *dev_id参数。 二、中断申请函数参数 intrequest_irq(unsignedintirq,irq_handler_t handler,unsignedlongirqflag...
IRQ_HANDLED = (1<<0), IRQ_WAKE_THREAD = (1<<1), };typedefenumirqreturnirqreturn_t;//一般中断服务函数返回值使用形式为:returnIRQ_RETVAL(IRQ_HANDLED) 中断使能与禁止函数 登录后复制voidenable_irq(unsignedintirq);//使能指定的中断voiddisable_irq(unsignedintirq);//禁止中断,会等当前处理函数执行完...