• RH850 G3KH异常处理简述


    目录

    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可以选择使用直接向量法和表参考法。

    1. 直接向量法(Direct vector method)

    需要注意的是,reset和一些指定异常必须使用RBASE中的地址。

    根据PSW.EBV来确定基地址;EBV=1,使用EBASE;EBV=0,使用RBASE;如下图

             下表为异常基地址和偏移

             

    2.表参考法(Table reference method)

    在直接向量法中,每个中断优先级都有一个用户中断异常处理程序,中断通道则指的是具有相同优先级的多个中断切到同一中断处理程序,但有些用户可能希望使用与每个中断处理程序的开始时间不同的代码区域。

    当使用表引用方法时,如果表引用方法被指定为中断控制器的中断通道向量选择方法,则当确认对应于该中断通道的中断请求时,确定异常处理程序地址的方法不同之处如下。

    1. 如下情形使用直接向量法
      1. PSW.EBV = 0(1)且RBASE(EBASE).RINT =1
      2. 对应中断通道没有设置表参考法

    除了上述情况,使用表参考法,对应异常处理地址为 INTBP+channel*4bytes。

     4.小结

            从上面,我们简单了解了G3KH是如何处理中断和异常的。从使用者角度还是比较简单易用,相较于英飞凌来说,更容易理解。

  • 相关阅读:
    【再探】设计模式—中介者模式、观察者模式及模板方法模式
    4.四大类(DDL、DML、DQL、DCL)
    FAIRNESS IN MACHINE LEARNING: A SURVEY 阅读笔记
    30.CSS文本悬停过渡效果
    「C++小游戏教程」基本技巧(2)——系统 DOS 命令
    机械臂速成小指南(十七):直线规划
    【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
    Linux·安装编译libncurses5-dev遇到的问题
    设计模式---模板方法模式
    k8s kubesphere 部署 harbor私服仓库
  • 原文地址:https://blog.csdn.net/djkeyzx/article/details/134560456