打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
RH850实践:中断入门

汽车领域使用的芯片中,中断系统已然是标配。掌握中断系统是一个工程师的基本技能。了解一个事物,最好的方式就是实践。本文,基于RH850 F1KM,聊一聊"中断"。中断系统主要包含三个部分:中断触发源、中断控制及中断处理,示意如下:

讲到中断,本质是在讨论CPU的行为,即:中断针对CPU。在没有中断系统之前,CPU按照命令时序,顺序执行。为了能让CPU处理更紧急的任务(eg:刹车任务),设计了中断,即:让正在运行的CPU停下当前任务,去处理更高优先级的任务,示意如下:

1、中断基地址及中断函数入口地址

在一个具有中断系统的芯片中,每个CPU会有一个中断向量表基地址寄存器(eg:INTBP, Base address of the interrupt handler address table)。
那么,中断向量表地址寄存器存储的地址是多少呢?答:用户自定义,即:中断向量表寄存器存储的地址,可根据芯片资源自行设定,eg:0x00000200,这个地址将成为中断向量表的基地址。注意,该地址一般需要放在PFlash内存区。知道了中断向量表入口位置,即可通过每个中断的偏移(Offset)查找到对应中断函数入口地址。
(一)CPU如何找到中断函数入口地址
如上提到:CPU会对应一个中断向量表基地址寄存器(eg:INTBP),而INTBP存放着中断向量表的基地址,同时,中断向量表存放着每个中断函数的入口地址,示意如下:

中断向量表基地址可以在链接文件中设定,也可以在头文件(eg:*.h)等位置设定。

2、中断函数注册

中断函数的处理,需要注册中断函数,即:将目标中断函数放入指定位置。具体操作:
(一)编写中断函数
中断函数需要用#pragma进行声明,示意如下:
#pragma INTERRUPT inticup2pe_DataFlashRq_handler(vect=359)void inticup2pe_DataFlashRq_handler(void){    /* do something*/}
使用#pragma声明,也可以用如下方式:
#pragma ghs interruptvoid inticup2pe_DataFlashRq_handler(void){    /* do something*/}
(二)在启动文件(*.850)中注册中断函数
  ......  .offset (IRQ_TABLE_START+0x059C)  #if (INTICUP_DATAFLASHPRQT_ENABLE > 0x00000000)    .extern _inticup2pe_DataFlashRq_handler    .word _inticup2pe_DataFlashRq_handler  #else    .word __unused_isr  #endif  ......

注意:链接文件注册中断函数时,函数前需要添加下划线"_"

3、中断触发方式及中断控制

在RH850中,中断触发方式可以是Level(eg:"1"),也可以是Edge触发(eg:上升沿、下降沿或者双边沿)。在芯片的datasheet中,每个中断源的触发方式会给出具体约束,每个中断源在中断向量表中的偏移地址、中断Channel也会给出具体约束,示意如下:

对于每个中断,中断优先级、中断触发方式等需要通过中断控制寄存器(Interrupt Control Registers)配置。

(一)中断使能

中断的使能包含两个部分:

1、中断触发源使能,即:使能对应中断源的触发能力

2、中断控制的使能,即:中断控制单元使能,使其可以接收中断源的请求,并把仲裁后的结果传递给CPU。

示意如下:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【原创】Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)
Linux中断(interrupt)子系统之二:arch相关的硬件封装层
PromQL
ARM的异常处理过程分析
IA32上Linux内核中断机制分析
学习笔记7
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服