TRAPNO¶
异常原因寄存器(Trap Number Register)是 可读写的(RW) 系统寄存器,由服务请求SERVICE_REQUEST过程更新,用于存储发起服务的源ACR的发起原因。
- TRAPNUM:表示陷入代号,该字段被服务请求SERVICE_REQUEST程序设置。
- CAUSE:此字段定义了服务请求的详细原因,请参阅Exception Cause部分关于
Trap Number和TrapCause 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}访问。