{$cluname}

科伟奇论坛 » Powerpc技术论坛 » PowerPC 体系结构之中断异常


‹‹上一主题 | 下一主题›› 查看 2049
发表一个新帖子 发表回复

标题 PowerPC 体系结构之中断异常 在百度搜索本主题 [ 搜 ] [ 打印 ] [ 推荐 ] [收藏帖子] [ 收藏到新浪VIVI] [ 订阅 ]

alan (附小二年级)
楼主   [点击复制本网址] [ 字体: ] [ 编辑 ] [ 报告 ] [评分]
Rank:2
Rank:2
Rank:2
UID 15
帖子 18
积分 50 点
金币 87 枚
魅力 35 度
注册 2009年11月25日
PowerPC 体系结构之中断异常
取 BOOKE 之精要。

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) 为 64 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)

64 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)

64 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)

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


3.6 IVPR & IVORi

64 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 之异常的全家福:




参考文献:

[1] Book E: Enhanced PowerPC Architecture, V1.0, 2002.5




此用户离线!
共计在线时长80分钟2009/11/25 23:45:18
[ 资料 ] [ 短信 ] [ 好友 ] [ 文集 ] [ 引用 ] [ 回复 ] 点击返回顶部

« 首页1 »1/共1页


查看积分策略说明快速回复你的内容
快捷回复标题 (选填) 快捷插入表情图标
验 证 码  点击获取验证码
快捷回复内容

自动复制

Powered by TEAM 2.0.5 Release - ACC © 2005 Team5 Studio All rights reserved