• 沒有找到結果。

异常处理过程

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 39-42)

第 2 章 嵌入式处理器

2.7 异常和中断处理机制

2.7.2 异常处理过程

异常处理过程如图2.8 所示,它有以下三个步骤。

(1) 处理器将状态寄存器(PSR)和程序计数器(PC)复制到相应的屏蔽寄存器里。对快速 中断异常,PSR 和 PC 被保存到 FPSR 和 FPC 控制寄存器里。对其他的所有异常,它们则 被置于 EPSR 和 EPC 屏蔽寄存器中。当 PSR(EE)被清为零时,异常(除了快速中断异常)不 管是什么类型,都将导致一个不可恢复的错误异常。在PSR 和 PC 被保存到适当的屏蔽寄 存器之后,PSR(EE)位被清为零,防止出现不可恢复的错误异常逻辑。

在出现一个不可恢复的错误异常时,EPSR 和 EPC 仍然被更新。如果该不可恢复的错 误异常是由于在异常处理过程中提取异常向量表产生的,则 EPSR 和 EPC 中的值是无定 义的,另外装载进PSR(AF)位的值也无定义。

接下来,通过设定 PSR(S)位,处理器进入超级用户模式并通过清空 PSR 的 TM 域禁

止跟踪异常处理程序。中断使能标志(IE)也被清空禁止响应常规中断。快速中断异常和复 位把快速中断使能(FE)位清零,FE 位不受其他异常的影响。

图2.8 异常处理过程

PSR 中的 TE(转换控制)被清零,使得外部的存储控制单元在接下来的异常处理过程 中不能控制地址的转换,这样就使接下来执行的访问不会被转换。异常处理程序可以在适 当的时候重新将转换设为有效。

(2) 处理器确定异常向量号。对向量中断,处理器直接锁存中断控制器的向量号并通 过接口提交给 C310。对所有其他的异常,由内部逻辑提供向量号。在最后一步里将要使 用该向量号,方法是用 4 乘以该向量号使之成为一个向量偏移,然后计算出异常向量地

址。与异常相关的向量号被载入PSR 的 VEC 域,以帮助共享异常处理程序。

(3) 处理器决定异常处理程序的第一个指令的地址,然后把控制权交给处理程序。处 理器把向量偏移和向量基地址寄存器里的值组合在一起,以获取异常向量的存储器地址。

之后,处理器从向量表单元取回一个字,将向量表中异常处理程序第一条指令的地址载入 PC,并且将该向量表单元的低位装进 PSR(AF)控制位,以决定在进入异常处理程序时使 用哪个寄存器文件。这样处理器就从新的PC 值开始执行。

C310 支持一个包含 128 个异常向量(参见表 2.6)的 512 字节的向量表。一切异常向量 位于超级用户地址区,并且都通过相对地址引用,只有复位向量的地址在处理器存储器映 射表中是固定的。初始化完成后,通过编程 VBR 的方式可以在复位后将异常向量表的基 地址重定位。

表2.6 异常向量表

向 量 号 向量偏移地址 赋 值

0 0x000 复位

1 0x004 不对齐存取

2 0x008 存取错误

3 0x00C 除数为零

4 0x010 非法指令

5 0x014 权限冲突

6 0x018 跟踪异常

7 0x01C 断点异常

8 0x020 不可恢复错误

9 0x024 保留

10 0x028 普通中断自动向量

11 0x2C 快速中断自动向量

12 0x030 保留

13 0x034 保留

14 0x038 保留

15 0x03C 保留

16 0x040 trap#0

17 0x044 trap#1

18 0x048 trap#2

19 0x04C trap#3

20~31 0x050~07C 保留

32~127 0x080~0x1FC 留给中断控制器

向量表中的前 32 个向量所对应的向量号是由 C310 内部逻辑提供的固定向量号,供 内部异常使用。其余的 96 个向量号用于外部设备产生的中断,为中断控制器所用。外部 设备将一个 7 位的向量号和一个中断请求发给 C310,在中断请求被接受后,C310 锁定中

断向量号,并指向相应的位置。对不能提供一个向量号的外部设备,C310 提供了自动向 量的能力。常规中断(p_int_b)和快速中断(p_fint_b)拥有各自的自动向量。

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 39-42)