一、概述
S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、 UART、IIC 等等。
在这些中断源中,UARTn、AC97 和 EINTn 中断对于中断控制器而言是“或”关系。 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求 ARM920T 内核的 FIQ 或 IRQ。
仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中。
此处中断控制器中有 5 个控制寄存器:源挂起寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器和中断挂气寄存器
二、实现过程
2.1.先将程序状态寄存器的F和I两位使能为0取消禁止中断
需要再汇编语言中提设置程序状态寄存器
2.2.设置源挂起寄存器(源挂起标志)
此处那个中断源产生了中断,则相应的位会被自动设置为1,等待处理;
该中断源处理结束后,需要手动写入1到该寄存器,清除该位;
2.3.设置中断屏蔽寄存器(开关)
需要设置要处理的中断源再中断屏蔽寄存器中相应位为0,为可服务态;
2.4. 中继偏移寄存器(FIQ/IRQ)
说明了,中继源中那些是IRQ模式的,则需要优先级设置,然后再挂起,一个个处理;
否则是FIQ则直接处理;
后续先清除了源挂起该中继源然后再清除中继挂起的中继源,该寄存器的该位将会自动清除;
2.5.设置中继优先级寄存器
模拟实现处理一个中断,则不需要设置;
如果多个,则需要设置;
2.6.次级源挂起寄存器
有些源挂起寄存器的中继源有很多位都中断,代表不同的中继源,则需要将其挂起,也即是次源挂起;
次级源挂起寄存器,会自动将发生中继源的位设置位1;
当该位中继源处理后,需要手动写入1将其清零;
2.7.中继次级屏蔽寄存器(次级开关)
需要设置与源挂起寄存器中位为1的中继源对应,设置为0,服务中级请求;