中断分为内部中断和外部中断;内部中断即通过指令让ARM核设置自身通用寄存器内的标志位、产生的中断,外部中断是由外围硬件通过中断控制器向ARM核内EU控制单元直接发送中断信号。
本文重点分析S3C2440A的外部中断(也叫硬件中断)。从如下几个方面:1.中断控制器与ARM核以及外设的总线接口;2.中断控制器相关寄存器的设置;3.基于外部中断的应用。
1.S3C440A中断控制器的总线接口
外部中断是从ARM核内的EU控制单元直接引出,不走AMBA总线。
中断控制器一边连接该EU控制单元,一边通过连接AMBA总线和外设通信。
2.S3C2440A中断控制器相关寄存器
1)SUBSRCPND子中断源暂存寄存器
寄存器名 地址 描述 复位默认值
SUBSRCPND 0x4A000018 子中断源暂存寄存器 0x00000000
,保存中断请求状态
该寄存器用来标识保存子中断源信号,当某个子中断信号产生以后,SUBSRCPND对应位被自动置1,该位会一直保持被置位,直到中断处理程序将其清除为止。注意:清除中断是通过对应位写入1来清除,而不是写入0。
2)INTSUBMSK子中断源屏蔽寄存器
寄存器名 地址 描述 位默认值
INTSUBMSK 0x4A00001C 子中断源信号屏蔽寄存器 0xFFFF
,设置相应位来屏蔽中断信号
该寄存器用来屏蔽子中断源信号,默认值为全部子中断都被屏蔽掉,因此要想处理某个硬件中断,必须要打开中断屏蔽位,通过写入0来取消屏蔽中断。
3)SRCPND中断源暂存寄存器
寄存器名 地址 描述 复位默认值
SRCPND 0x4A000000 中断源暂存寄存器 0x00000000
,保存中断请求状态
该寄存器用来保存中断源信号,当某个中断信号产生以后,SPCPND对应位被自动置1,该位会一直保持被置位,直到中断处理程序将其清除为止。注意:清除中断是通过向对应位写入1来清除。
4)INTMSK中断源屏蔽寄存器
寄存器名 地址 描述 复位默认值
INTMSK 0x4A000008 中断源信号屏蔽寄存器 0xFFFFFFFF
,设置相应位来屏蔽中断信号
该寄存器用来屏蔽中断源信号,默认值为全部中断都被屏蔽掉,因此想要处理某个硬件中断,必须要打开中断屏蔽位,通过写入0来取消屏蔽中断。
5)INTPND最高优先级中断暂存寄存器
寄存器名 地址 描述 复位默认值
INTPND 0x4A000010 最高有优先级中断暂存寄存器里边 0x00000000
保存有经过优先级仲裁的结果
该寄存器保存了经过优先级仲裁出的中断信号位,它是所有当前中断请求里优先级别最高的中断,因此该寄存器里的值最多有一位被置1,通常中断处理程序中会通过读取该寄存器的值赖获得当前正在处理的中断请求。中断处理完成以后,通过写入1来清除中断。
6)INTOFFSET中断号偏移量寄存器
寄存器名 地址 描述 复位默认值
INTOFFSET 0x4A000014 中断号偏移量寄存器 0x00000000
,用来保存当前处理的中断号
该寄存器里存放的是经过优先级仲裁出的中断信号对应的中断号,是一个0~31之间的整数,其实它就是INTPND寄存器里对应的位号。
7)INTMOD中断模式寄存器
寄存器名 地址 描述 复位默认值
INTMOD 0x4A000004 中断模式寄存器 0x00000000
,指定对应中断模式
通过设置ARM内核产生中断。注意:快速中断不存在优先级仲裁,只能有一位被设置为FIQ模式。
3.基于外部中断的应用
中断源 |
描述 |
优先级仲裁分组 |
INT_ADC |
数模转换和触摸屏中断 |
ARB5 |
INT_RTC |
实时时钟中断 |
ARB5 |
INT_UART0 |
UART0中断(包含子中断) |
ARB5 |
INT_NFCON |
NandFlash控制中断 |
ARB4 |
INT_WDT_AC97 |
看门狗中断 |
ARB1 |
EINT8-23 |
外部中断8~23(包含外部子中断) |
ARB1 |
EINT4-7 |
外部中断4~7(包含外部子中断) |
ARB1 |
EINT3 |
外部中断3 |
ARB0 |
EINT2 |
外部中断2 |
ARB0 |
EINT1 |
外部中断1 |
ARB0 |
EINT 0 |
外部中断0 |
ARB0 |