关于瑞萨RH850中断的异常处理函数地址Exception Handler Address的理解

博主联系方式:QQ:1256153255 ,邮箱:1256153255@qq.com

点击这里可申请RH850开发板
点击这里可申请瑞萨E1仿真器

RH850有两种定义中断方法:

1.直接向量法:Direct Vector Method
对于Direct Vector Method,Exception Handler Address = base address + offset address,
base address是指 RBASE or EBASE register
在这里插入图片描述

但是Direct Vector Method有个问题:
对于直接向量方法,因为每个中断优先级都有一个用户中断异常处理程序,所以具有相同优先级的多个中断分支会指向同一中断处理程序,但是一些用户可能希望从一开始就为每个中断处理程序使用不同的代码区域。
此时Table Reference Method就可以完美解决这个问题。

2.表参考方法:Table Reference Method
Exception Handler Address = INTBP register value + EI level maskable interrupt channel number * 4
在这里插入图片描述
使用Table Reference Method,通过INTBP寄存器值和中断通道编号确定中断向量的地址,中断向量指向ISR的入口地址,即可实现一个Exception Handler Address指向唯一的一个ISR。

### 瑞萨 RH850 中断配置方法 #### 配置中断向量表 为了使RH850能够响应特定的硬件事件,在启动时需设置好相应的中断向量表。该表格定义了不同类型的异常情况发生时应跳转执行的位置,即各个外设触发IRQ信号后的入口地址[^1]。 ```c // 定义全局变量指向中断服务例程(ISR)数组 extern void (* const g_pfnVectors[])(void); // 初始化部分可能如下所示 g_pfnVectors[INTERRUPT_NUMBER] = (void *)&MyISR; ``` 这里`INTERRUPT_NUMBER`代表具体要映射到哪个编号下的中断源,而`MyISR`则是自定义实现的具体处理逻辑函数名。 #### 启用目标外围设备产生的中断请求 除了建立上述关联关系之外,还需要针对具体的模块(比如定时器、串口通信单元等),通过编程方式激活其内部允许位来开启对应的中断通道[^3]。 对于某些型号而言,这一步骤通常涉及到操作相应寄存器中的控制字段完成开关动作: ```assembly ; 假定使用汇编指令修改特殊功能寄存器SFRs MOV A,#BIT_MASK ; 将欲打开/关闭的标志加载入累加器A中 ORL SFR_ADDR,A ; 对指定位置进行按位或运算以启用(如果原来是禁用状态的话) ``` 其中`BIT_MASK`表示用于标识某项特性的掩码值,`SFR_ADDR`则对应于存储这些属性的实际物理内存偏移量。 #### 设置优先级与子优先级 当多个异步事件几乎同时到来时,CPU会依据预先设定好的层次结构决定先处理哪一个。因此合理规划各级别的权重显得尤为重要。 一般情况下,可通过调整NVIC(Nested Vectored Interrupt Controller嵌套向量中断控制器)的相关参数达成目的: ```c /* 设立最高级别的紧急程度 */ __set_BASEPRI(MAX_PRIORITY_LEVEL); /* 或者单独为单个组件指派不同的重要度 */ NVIC_SetPriority(INTERRUPT_ID,PRIORITY_VALUE); ``` 以上C语言片段展示了两种常见的做法——一种是对整个系统范围内的抢占阈值做出统一规定;另一种则是精细化管理至每一个独立部件层面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值