跳转至

TRAPNO

异常原因寄存器(Trap Number Register)是 可读写的(RW) 系统寄存器,由服务请求SERVICE_REQUEST过程更新,用于存储发起服务的源ACR的发起原因。

TRAPNO

  • TRAPNUM:表示陷入代号,该字段被服务请求SERVICE_REQUEST程序设置。
  • CAUSE:此字段定义了服务请求的详细原因,请参阅Exception Cause部分关于 Trap NumberTrapCause Number的所有组合。
  • E: 当发生同步异常时,E置为1,当发生异步中断时,E置为0。

异常原因

异常原因表
陷入代号 含义 原因代号 含义
E_INST(0) 指令相关异常 EC_ACCESS_FAULT(0) 指令访问异常
EC_TRANS_FAULT(1) 指令翻译异常
EC_MISALIGNED(2) 指令不对齐
EC_ILLEGAL(3) 非法指令
EC_PERM(4) 指令权限异常
EC_PF(5) 指令页非法
EC_BUS(6) 总线异常
EC_PARAM(7) 非法参数
E_DATA(1) 数据访问相关异常 EC_LOAD(0) 内存读取异常
EC_MISALIGNED(1) 内存读取不对齐
EC_LOAD_PAGE(2) 读操作页非法
EC_STORE_A_ACCESS(3) 内存写访问异常
EC_STORE_A_MISALIGNED(4) 内存写地址不齐
EC_STORE_A_PF(5) 写操作页非法
EC_RANGE(6) 访问范围非法
EC_BUS(7) 总线异常
E_BLOCK(4) 块格式异常 EC_INVAL_SET(0) 输出未指定的输出寄存器
EC_INVAL_GET(1) 读取未指定的输入寄存器
EC_INVAL_PARM(2) 非法参数
EC_INVAL_DOUBLESET(3) 块内重复设置寄存器
EC_INVAL_FIXUP(4) 不正确的子修复块参数
E_FLOAT(5) 浮点例外 EC_INVAL_OPERATION(0) 非法操作例外
EC_DIVISION_BY_ZERO(1) 被0除例外
EC_OVERFLOW(2) 上溢例外
EC_UNDERFLOW(3) 下溢例外
EC_INEXACT(4) 不精确例外
E_ASSERT (15) 断言异常 (产生原理请参考assert指令的定义)
E_SCALL(16) 软件主动异常(系统调用)
E_BREAKPOINT(17) 软件断点
18-61 保留
E_ISSR(62) 非法SSR异常
E_NIL(63) 本值用于表示异常分类无效

注意

EC_前缀名称是异常原因名称,仅在特定Trap Number中有效。

地址空间

该寄存器在每个ACR中的命名和寻址空间有所差别,具体如下:

ACR层级 寄存器名 地址空间
ACR0 TRAPNO_ACR0 0x0f02
ACR1 TRAPNO_ACR1 0x1f02
ACR2 TRAPNO_ACR2 0x2f02
... ... ...
ACRn TRAPNO_ACRn 0xnf02

其中,“_ACR{m}”后缀表示该寄存器从ACR{m}访问。