引入中断的意义
Linux驱动编程相对于应用程序编写多了中断处理。因为驱动是管理硬件的,而为了提高硬件的访问效率,通常不是由CPU来轮询硬件的状态,而是在硬件准备好后主动通知CPU,这种硬件上的异步通知就是中断。
软件生成的中断通过写一个专用寄存器生成,通常被用于内部处理器之间的通信。由于Exynos4412包含4个核,那些由某一处理器私有外设生成的中断被称为私有外设中断。而那些由多个处理器的外设生成并可以被这多个处理器响应的中断称为共享外设中断。
可能存在GIC通知一个处理器,这个中断不再需要的情况。在这种情况下,处理器应答该中断时,GIC返回一个特殊的中断号,我们称之为伪中断。可能发生这种情况的原因:在处理器应答该中断以前,软件改变了改中断的优先级、软件禁用该中断或者改变了目标处理器。
中断状态
每个中断可以被认为处于以下4个状态之一:
(1)未激活,中断处于尚未激活或未挂起;
(2)挂起,中断已经由硬件或者软件产生,正等待目标CPU响应;
(3)激活,CPU已经应答来自GIC的中断,该中断正在被CPU处理单尚未完成;
(4)激活并挂起,CPU正在处理该中断,此时GIC又收到来自该中断源的更高优先级的中断。
中断优先级
- 抢占
在一个激活中断被处理完之前,CPU接口支持更高优先级的中断送达并占用目标处理器,但需要满足:
a)该中断的优先级高于当前CPU接口被屏蔽中断的优先级;
b)该中断的组优先级高于正在当前CPU接口处理的中断优先级。