• 沒有找到結果。

异常类型

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

第 2 章 嵌入式处理器

2.7 异常和中断处理机制

2.7.3 异常类型

异常有外部中断异常和C310 内部产生的不同类型的异常。这些异常有以下几种:

l 复位异常 l 不对齐存取异常 l 存取错误异常 l 除零错误异常 l 非法指令异常 l 权限冲突异常 l 跟踪异常 l 断点异常

l 不可恢复错误异常 l 自动向量中断异常 l 自动向量快速中断异常 l trap 指令异常

下面分别描述各个异常。

1. 复位异常(向量偏移 0x000)

在所有的异常中,复位异常拥有最高的优先级。复位异常给系统提供初始化,并且可 以使系统从灾难性的故障中恢复。

复位终止一切正在进行的处理工作,这些处理工作一旦被终止就不可恢复。C310 的 复位通过扫描测试链和时钟控制初始化内部的锁存器状态来完成。这一过程是在初始上电 时由外部时钟模块执行的。

复位异常通过置位 S 位使处理器进入超级模式,并通过清空 PSR 里的 TM 域使跟踪 无效。复位异常还把 PSR 中断使能位 IE 和 FE 清零。VBR 被清为零,使得异常向量表的 基地址为(0x00000000)。CPU 从异常向量表 0 偏移的地址获取复位向量,然后载入 PC。

复位异常处理程序继续执行,将控制权交给PC 指向的存储器地址。

2. 不对齐存取异常(向量偏移 0x004)

当处理器试图在一个与存取数据宽度不一致的边界存取操作数时将会产生一个不对齐 存取异常。可以通过设置 PSR(MM)位屏蔽未对齐异常,从而忽略数据的对齐检测,在这 种情况下,数据从下一个相邻较低的自然边界读取。在异常处理程序的入口,EPC 指向试 图产生不对齐存取的那条指令。

除了数据相关的不对齐存取异常外,如果跳转的目标地址是奇数, jmpi,jsri 指令也 产生不对齐存取异常。在这种情况下,EPC 包含取回的值,是将要转移到的目的地址值,

而不是 jmpi,jsri 指令的地址。只有在这种情况下,才会出现当异常处理程序进入时,

EPC 的值是奇数。

注意,当跟踪模式有效时,EPSR 中的 TP 位没有被置位。因此不自动跟踪不对齐的 jmpi,jsri。

PSR(MM)位不屏蔽与 jmpi,jsri 相关的不对齐存取。

3. 存取错误异常(向量偏移 0x008)

