Linux 中断函数编写详解 Linux 中断函数编写详解是 Linux 操作系统中非常重要的一部分,中断函数是指 CPU 正常运行期间,由于内、外部事件引起的 CPU 暂时停止正在运行的程序,去执行该内部事件或外部事件的服务中去,服务执行完毕后再返回断点处继续执行的情形。中断的意义是极大提高 CPU 运行效率。 1. 中断基础介绍 中断就是 CPU 正常运行期间,由于内、外部事件引起的 CPU 暂时停止正在运行的程序,去执行该内部事件或外部事件的服务中去,服务执行完毕后再返回断点处继续执行的情形。中断的意义:极大提高 CPU 运行效率。 中断处理程序:在中断发生时被调用的函数称为中断服务函数。中断服务函数的原则:linux 是多进程操作系统。中断不属于任何一个进程,因此不能在中断程序中休眠和调用 schedule 函数放弃 CPU,实现终端处理函数有一个原则,就是尽可能的处理并返回。 1.2 Linux 中断顶部、底半部 中断服务程序必须足够简短,但实际应用中某些时候发生中断时必须处理大量的事物,这时候如果都在中断服务程序中完成,则会严重降低中断的实时性,基于这个原因,linux 系统提出了一个概念:把中断服务程序分为两部分-顶半部-底半部。顶半部完成尽可能少的比较急的功能,它往往只是简单的读取寄存器的中断状态,并清除中断标志后就进行“中断标记”(也就是把底半部处理程序挂到设备的底半部执行队列中)的工作。特点:响应速度快。底半部:中断处理的大部分工作都在底半部,它几乎做了中断处理程序的所有事情。特点:处理相对来说不是非常紧急的事件。底半部机制主要有:tasklet、工作队列和软中断 1.3 总结 不管是裸机实验还是 Linux 下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断我们需要做一大堆的工作,比如配置寄存器,使能 IRQ 等等。 Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。 二、中断子系统相关 API 函数 Linux 中断有专门的中断子系统,其实现原理很复杂,但是驱动开发者不需要知道其实现的具体细节,只需要知道如何应用该子系统提供的 API 函数来编写中断相关驱动代码即可。 1 获取中断号相关函数 编写驱动的时候需要用到中断号,每一个中断都有中断号,我们用到中断号,中断信息已经写到了设备树里面,因此可以通过 irq_of_parse_and_map 函数从 interupts 属性中提取到对应的设备号,函数原型如下表所示: 如果使用 GPIO 的话,可以使用 gpio_to_irq 函数来获取 gpio 对应的中断号,函数原型如下表所示: 2 申请中断 在 Linux 内核里面,如果我们要使用某个中断也是需要申请的,申请中断我们使用的函数是 request_irq。函数原型如下表所示: 函数 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) rq 要申请中断的中断号 handler 中断处理函数,当中断发生以后就会执行此中断处理函数。 flags 中断标志 name 中断名字,设置以后可以在开发板/proc/interrupts 文件中看到对应的中断名字 ev 如 果 将 flags 设置为 IRQF_SHARED 的话,dev 用来区分不同的中断,一般情况下将 dev 设置为设备结构体,dev 会传递给中断处理函数 irq_handler_t 的第二个参数。 返回值中断申请成功返回 0,其他负值则中断申请失败,如果返回-EBUSY 的话表示中断已经被申请了。 中断标识可以在文件 include/linux/interrupt.h 里面查看所有的中断标志,这里我们介绍几个常用的中断标志,如下图所示: 标志 功能 IRQF_SHARED 多个设备共享一个中断线,共享的所有中断都必须指定此标志。 IRQF_ONESHOT 单次中断,中断执行一次就结束。 IRQF_TRIGGER_NONE 无触发。 IRQF_TRIGGER_RISING 上升沿触发。 在编写中断相关驱动代码时,需要了解这些中断标志的作用和使用方法,以便编写高效的中断处理函数。

























剩余7页未读,继续阅读


- 粉丝: 130
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据优势下的高中英语教学策略.docx
- 云计算环境下的网络安全估计模型态势仿真.doc
- ATS单片机的智能电热水器的设计方案.doc
- SQL数据库课程研究设计模板.doc
- 51单片机的智能频率计课程方案设计书.doc
- 企业信息化管理建议.docx
- 网站的规划与建设.ppt
- 计算机信息系统保密技术及安全管理.doc
- Excel表格模板:上半年销售业绩分析报告.xlsx
- DSP嵌入式图像处理方案设计书.doc
- 项目管理系统化建设内容及验收标准.doc
- 信息管理与计算机应用技术的融合研究.docx
- 微课在高职《计算机应用基础》课程单元教学中的设计与应用思考.docx
- 图书信息管理系统-c语言.doc
- 以单片机ATS为控制核交通灯设计.doc
- NAND-Flash的驱动程序设计措施.doc


