中断概述
我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求。拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断,我们的处理方式显然不同,为此就需要在Soc中集成中断控制器(Generic Interupt Controller),它的核心功能就是进行中断的调度和管理。
SGI VS PPI VS SPI
exynos4412中每种中断都有自己的ID用以标识,exynos4412支持三类中断:Software Generated Interrupt (SGI),Private Peripheral Interrupt (PPI)和Shared Peripheral Interrupt (SPI)。所有的中断可以按照优先级可以划分为0~255级,和大多数芯片一样,数字越小,中断的优先级越高,同时发生的时候优先级更高的中断会被优先处理,当然,Soc对每个中断都有一个默认的优先级。
SGI表示软件生成中断,即上图中CPU和GIC通过一个寄存器进行交互,让GIC给CPU(们)发送一个中断(和ARM汇编中的swi不是一回事!)这个过程并没有真正的外设来触发中断。SGI中断具有边沿触发的属性,在多核Soc中,一个CPU可以通过触发SGI的方式和其他CPU交互。交互的形式有两种:1-N,N-N。前者表示只有一个CPU响应这个SGI,此时需要提供机制来确定到底的哪个CPU接收并响应这个SGI。后者表示所有的CPU都将接收到SGI,当一个CPU收到这个SGI之后,这个