视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
powerpc异常
2025-09-24 06:35:16 责编:小OO
文档
1. 异常类型

00           Critical Interrupt     来自于外部中断控制器,具有较高的优先级

01           Machine Check    严重的内部状态错误,如 Cache 数据的校验失败

02           Data Storage    数据读写异常,如:用户态读一个非用户态的页 (UR=0)

03           Instruction Storage    读指令异常,如:用户态时取一个用户态不可执行的页 (UX=0)

04           External Interrupt    来自于外部中断控制器

05           Alignment    非对齐访问异常

06           Program    程序异常,如:执行非法指令,用户态执行指令

07           Floating-Point unavailable    在无浮点部件的 CPU 上执行浮点指令即会触发此异常

08           System call    系统调用

09           Auxiliary Processor Unavailable    在无协处理器的 CPU 上执行协处理器指令即触发此异常  

10           Decrementer    DEC 寄存器归零异常,DEC 是一个内部时钟计数器,Linux 用之实现时钟中断

11           Fixed-interval timer interrupt    

12           Watchdog timer interrupt    

13           Data TLB error    数据 TLB Miss 异常

14           Instruction TLB error    指令 TLB Miss 异常

15           Debug    调试异常,用于支持调试

16 - 31   Reserved for future use   保留给将来体系结构升级用

32 - 63   Allocated for implementation-dependent use   具体实现相关

其中 0,1,12,15 为 Critical Exception,当其发生时,使用 CSRR0 & CSRR1 保存当前 PC 或 (PC + 4) 和 MSR;其他异常发生时,则使用 SRR0 & SRR1 保存当前 PC 或 (PC + 4) 和 MSR

可以看到 BOOKE 体系结构层面规定的异常即为前 16 个,这其中的有些异常是个笼统的抽象(比如 Data Storage 就需要区分是读还是写导致的),为了更细地描述发生异常的原因,PowerPC 引入了一个 ESR (Exception Syndrome Register),让硬件在异常发生时,在其中指出更具体的原因。比如 若 ESR[40] 被置位,则说明异常是由写操作引起的。

2. 异常入口(向量)

BOOKE 使用可读写的内部寄存器 IVPR 和 IVOR 来指定异常的入口。

其中 IVPR (Interrupt Vector Prefix Register) 为  bit,指定所有异常入口基地址的高 48 bit,即 IVPR[48:63] 始终为 0

IVOR (Interrupt Vector Offset Register) 为 32 bit,指定具体异常入口相对异常基地址的偏移,每个异常一个,只使用其低 16 位。则其 IVOR[32:40] 为 0;又因所有入口 16 字节对齐,实际上 IVOR[60:63] 亦始终 0:

IVOR00           Critical Interrupt     

IVOR01           Machine Check    

IVOR02           Data Storage   

IVOR03           Instruction Storage    

IVOR04           External Interrupt    

IVOR05           Alignment    

IVOR06           Program    

IVOR07           Floating-Point unavailable    

IVOR08           System call    

IVOR09           Auxiliary Processor Unavailable    

IVOR10           Decrementer    

IVOR11           Fixed-interval timer interrupt   

IVOR12           Watchdog timer interrupt   

IVOR13           Data TLB error    

IVOR14           Instruction TLB error    

IVOR15           Debug    

IVOR16 ~ IVOR31

IVOR32 ~ IVOR63

则 Data TLB Miss 的异常入口即为: IVPR[0:47] || IVOR[48:59] || 0b0000

注意:PowerPC 没有 RESET 异常这个概念,故没有 RESET 的入口,上电后处理器直接到固定地址去取指令(E500 上为 0xFFFF FFFC)。

3. 相关寄存器

3.0 MSR (Machine Status Register)

内含部分异常使能位,清位则屏蔽相应的异常:

MSR[46], CE (Critical Enable) --- Critical Input and Watchdog Timer Interrupts Enable

MSR[48], EE (External Enable) --- External Input, Decrementer and Fixed-Interval Timer Interrupts Enable

MSR[51], ME (Machine Check Enable) --- Machine Check Enable

MSR[54], DE (Debug Enable) --- Debug Enable

MSR[49], PR (Proble State) --- 置 1 表示处理器处于用户态,置 0 则为核心态

当 Critical Exception 发生时,硬件将 MSR 保存于 CSRR1 后,仅保持 ME 不变,自动将 MSR 之其它位清零(PR = 0,进入核心态)

当一般异常发生时,硬件将 MSR 保存于 SRR1 后,保持 CE,DE,ME 不变,自动将其它位清零

3.1 SRR0 (Save/Restore Register 0)

 bit,用于异常发生时保存引起异常指令的地址(异常)或其下一条指令的地址(中断)。

保存过程硬件自动做

执行 rfi 从异常返回时,处理器会跳转到 SRR0 保存的地址处继续执行。

3.2 SRR1 (Save/Restore Register 1)

32 bit,用于异常发生时硬件自动保存 MSR (Machine Status Register) 

执行 rfi 从异常返回时,处理器会将 SRR1 值恢复入 MSR

3.3 CSRR0 (Critical Save/Restore Register 0)

 bit,用于 Critical Exception (0, 1, 12, 15)

其它与 SRR0 同,只是该类型异常使用指令 rfci 返回

3.4 CSRR1 (Critical Save/Restore Register 1)

32 bit,用于 Critical Exception (0, 1, 12, 15)

其它与 SRR1 同,只是该类型异常使用指令 rfci 返回

3.5 DEAR (Data Exception Address Register)

 bit,用于记录访存失败的地址,类似 MIPS 之 BadVAddr 或 x86 之 CR2

3.6 IVPR & IVORi

 bit & 32 bit,异常入口寄存器

3.7 ESR (Exception Syndrome Register)

4. 完整的例子

以外设中断为例:

a. 外部中断控制器通过中断引脚 (#int) 触发处理器进入 External Input 异常

b. 保存当前 PC + 4 入 SRR0 (异步,无需重新执行之,故下一条指令即可)

c. 保存当前 MSR 入 SRR1,保持 MSR 之 CE, DE, ME,其余清除

d. 跳转到入口 IVPR + IVOR4 处 (interrupt handler 之所在)

e. interrupt handler 使用指令 rfi 返回,处理器在执行该指令时自动把 SRR1 恢复入 MSR,SRR0 入 PC

最后给一个 BOOKE 之异常的全家福:下载本文

显示全文
专题