在一定条件下,当外部被访问存储器发来的中止一个总线周期的响应信号是传送错误 响应信号(TEA#)时,就会产生一个存取错误异常。

存取操作数时的总线错误常常导致一个存取错误异常,这会引起处理器开始执行异常 处理进程。在异常处理程序的入口,EPC 指向产生总线错误的相关指令。

在指令预取时产生的总线错误将被延迟,直到处理器试图执行该指令。在这个时候,

总线错误异常产生,异常处理过程开始执行。如果在指令预取周期出现总线错误,而由于 指令流发生跳转而未执行相关指令,则忽略该总线错误。

存取错误异常也可供外部存储器管理单元使用,在 TLB miss 和存取冲突时产生 异常。

4. 除零错误异常(向量偏移 0x00C)

除零错误异常发生在除法操作数为零的时候,它与trap 指令类似。当处理器检测到除 数为零时,它将进入处理异常的模式,而不是继续进行除法操作。当异常处理程序开始 时,EPC 指向这条除法指令。

5. 非法指令异常(向量偏移 0x010)

处理非法指令的异常与 trap 指令异常类似。若处理器解码一条非法或未完成的指令时 产生异常,处理器将进入处理异常模式,而不是继续执行这条指令。异常处理程序开始 时,EPC 指向这条非法指令。

6. 权限冲突异常(向量偏移 0x014)

为了保障系统的安全,某些指令被授予特权。在普通用户模式下试图执行下面任意一 个特权指令时,都将产生权限冲突异常:mfcr,mtcr,rfi,rte,stop,wait 和 doze。

权限冲突异常的处理方法与非法指令异常处理方法相似。当处理器识别一个权限冲突 时,处理器在执行该指令前开始执行异常处理。异常处理程序开始时,EPC 指向这条特权 指令。

7. 跟踪异常(向量偏移 0x018)

为了支持程序开发,C310 提供两种跟踪功能:单步指令跟踪和指令流改变跟踪。在 单步指令跟踪模式下,每条指令执行完毕都将产生一个异常,该模式允许调试软件监视程 序的执行。在指令流改变跟踪模式下,则只有当跳转指令(如 branch 和 jmp 等)执行完毕才 产生一个异常。不管条件分支或循环指令的结果如何,都会出现跟踪异常。

下面的指令常在指令流改变跟踪模式中产生异常:jmp,jsr,jmpi,jsri,br,bt,bf,

bsr 和 loopt。不管流改变的条件是否满足,都将产生跟踪异常。

如果由于指令相关的异常造成要跟踪的指令不能执行完成,则跟踪异常处理过程将被 推迟,并且不会产生跟踪异常以及悬停的跟踪异常。这还包括在指令 jmpi,jsri 中检测到

不对齐条件的情况。如果在要跟踪的指令执行结束后有中断悬停,则跟踪异常处理被延 迟,并标记悬停在EPSR 中,作为异常识别过程的一部分。

PSR 中的 TM 域控制跟踪。在一条指令开始执行时,TM 域的状态决定指令执行完成 后是否产生一个跟踪异常。跟踪异常处理过程在被跟踪的指令正常结束后,下一条指令开 始执行前开始执行。在异常处理程序开始时,EPC 指向下一条即将执行的指令,而不是被 跟踪的指令。

某些控制相关的指令(如:rte, rfi, trap, stop, wait, doze 和 bkpt)永远不会被跟踪,尽管 在EPSR(TM)位置位的情况下,作为正常执行 rte, rfi 指令的一部分会产生跟踪异常。这与 PSR 和 EPSR 中的 TM 域设置无关。

如果在被跟踪的指令完成时有一个中断悬停,则假定中断具有高的优先级,并且在中 断异常处理过程中将屏蔽PSR 寄存器中的跟踪悬停位(TP)置位,表示有跟踪悬停出现。在 中断处理程序结束时执行的rte 或者 rfi 指令使得悬停的跟踪异常开始处理。

8. 断点异常(向量偏移 0x01C)

断点指令 bkpt 和硬件断点请求输入(jd_bkreq_b)信号都拥有一个惟一的异常向量号。

为了把硬件断点异常丢失的机会最小化,硬件断点异常比jd_bkreq_b 输入信号产生的中断 享有更高的优先权。如果一条预取的指令使 jd_bkreq_b 有效,并且这条指令没有执行,则 当 这 条 指 令 开 始 执 行 时 , 断 点 异 常 发 生( 即 不 会因 为 指令 流的 改 变而 丢 弃 ) 。如 果 jd_bkreq_b 在取数据时被置为有效,则在这条指令完成后会产生一个断点异常。对 bkpt 指 令或者 jd_bkreq_b 有效的指令被访问时,EPC 在异常处理程序入口处指向这条指令。对 于带有jd_bkreq_b 请求的数据访问,EPC 指向下一条指令。

9. 不可恢复错误异常(向量偏移 0x020)

在PSR 中的 EE 位为零时,非快速中断异常的发生会造成一个不可恢复的异常,因为 在异常恢复时需要的上下文信息(原先保存在 EPC 和 EPSR 屏蔽寄存器中)被不可恢复的错 误覆盖了。

这个错误通常指示系统有错误,因为软件应该保证在 PSR(EE)为零时排除异常的出 现。由于不知道是哪种类型的异常造成了不可恢复错误异常,因此在进入不可恢复错误异 常处理程序时,EPC 可能指向已经执行过的指令或者是还未执行的指令。

10. 中断异常

当一个外部设备请求 C310 的服务,或者当外部设备准备发送处理器需求的信息时,

它通过发送中断请求和中断向量来通知处理器,使处理器产生一个中断异常。

中断一般在指令执行的边界被响应。某些多周期的指令可以在没有完成时被打断,以 后再重新启动执行,通过这样一种方式,可以减小最差情况下的中断延迟。可以通过设定 PSR 中 IC 位的方式允许 divs,divu,ldm,ldq,mult,stm 和 stq 等指令在未完成时被 中断。

有两种信号可以提出中断请求,如图 2.9 所示。这两种信号都具备自动向量和显式指 定向量号的能力。

图 2.9 显示了与中断相关的中断控制器与 C310 内核接口的信号。在向量中断FINT—————

————INT

有效,提出中断请求的时候会同时提供一个 7 位的 VEC[6:0]向量号;自动向量AVEC——————

有效表示应该使用预先定义好的适当的向量号(10 或 11)。如果AVEC——————有效,则 VEC[6:0]

输入信号将被忽略。

2.9 中断接口信号 (1) 常规中断(INT————)

————INT

是普通中断请求输入,它是最低级别的中断输入信号。INT————在 PSR(IE)位清零时 被屏蔽。普通中断使用 EPSR 和 EPC 异常屏蔽寄存器,也可以通过清除 PSR 中的 EE 位 来屏蔽它的请求。当INT————输入有效时,可以使用VEC[6:0]产生的自动向量,也可以用从编 号为32 至 127 的向量中选择一个 7 位的向量。可使用的中断号为 32 至 127(并不特别排除 处理器使用 0~31 编号向量的可能)。如果普通中断是自动向量中断,则使用向量表中偏 移量为0x28 的向量。

(2) 快速中断(FINT—————)

—————FINT

是快速中断请求输入。如果 PSR 的 FE 位置位,使快速中断有效,这个中断请 求信号的级别高于INT————。FINT—————使用 FPSR 和 FPC 异常屏蔽寄存器,清除 PSR 中的 EE 位 并不能屏蔽它的请求,只有清除 PSR 中的 FE 位才能屏蔽它的请求。FINT—————有效时,可以 使用 VEC[6:0]产生的自动向量,也可以使用从编号 32~127 的向量中选择一个 7 位的向 量(并不特别排除处理器使用 0~31 编号的向量)。如果快速中断是自动向量中断,则使用 向量表中偏移量为0x2C 的向量。

11. Trap 指令异常(向量偏移 0x040~0x05C)

执行trap #n指令可以强迫产生一个异常。用户程序可以通过trap #n指令来实现系统功 能调用。异常处理程序开始时,EPC执行trap指令。

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