2.2.5 中断控制器
先不说中断的概念,现在只要知道中断是各种设备通知CPU的一种方式。由于计算平台上不止一个设备,所以需要一个专门的功能单元来管理这些通知信号(即中断)。让它来决定各设备中断信号的先后次序,以及是否允许各设备的中断信号到达CPU,还有识别是哪个设备的中断信号。这个功能单元就是中断控制器,如图2-6所示。
图2-6 设备与中控制器、CPU的连接逻辑视图
mini2440开发板上没有这个功能单元,它存在于S3C2440A这个芯片内部。
S3C2440A中的中断控制器接收来自60个中断源的请求。提供这些中断源的是内部外设或者外部设备,如DMA控制器、串口、IIC、GPIO等。外部设备就是通过GPIO与S3C2440A内部连接起来的。GPIO是什么,怎么连接,我们不在此处介绍,那也不是必须要关心的。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁先后次序后才发送请求到ARM920T内核的FIQ或IRQ引脚,ARM920T内核就是图2-6中的CPU。这个后面会介绍。仲裁步骤由硬件优先级逻辑决定,并且将结果写入中断挂起寄存器中,从而通告用户是中断源中的哪一个发生了中断。
中断优先级仲裁,就是当两个不同的设备同时产生中断时,而CPU一次只能响应一个中断请求,中断控制器要在两个或者多个中断信号中选择一个,然后把那个中断请求发送给CPU。和自然世界中一样,事情有轻重缓急,当然中断控制器最好选择一个要求CPU尽可能快地处理其中断请求的设备。
S3C2440A中的中断控制器只能连接32根中断信号线,那么它是怎么支持60个中断源的呢?它采用了二级中断源,就是在一级中断的几根中断信号线上连接几个设备的中断信号线。所以当中断发生时,我们就不能单纯地认为是一个设备发生了中断,而是要进一步根据次级中断的相关信息确定是哪个设备发生了中断,如图2-7所示。
图2-7 S3C2440A的中断控制器与设备的连接
操作系统内核的重要功能就是要代替应用软件操控设备,然而设备与CPU的通信大多数是由中断信号来驱动的。中断控制器就是它们之间的必经之路。所以操作系统内核必须要了解并控制中断控制器。在此有个初步印象即可,后面介绍操作系统内核的中断管理时,会详细介绍。