S3C2410中断机制及相关寄存器介绍
1.中断向量表
每个中断都对应一段中断服务程序。当中断发生时,处理器就执行该中断对应的服务程序,实现该中断所要求完成的任务。处理器如何找到对应的中断服务程序呢?这就需要读取处理器的中断向量表。
中断向量表其实就对应了系统的一段存储区,它按照一定规律存储了处理器中所有不同类型中断的服务程序入口地址(又称中断向量)。S3C2410是基于ARM920T核,ARM920T的中断向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。ARM920T能处理8个类型的中断,他们分别是:
>Reset:当处理器的复位电平有效时,产生复位异常,程序跳转到复位处理程序执行。
>Undefined instruction:当处理器遇到不能处理的指令时产生未定义指令中断。
>Software Interrupt:执行SWI(软件中断)指令时产生,可用于用户实现系统调用
>Abort (prefetch):当处理器预取指令的地址不存在或该地址不允许当前指令访问时,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中断。
>Abort (data):当处理器访问的指令地址不存在或该地址不允许当前指令访问时,产生数据中止中断。
>Reserved:保留。
>IRQ:当处理器的外部中断请求引脚有效,且CPSR的I位为0时产生IRQ中断。
>FIQ:当处理器的快速中断请求引脚有效,且CPSR的F位为0时产生FIQ中断。
对应的中断向量表如表1-1所示。
中断类型 | 中断向量(入口地址) |
Reset | 0x00000000 |
Undefined instruction | 0x00000004 |
Software Interrupt | 0x00000008 |
Abort (prefetch) | 0x0000000C |
Abort (data) | 0x00000010 |
Reserved | 0x00000014 |
IRQ | 0x00000018 |
FIQ | 0x0000001C |
表1-1中断向量表
一般情况下,在每个入口地址处都存放了一条跳转指令,我们知道Uboot是用来完成系统的启动加载过程的,在u-boot的/cpu/start.S文件中,就有“b reset”指令,放在0x00000000地址。系统上电以后,CPU将会从0x00000000处得这条指令执行,执行完以后,CPU会跳转到reset标识的代码段去执行处理器复位程序。同样,在系统运行过程中,每当有中断发生,CPU会根据中断类型(用中断号标识),从内存的0x00000000处开始查表做相应的处理。比如系统触发了一个IRQ中断,IRQ为第6号中断,则CPU将把PC指向0x00000018地址(4*6=24= 0x00000018)处运行,该地址的指令是跳转到“IRQ中断服务程序”处运行。
S3C2410中断源,如图1-1中断源所示:
图1-1中断源
INTERRUPT CONTROLLER OPERATION
F-bit and I-bit of Program Status Register (PSR)
If the F-bit of PSR in ARM920T CPU is set to 1, the CPU does not accept the Fast Interrupt Request (FIQ) from the interrupt controller. Likewise, If I-bit of the PSR is set to 1, the CPU does not accept the Interrupt Request (IRQ) from the interrupt controller. So, the interrupt controller can receive interrupts by clearing F-bit or I-bit of the PSR to 0 and setting the corresponding bit of INTMSK to 0.
Interrupt Mode
The ARM920T has two types of Interrupt mode: FIQ or IRQ. All the interrupt sources determine which mode is used at interrupt request.
Interrupt Pending Register
The S3C2410A has two interrupt pending resisters: source pending register (SRCPND) and interrupt pending register (INTPND). These pending registers indicate whether or not an interrupt request is pending. When the interrupt sources request interrupt service, the corresponding bits of SRCPND register are set to 1, and at the same time, only one bit of the INTPND register is set to 1 automatically after arbitration procedure. If interrupts are masked, the corresponding bits of the SRCPND register are se
S3C2410中断机制寄存 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)