3.7.2 异常中断向量
所谓的“异常中断向量”,在ARM920T中实际上是一组存储地址,每个地址都是字对齐的,一个地址对应一个字大小的空间,这些字对齐的地址是连续的。根据它们的开始地址分为两种类型:
□低地址向量;
□高地址向量。
无论低地址向量还是高地址向量,它们的地址不是由软件随意安排的,而是从某个特定的地址开始的,地址如下。
□0x00000000地址:低地址向量,一般情况下ARM920T上电时都是从0地址开始的低地址向量。
□0xFFFF0000地址:高地址向量,可由软件通过操作CP15协处理器中的一个寄存器达到这一目的,后面会详细了解的。
ARM920T有7个向量,外加一个保留向量,一共是8个向量。这些向量包含异常和中断,如表3-5所示。
表3-5 ARM920T处理器的中断向量、异常向量
由表3-5可知,这些向量只有一个字的存储空间,显然这是放不下整个异常或者中断的处理代码的。于是这个地址上就放了一条跳转指令,就由这条跳转指令跳转到处理程序的地址开始运行。正因为如此,快速中断向量放在向量表最后,允许快速中断处理程序直接放在地址0x0000001C或0xFFFF001C开始的位置,而不需要由跳转指令跳转到快速中断处理程序。这可以提高快速中断响应的速度。
有些情况下,会在同一时刻发生多个异常或者中断,而ARM920T处理器在同一时刻又只能处理一个异常或者中断。怎么办呢,ARM920T处理器采用了一个固定的优先级来决定它们的处理顺序(如下)。数字越小的优先级越高,优先级最高的最先被ARM920T处理。
①复位。
②数据访问终止。
③快速中断。
④外部中断。
⑤预取指令终止。
⑥未定义指令终止和SWI。
注意,并不是所有的异常和中断都可以在同一时刻发生!比如,未定义指令终止和SWI,因为SWI指令不是一条未定义指令,它是软中断指令。所以在执行SWI指令发生软中断异常的时刻,绝对不可能发生未定义指令终止异常。
正是因为有了异常和中断这种机制,使得ARM920T处理器不仅在高速执行程序时能捕获程序中的问题并且进行相关问题的处理,还能高效地和外部设备进行通信。同时还能让应用程序通过执行SWI指令调用操作系统服务。