目录
1.概述
2.异常处理后现场恢复
3.异常处理地址识别
4.小结
1.概述
我们首先来看,G3KH的关键寄存器,PSW
- PSW--Program status word
PSW寄存器里有表征程序状态的flag,CPU操作状态的flag。如下
UM---是否是user mode;0--SV 1--UM
EBV---该位表示重置向量(RBASE)和异常向量(EBASE)操作
ID ---该位用于使能EI等级的异常。当检测到EI/FE等级异常时,该位设置为1用于关闭EI等级异常的监测。使用汇编指令EI使能,DI失能。
NP---用于使能FE等级的异常。
与异常中断相关的系统寄存器:
RBASE:发生reset后的reset 向量地址;如果EBV=0,该地址同样作为异常向量地址
EBASE:异常程序处理地址;当EBV=1时,该寄存器有效。
- INTBP--Base Address Register of the interrupt handler address table
当选择表引用方法作为中断处理程序地址选择方法时,该寄存器指示表的基地址。
在G3KH中,异常分为三类
- FE级别不可屏蔽中断(FENMI)
- FE级别可屏蔽中断(FEINT)
- EI级别可屏蔽中断(EIINT)
异常原因部分列表如下:
获取到异常时,处理流程如下:
首先检查PSW.NP位,如果有FE等级的异常出现,该位为1;
然后检擦PSW.ID位,判断该位是否位1;
这里就有一个疑问:检查NP位时,如果该位为0,是否就叫做不满足?、从这个时序图可以看到应该不是这样,应该是根据异常列表中异常对应NP来判定条件是否满足,例如下图的user interrupt。如果此时NP为0,那么根据该表红框标出的数据,user interrupt对应的NP mask应该为0,所以满足上述条件;ID位参上。
2.异常处理后现场恢复
根据异常的类型不同,调用指令FERET或者EIRET来返回;将对应的xxPC/xxPSW赋值给PC和PSW。
3.异常处理地址识别
Reset、异常/中断确认期间,用于执行的异常处理程序地址可以根据需要进行设置更改。
Reset和异常的处理地址使用直接向量法来获取,根据PSW.EBV、EBASE和RBASE寄存器。
中断,每个channel可以选择使用直接向量法和表参考法。
- 直接向量法(Direct vector method)
需要注意的是,reset和一些指定异常必须使用RBASE中的地址。
根据PSW.EBV来确定基地址;EBV=1,使用EBASE;EBV=0,使用RBASE;如下图
下表为异常基地址和偏移
2.表参考法(Table reference method)
在直接向量法中,每个中断优先级都有一个用户中断异常处理程序,中断通道则指的是具有相同优先级的多个中断切到同一中断处理程序,但有些用户可能希望使用与每个中断处理程序的开始时间不同的代码区域。
当使用表引用方法时,如果表引用方法被指定为中断控制器的中断通道向量选择方法,则当确认对应于该中断通道的中断请求时,确定异常处理程序地址的方法不同之处如下。
- 如下情形使用直接向量法
- PSW.EBV = 0(1)且RBASE(EBASE).RINT =1
- 对应中断通道没有设置表参考法
除了上述情况,使用表参考法,对应异常处理地址为 INTBP+channel*4bytes。
4.小结
从上面,我们简单了解了G3KH是如何处理中断和异常的。从使用者角度还是比较简单易用,相较于英飞凌来说,更容易理解。