1、第 9章 中断与时钟机制中断和时钟机制是 Linux驱动重要的两项技术。使用这些技术,可以帮助驱动程序更高效的完成任务。在写设备驱动程序的过程中,为了使系统知道硬件在做什么,必须使用中断。如果没有中断,设备几乎什么都不能做。本章将详细讲解中断与时钟机制。9.1 中断简述本节对中断相关概念进行了简要的分析,并对中断进行了分类。根据不同的中断类型,写中断驱动程序的方法也不一样。下面将主要介绍中断的基本概念和常见分类。9.1.1 中断的概念 中断是计算机中的一个十分重要的概念。如果没有中断,那么设备和程序就无法高效利用计算机的 CPU资源。1什么是中断2中断在 Linux中的实现9.1.2 中断的宏
2、观分类在 Linux操作系统中,中断的分类是非常复杂的。根据不同的角度,可以将中断分为不同的类型。各种类型之间的关系并非相互独立,往往是相互交叉的。从宏观上可以分为两类,分别是硬中断和软中断。9.1.3 中断产生的位置分类 从中断产生的位置,可以将中断分为外部中断和内部中断。1外部中断外部中断一般是指由计算机外设发出的中断请求,键盘中断、打印机中断、定时器中断等。外部中断是可以通过编程方式给予屏蔽的。2内部中断内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。通常情况下,大多数内部中断都由 Linux内核进行了
3、处理,所以驱动程序员往往不需要关心这些问题。9.1.4 同步和异步中断从指令执行的角度,中断又可以分为同步中断和异步中断。1同步中断同步中断是指令执行的过程中由 CPU控制的, CPU在执行完一条指令后才发出中断。2异步中断异步中断是由硬件设备随机产生的,产生中断时并不考虑与处理器的时钟同步问题,及该类型的中断是可以随时产生的。9.1.5 中断小结以上三小节从不同的角度对 Linux中的中断进行了分类,但这不是严格的分类。例如,硬件中断可以是外部中断也可以是异步中断,同时软件中断可以是内部中断也可以是同步中断,如图所示。9.2 中断的实现过程中断的实现过程一个比较复杂的过程。其中涉及中断信号线、中断控制器等概念。首先介绍中断信号线的概念。9.2.1 中断信号线( IRQ)中断信号线是对中断输入线和中断输出线的统称。中断输入线是指接收中断信号的引脚。中断输出线是指发送中断信号的引脚。每一个能够产生中断的外设都有一条或者多条中断输出线( Interrput ReQquest,简称 IRQ)。其用来通知处理器产生中断。相应地,处理器也有一组中断输入线,用来接收连接到它上的外部设备发出的中断信号。9.2.2 中断控制器中断控制器位于 ARM处理器核心和中断源之间。外部中断源将中断发到中断控制器。中断控制器根据优先级进行判断,然后通过引脚将中断请求发送给 ARM处理器核心。