S3C2440有60个中断源:1个看门狗定时器,5个定时器,9个UART,24个外部中断EINT,4个DMA,2个RTC,2个ADC,1个IIC,2个SPI,1个SDI,2个USB,1个LCD和1个电池故障,1个NAND和2个CAMERA,1个AC’97音频控制器单元。外部中断源都是电平/边沿触发模式,同时还具有可编程的边沿/电平触发极性。S3C2440中断控制器支持为紧急中断请求提供快速中断服务。
上面这些中断源中,UART、AC’97及外部中断是和中断控制器做“或”运算得到的。当从内部设备或者外部中断请求引脚上收到多个中断请求时,中断控制器会在仲裁判决后,向ARM920T内核发出FIQ或者IRQ的请求,如图3-6所示为S3C2440内部的中断流程示意图。
注意:LCD中断具有不同的特点。
仲裁判决依赖于硬件上的逻辑优先级,以及中断寄存器中的值,它能帮助使用者判断那些中断是由哪些中断源产生的。
图3-6 中断流程示意图
如果ARM920T的程序状态寄存器(PSR)的F位值为1,那么CPU就不会接收来自中断控制器的快速中断请求(FIQ)。同样,如果PSR的I位值为1,那么CPU就不会接收来自中断控制器的中断请求(IRQ)。所以,必须将寄存器PSR的F位和I位清零以后,同时设置相应中断掩码(INTMSK)寄存器为0以后,中断控制器才可以接收相应的中断。