11.5 中断编程 前面所讲述的驱动程序中都没有涉及中断处理,而实际上,有很多 Linux的驱动 都是通过中断的方式来进行内核和硬件的交互。中断机制提供了硬件和软件之间异步 传递信息的方式。硬件设备在发生某个事件时通过中断通知软件进行处理。中断实现 了硬件设备按需获得处理器关注的机制,与查询方式相比可以大大节省 CPU 资源的 开销。 在此将介绍在驱动程序中用于申请中断的 request_irq()调用,和用于释放中断的 free_irq()调用。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, oid *dev_id); 其中 irq是要申请的硬件中断号。在 Intel平台,范围是 0~15。 参数 handler 为将要向系统注册的中断处理函数。这是一个回调函数,中断发生 时,系统调用这个函数,传入的参数包括硬件中断号、设备 id以及寄存器值。设备 id 就是在调用 request_irq()时传递给系统的参数 dev_id。 参数 irqflags是中断处理的一些属性,其中比较重要的有 SA_INTERRUPT。这个 参数用于标明中断处理程序是快速处理程序(设置 SA_INTERRUPT)还是慢速处理 程序(不设置 SA_INTERRUPT)。快速处理程序被调用时屏蔽所有中断。慢速处理程 序只屏蔽正在处理的中断。还有一个 SA_SHIRQ属性,设置了以后运行多个设备共享 中断,在中断处理程序中根据 dev_id区分不同设备产生的中断。 参数 devname为设备名,会在/dev/interrupts中显示。 参数 dev_id 在中断共享时会用到。一般设置为这个设备的 device 结构本身或者 NULL。中断处理程序可以用 dev_id 找到相应的控制这个中断的设备,或者用 irq2dev_map()找到中断对应的设备。 释放中断的 free_irq()函数调用的格式如下所示。该函数的参数与 request_irq()相 同。
2023-09-19 23:04:18 10.86MB 嵌入式 Linux
1
cmake-3.16.0-Linux-x86_64.tar.gz; cmake-3.16.0-Linux-x86_64.tar.gz;
2023-09-18 19:32:24 37.53MB cmake-3.16.0-Lin
1
vsmh最新版 vs全图 可t人 全图 改名
2023-09-10 20:34:21 2.3MB vsmh最新版 vs3.16最新全图 vs全图
1
Microsoft BarCode Control 16.0 - 微软条形码二维码控件 提取Office2016的文件,不支持XP系统 该控件支持Office2003/2010/2016等版本 二维码是“QR Code”样式属性
2023-09-09 23:11:10 506KB microsoft
1
铁道部常用的信息编码译码方式 BCH(26,16) RDS常用的信息编码译码方式 缩短循环码
2023-09-05 11:29:08 10KB BCH RDS 编码 译码
1
GIS国赛16年第五届大赛.zip
2023-08-08 10:52:29 210.61MB gis国赛
1
DSP课程系列,该系列详细的讲解了DSP各个模块的工作原理,每个章节都配备代码实例,是个很好的学习资料,大家可以下载看看
2023-08-03 14:14:42 817KB DSP 课程
1
Tesseract4.1的cppan.yml,已对应VS2019 版本16修改,若使用其它IDE,需编辑修改。
2023-07-23 13:46:43 8KB Tesseract4.1 cppan.yml VS2019 版本16
1
该工具专用于英特尔13代处理器,BIOS读取,刷新等。
2023-07-19 13:18:46 2.37MB 软件/插件 BIOS 英特尔
1
NULL 博文链接:https://decao.iteye.com/blog/2405182
2023-07-12 09:44:43 91KB 源码 工具
1