linux中断处理

来源:互联网 发布:淘宝买论文发表 编辑:程序博客网 时间:2024/04/29 14:36

int request_irq(unsigned int irq, irq_handler_t handler,
                         unsigned long irqflags, const char *devname, void *dev_id)

irq是要申请的硬件中断号,中断号有其原理图决定;

handler是向系统注册的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,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在中断共享时会用到,一般设置为这个设备的设备结构体或者NULL。


request_irq()返回0表示成功,返回-INVAL表示中断号无效或处理函数指针为NULL,返回-EBUSY表示中断已经被占用且不能共享。

错误时返回-EINVAL(22),表示参数无效

           或者-ENOMEM(12)表示内存不足


中断信号线(IRQ):是对中断输入线和中断输出线的统称,中断输入线是指接收中断信号的引脚;中断输出线是指发送中断信号的引脚;

中断控制器: 位于ARM处理器核心和中断源之间,外部中断源将中断发送到中断控制器,中断控制器根据优先级进行判断,


中断的安装与释放:

安装:int request_irq(unsigned int irq, irq_handler_t handler,
                         unsigned long irqflags, const char *devname, void *dev_id)


当模块不再使用时,需要释放中断线

释放中断:free_irq();


0 0
原创粉丝点击