4. RH850中断系统
在RH850实时系统中,中断是连接外设事件与CPU处理的核心机制。无论是CAN报文到达、定时器溢出、ADC转换完成,还是GPIO边沿触发,最终都要通过中断控制器进入CPU,由中断服务程序完成响应。理解RH850中断系统,不能只停留在“会写中断函数”的层面,而要掌握中断源分类、优先级仲裁、向量表定位、嵌套规则以及延迟构成,这些直接决定系统的实时性与确定性。
一、中断源与中断控制器结构
RH850的中断源大致分为三类:外部中断、内部外设中断和异常。外部中断来自INTP引脚或外部中断控制器;内部外设中断来自定时器、串口、CAN、ADC、DMA等片上外设;异常则包括复位、非法指令、访问异常等。所有外设中断通常先汇聚到中断控制器(INTC),再由INTC向CPU核发出中断请求。
RH850的INTC支持多级优先级配置,每个中断源可分配0~31级优先级(具体范围依型号而定)。优先级数值越大,级别越高。当多个中断同时到达时,INTC根据优先级和通道号进行仲裁,选出最高优先级请求提交给CPU。若优先级相同,则按硬件通道号顺序决定,这一点在实时分析中非常关键,因为相同优先级的中断响应顺序并非完全由软件控制。
二、优先级机制与嵌套中断
RH850支持中断嵌套,即高优先级中断可以打断正在执行的低优先级ISR。是否允许嵌套,取决于当前PSW中的中断屏蔽位和INTC的优先级比较逻辑。通常,当CPU进入某中断后,会自动屏蔽同级及更低优先级中断,只有更高优先级请求才能再次触发中断。
嵌套中断带来两个直接后果:一是提高紧急事件的响应速度,二是增加栈深度和现场保存开销。如果嵌套层数过深,可能导致栈溢出或任务抖动。因此,在工程中需要为每个中断源分配合理优先级,并限制最大嵌套层数。例如,将电机控制PWM中断设为最高优先级,CAN接收设为中优先级,调试串口设为低优先级。
| 中断源 | 典型优先级 | 是否允许嵌套 | 实时性要求 |
|---|---|---|---|
| PWM周期中断 | 31 | 可打断低优先级 | 极高,微秒级 |
| CAN接收中断 | 20 | 可被PWM打断 | 高,毫秒级 |
| ADC转换完成 | 15 | 可被高优先级打断 | 中高 |
| 调试串口接收 | 5 | 通常不嵌套 | 低,可容忍延迟 |
三、中断向量表与响应流程
中断向量表是中断系统的“地址地图”。每个中断源对应一个向量入口,CPU收到中断后,根据中断号从向量表中取出ISR入口地址并跳转。RH850的向量表通常位于固定内存区域,也可通过寄存器重定位。向量表中不仅包含入口地址,还可能包含优先级和中断屏蔽信息。
一个典型的中断响应流程如下:外设置位中断标志,INTC锁存请求并仲裁,CPU完成当前指令后响应中断,保存PC和PSW,关闭同级中断,从向量表取入口地址,执行ISR,最后执行中断返回指令恢复现场。整个过程的时间开销就是中断延迟的主要来源。
/* RH850中断向量表片段示意 */
#pragma section ".intvec"
void (* const InterruptVector[])(void) = {
(void (*)(void))0x00000000, /* 复位 */
(void (*)(void))0x00001000, /* NMI */
(void (*)(void))0x00002000, /* INTP0 */
(void (*)(void))0x00003000, /* TAUJ0 */
(void (*)(void))0x00004000, /* CAN0 */
};
#pragma section
四、中断延迟与响应时间分析
中断延迟是指从中断事件发生到ISR第一条指令执行之间的时间。它通常由四部分组成:外设同步与标志置位时间、INTC仲裁时间、CPU完成当前指令的时间、现场保存与向量跳转时间。中断响应时间则还包括ISR本身的执行时间,直到完成关键操作。
在实时分析中,最坏情况中断延迟(WCIL)是核心指标。它取决于最长不可中断指令、当前中断屏蔽状态、INTC仲裁延迟以及总线访问等待。例如,若CPU正在执行一条长除法指令,且该指令不可中断,则中断响应必须等待其完成。因此,在硬实时场景中,应避免在中断关键路径上执行长指令,并尽量缩短ISR。
五、工程案例与复盘
某电机控制项目中,PWM中断负责电流环计算,CAN中断负责接收上位机指令。初期将CAN优先级设得过高,导致PWM中断偶尔被CAN接收打断,电流环出现抖动。复盘后发现,CAN报文虽然重要,但电流环的周期确定性更关键。调整方案是将PWM设为最高优先级,CAN降为中等优先级,并在CAN ISR中只做数据搬运,将解析工作放到任务中执行。调整后,电流环抖动消失,CAN响应仍在可接受范围内。
另一个常见问题是中断标志未清除。RH850部分外设要求“先读状态寄存器,再清标志”,若顺序错误,中断会反复触发,表现为系统频繁进入ISR,CPU占用率飙升。排查时应先确认标志清除序列,再检查INTC屏蔽位和优先级配置。
总结来看,RH850中断系统的核心在于“源—仲裁—向量—嵌套—延迟”这条链路。只有把优先级、向量表和延迟构成放在一起分析,才能设计出既满足实时性又稳定的中断架构。