RH850 中断相关

1.1 EBASE — Exception Handler Vector Address Register;

1.2 RBASE — Reset Vector Base Address Register

1.3中断类型分类

FE level non-maskable interrupt (FENMI)

即使已生成另一个FE级别中断FEINT,也将应答FENMI中断。
−即使CPU系统寄存器PSW.NP = 1,也会应答FENMI中断。
−无法从FENMI中断返回,也无法恢复

FE level maskable interrupt (FEINT)

如果CPU系统寄存器PSW.NP = 0,则可以确认FEINT。如果PSW.NP = 1,则将其屏蔽。
−从FEINT中断返回是可能的,因此恢复也可以。

EI level maskable interrupt (EIINT)

如果尚未生成FE级中断(FENMI或FEINT),则可以确认EIINT中断。
−如果CPU系统寄存器PSW.NP = 0,则可以确认EIINT。
如果正在处理PSW.NP = 1,具有更高优先级的EIINT或PSW.ID = 1,则将其屏蔽。
−可以从EIINT中断返回,恢复也可以。
−可以为每个中断通道指定中断屏蔽。
−每个中断通道可以指定16个中断优先级
−在本节中,对应于中断通道n的EIINT用“ INTn”表示,而EIINT表示
对应于中断源xxx,用“ INTxxx”表示。

定义中断的两种方式:

1.直接向量法

在RH850 / F1KM中,输入复位后或执行以下操作时从其执行处理程序的异常处理程序地址。
可以根据设置更改异常或中断被确认。
重置和异常(包括中断)的异常处理程序地址由直接向量确定
方法,其中可以使用PSW.EBV位来更改异常处理程序地址的参考点,
RBASE寄存器和EBASE寄存器。 对于中断,可以使用直接向量法和表引用法
为每个通道选择。 如果选择了表引用方法,则执行可以跳转到由表指示的地址。
内存中分配的异常处理程序表

CPU使用将表7BC.27(选择基址寄存器/偏移地址)中所示的偏移量加到RBASE或EBASE寄存器指示的基址中的结果作为异常处理程序地址。

通过使用PSW.EBV位* 1,选择将RBASE或EBASE寄存器用作基地址。 当PSW.EBV位设置为1时,EBASE寄存器的值用作基地址。 当PSW.EBV位清除为0时,RBASE寄存器的值用作基地址。
对于复位输入和某些例外情况* 2,RBASE寄存器始终用作参考。
此外,用户中断请参见相应基址寄存器的RINT位,并根据位状态减少偏移地址。 如果RBASE.RINT位或EBASE.RINT位设置为1,则所有用户中断的偏移量均为100H。 如果该位清零,则根据表7BC.27,基址寄存器/偏移地址的选择确定偏移地址。

2.表参考方法

在下列任何一种情况下,异常处理程序地址都是使用直接向量方法确定的:
−当PSW.EBV = 0且RBASE.RINT = 1时
−当PSW.EBV = 1且EBASE.RINT = 1时
−中断通道设置不是表参考方法时(模块的中断设置)

在以上的情况以外的情况下,计算表参考位置。
异常处理程序地址读取位置= INTBP寄存器+通道号×4字节

INTBP — Base Address Register of the Interrupt Handler Address Table

当选择表引用方法作为地址表时,该寄存器指示地址表的基地址。
中断处理程序地址选择方法

查看手册内定义

在CS+工程内的汇编代码找到

此处将地址加在到了INTBP寄存器

修改RESET section 时 需要在跳转Main 函数之前赋值 EBASE值

Mov #__sRESET, r10 ; get RESET address
ldsr r10, 3, 1 ; set EBASE

原文地址:https://www.cnblogs.com/hkj8808/p/13131742.html