英飞凌 Tricore 架构中断系统详解

本文以TC3系列MCU为例,先来了解中断源是如何产生的,再看一下CPU是如何处理中断源的。

AURIX TC3XX的中断路由模块 Interrupt Router (IR)

在TC3中,中断既可以被CPU处理,也可以被DMA处理,所以手册中不再把中断称为中断,而是称为服务,我们为了方便还是叫中断,但在后文的英文名称或简写中经常出现Service,大家当中断来理解就好。

IR模块支持1024个中断请求节点(SRN),每个节点就可以理解成一个触发中断的源,比如CAN外设、外部IO中断、软件触发的中断等。每个SRN都有一个单独的中断请求控制寄存器SRC,寄存器的定义如下文所示,这里重点关注四个:

  • TOS:中断处理类型,是由CPU处理还是由DMA处理,多核单片机还决定由哪个核来处理;
  • SRPN:中断请求优先级编号,如果该中断由CPU处理,那么这个编号将会被传递给CPU,CPU用来判断中断与当前任务的优先级孰高孰低,具体处理方式见下文。如果该中断由DMA来处理,那么这个编号表示该中断由哪个DMA通道进行处理,所以值不能大于可用的DMA通道的数量。
  • SRR & SRE:SRR是中断请求标志,当中断发生时置位,但只有当SRE=1时,中断请求才会被发送给CPU,此时CPU处理完中断请求后(注意处理完中断请求不是执行完中断处理函数,而是决定了是否接受该中断)硬件会自动清除SRR,不建议软件清除SRR。如果SRE=0,中断请求不会被发送给CPU,此时CPU可以通过轮询的方式查询SRR,看中断是否发生,如果发生了则进行处理,注意这种情况下要软件手动清除SRR。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

整个IR模块的架构图如下图所示:

在这里插入图片描述

SRPN的长度是8位,范围是0-255,但如果中断是由CPU来处理的,那么SRPN=0是没有意义的,也就是最小的有效优先级是1。对于TOS相同的中断源,SRPN最好都是唯一的,同一个中断组(中断组的定义见下文)内的SRPN可以相同,但当相同优先级的中断发生时,执行顺序不能确定。

IR模块中有7个中断控制单元ICU,分别对应6个核和DMA,对于TOS相同的中断,如果同时触发,ICU会先根据优先级进行一次仲裁,将优先级更高的传递给CPU或DMA。对于需要CPU处理的中断源,请求发送给CPU之后会形成一个待处理的中断优先级编号(PIPN),CPU把PIPN与当前的CPU优先级(CCPN)进行比较,如果CPU接受这个中断请求,则会进行处理,并将该中断请求优先级编号返回给ICU,ICU会清除该中断源的SRR位。

软件中断

任何一个中断请求节点都可以使用软件触发,直接操作SRC寄存器向SETR写入1即可,但中断源触发后没办法区分这次是由软件触发的还是由硬件触发的,所以建议软件中断和硬件中断分别使用不同的中断请求节点。此外还设置了8个GPSR,这8个中断请求节点只能由软件触发,没有关联硬件触发源,所以软件中断建议使用这8个中断请求节点。

下文我们着重看一下CPU如何处理一个中断请求,以下内容来自于Tricore内核手册。

寄存器ICU Interrupt Control Register (ICR)

内核中有一个中断控制寄存器ICR,定义如下,从PIPN的定义可以看出,Tricore的中断优先级数值越大,优先级越高。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CPU处理中断请求

CPU先检查ICR中的IE位,只有当IE = 1时CPU才能处理中断。如果IE = 1,CPU检查PIPN,如果PIPN > CCPN,CPU可以进入中断处理函数。PIPN用来决定中断处理函数在中断向量表中的位置。
以下情况会阻塞中断的处理:
① IE = 0
② CCPN ≥ PIPN
③ CPU正在进入中断或Trap
④ CPU正在执行不可打断的Trap
⑤ CPU正在执行multi-cycle instruction
⑥ CPU正在执行修改ICR寄存器的指令

总结可知,Tricore支持更高优先级的中断打断当前正在执行的中断,但如果新的中断优先级更低,CPU是直接丢弃还是在当前中断处理完成后再进行处理,没有找到具体的依据,但手册中是这样说的:以上原因会block the CPU from immediately responding to the interrupt request generated by the ICU,也就是说不能立即处理,感觉应该是条件满足的时候还是会处理。

CPU进入中断处理函数

CPU处理完中断请求,并确定要执行中断处理函数后,会执行以下操作

  • 保存上下文环境
  • ICR.IE = 0. 之前的 ICR.IE 会被保存到 PCXI.PIE
  • ICR.CCPN 被保存到 PCXI.PCPN
  • ICR.PIPN 被保存到 ICR.CCPN
  • 查找中断向量表,执行ISR的第一条指令

值得注意的是,进入中断处理函数后全局中断IE会被关闭,用户可以自行决定在中断中是否打开全局中断。

CPU退出中断处理函数

  • 上面保存的ICR.IE、ICR.CCPN、ICR.PIPN等上下文环境被恢复。

中断向量表

中断向量表存储在ROM中,是一个包含ISR入口函数地址的有序数组。当CPU收到一个中断请求的时候,CPU根据ICR.PIPN计算出一个偏移地址,再加上BIV寄存器中存储的中断向量表起始地址,得到实际中断入口函数的地址,将这个地址装入PC指针中。

BIV寄存器必须要在全局中断使能前设置好,且同一套程序中可以通过修改BIV寄存器使能不同的中断向量表。

中断向量表中每个中断所占用的地址空间大小可以设置为32字节或8字节,通过BIV寄存器中的VSS进行设置。BIV寄存器的定义如下:
在这里插入图片描述
中断入口函数起始地址的计算方式如下:
当VSS = 0的时候:ISR_Entry_PC = BIV | (PIPN<<5);
当VSS = 1的时候:ISR_Entry_PC = BIV | (PIPN<<3);

软件管理中断

上面自动查找中断向量表的方式可以理解为硬件管理中断,此外Tricore提供了一种软件管理中断的机制,即所有的中断入口函数都是同一个,进入这个函数后,再用软件分辨中断的优先级,跳转到相应的中断处理函数。这种方法会降低中断的处理效率,但可以增加中断向量表的灵活性。实现方法如下:

BIV的值设置为0xXXXXYFE0,其中X可以是有效地址范围内的任意数值,但Y必须是 1/3/5 ……单数。BIV设置为这样的值后,所有的中断就都会进到BIV所指向的地址处的函数,所以第一级中断处理函数必须放到BIV所指向的地址。一级中断处理函数中判断优先级,再跳到不同的二级中断处理函数,例子如下,其中 IfxCpu_Irq_swIntVector 可以是软件自定义的中断向量表。

IFX_INTERRUPT_INTERNAL(IfxCpu_Irq_intVecTable, 0, 255)
{Ifx_CPU_ICR icr;icr.U = __mfcr(CPU_ICR);    /*Fetch the ICR value *//*Call the ISR */IfxCpu_Irq_swIntVector[icr.B.CCPN]();
}

中断优先级组

Tricore允许将几个中断划为一组,同一组内的中断不能相互打断。具体实现方式如下:

上文我们说到,CPU处理中断的时候,会将ICR.PIPN 被保存到 ICR.CCPN,此时如果再来一个中断,就会将新的PIPN 与 CCPN(即旧的PIPN)进行比较,如果优先级更高则当前中断被打断,去处理新的中断。如果某几个中断被设置为一组,那么CPU处理中断的时候,会将该组内最高优先级的PIPN保存到ICR.CCPN,也就是说如果当前组内的其他中断再被触发了,那么新触发的PIPN也不会大于CCPN,所以当前组内的更高优先级的中断也不能打断当前正在执行的中断了。只有当新的中断的优先级大于组内最高优先级的时候,中断才会被打断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…

软件测试/测试开发丨岗位内推-58同城岗位开放~

58同城-测试工程师 岗位职责 1.参与需求分析、设计评审&#xff0c;制定测试计划&#xff0c;设计测试用例&#xff0c;搭建测试环境&#xff1b; 2.执行各级别和类型的测试&#xff0c;参与互联网测试的全流程&#xff1b; 3.借助最前沿的研发技术和理念&#xff0c;通过测…

短视频矩阵源码saas版开发---技术成品打磨

短视频矩阵源码saas版开发---技术成品打磨 企业要不要做抖音&#xff1f; 我的答案是要&#xff0c;而且要快&#xff0c;原因有以下几点&#xff1a; 1. 抖音高速增长未停&#xff0c;流量红利还未完全释放完&#xff0c;仍然有增长空间&#xff1b; 2. 抖音变现能力越来越…

《家的温暖,国庆团圆》

目录 &#x1f4d6; 引言 &#x1f4dd; 假日放假表 &#x1f365; 中秋节 &#x1f4da; 中秋节的由来 中秋节的仪式 &#x1f4da; 赏月 &#x1f4da; 吃月饼 &#x1f4da; 猜灯谜 &#x1f4da; 品茶赏花 &#x1f4da; 舞狮龙 &#x1f4da; 中秋节的感触 &am…

C++项目笔记--基于TensorRT搭建一个YoloV5服务器

目录 1--项目描述 2--项目地址 3--编译运行 4--测试结果 5--补充说明 1--项目描述 ① 基于 C/S 模型来构建 TCP 服务器和 TCP 客户端。 ② 使用 Epoll 来监控服务器和客户端之间的连接。 ③ 服务器和客户端约定使用相同的数据传输协议&#xff0c;头部分别使用 4 个字节来…

OpenCV查找和绘制轮廓:findContours和drawContours

1 任务描述&#xff1a; 绘制图中粗线矩形的2个边界&#xff0c;并找到其边界的中心线 图1 原始图像 2.函数原型 findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, …

【C++】string 之 find、rfind、replace、compare函数的学习

前言 上篇文章&#xff0c;我们学习了assign、at、append这三个函数 今天&#xff0c;我们来学习find、 函数 find函数 引入 我们都知道&#xff0c;find函数可以是string类中&#xff0c;用于查找字符或者字符串的函数 也可以是&#xff0c;<algorithm>头文件中&am…

什么是Selenium?使用Selenium进行自动化测试!

你知道什么是 Selenium 吗&#xff1f;你知道为什么要使用它吗&#xff1f;答案就在本文中&#xff0c;很高兴能够与你共飧。 自动化测试正席卷全球&#xff0c;Selenium 认证是业界最抢手的技能之一。 什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于…

96 # cookie

cookie 和 session 和 sessionStorage 和 localStorage localStorage 和 sessionStorage 本地储存&#xff08;发送请求不会携带&#xff09;&#xff0c;不能跨域localStorage 浏览器关闭后不会清空&#xff0c;必须手动清空sessionStorage 浏览器关闭后就会销毁http 无状态的…

如何使用 API 接口获取商品数据,从申请 API 接口、使用 API 接口到实际应用,一一讲解

在当今的数字化时代&#xff0c;应用程序接口&#xff08;API&#xff09;已经成为数据获取的重要通道。API 接口使得不同的应用程序能够方便地进行数据交换&#xff0c;从而促进了信息的广泛传播和利用。在众多的数据源中&#xff0c;商品数据是一个非常重要的领域&#xff0c…

postman怎么进行参数化?

一、先准备好参数化数据 &#xff08;参数化数据可以使用Excel或者txt的文件。 注意如果使用的是txt的文件&#xff0c;一定要使用英文的逗号&#xff0c;不然的话会报错&#xff01;&#xff09; 注意&#xff1a;填写好的数据后&#xff0c;保存的时候需要另存为&#xff0c…

接口自动化测试:pytest基础讲解

为什么要做接⼝测试&#xff1f; 只靠前端测试很难确保很⾼的覆盖率。接⼝测试&#xff0c;可以模拟出各种类型的⼊参&#xff0c;包括⼀些在前端模拟不出来的⼊参&#xff0c;还能根据接⼝⽂档的定义&#xff0c;设计出相对完善的⼊参值&#xff0c;在接⼝层保证质量&#xff…

燃尽图是什么?如何用它提升敏捷项目流程?

**敏捷项目管理**的核心是透明度和持续改进。燃尽图是轻松实现这两点的秘密武器。这种动态的可视化工具能有效地说明团队在一段时间内的进展情况&#xff0c;突出显示剩余的工作&#xff0c;并揭示你的团队是否在实现目标的正轨上。 敏捷项目管理中的燃尽图 燃尽图是敏捷项目…

mac怎么把两张图片拼在一起

mac怎么把两张图片拼在一起&#xff1f;在如今的生活中&#xff0c;喜欢摄影的朋友们越来越多。拍照已经成为我们的一种习惯&#xff0c;因为当我们遇到美景或迷人的人物时&#xff0c;总是忍不住按下快门&#xff0c;将它们定格。随着时间的推移&#xff0c;我们渐渐发现自己的…

【SQL】统一训练平台数据库实践--20230927

储存过程vlookup_peopledata_csodtraining 默认导出用今天批次的数据进行join on&#xff0c;先删除过渡表的资料&#xff0c;再将查询结果放在过渡表中。 BEGINDECLARE startdate varchar(50);SET startdate date_format(NOW(),%Y%m%d);DELETE FROM season.csod_data2;INSE…

项目04-基于Docker的Prometheus+Grafana+AlertManager的飞书监控报警平台

文章目录 一.项目介绍1.流程图2.拓扑图3.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署docker 2 部署nginx、MySQL以及cadvisor、exporter节点2.1 在nginx节点服务器上面配置nginx、node_exporte…

可以动态改变刻度背景色的车速仪表盘

最近做的项目的主页面需要用到一个仪表盘来动态显示车速&#xff0c;同时改变对应的背景色 仪表盘 开始是想着使用echarts&#xff0c;修修改改拿来用&#xff0c;但是人家客户有规定&#xff0c;必须搞个差不多的&#xff0c;那没办法&#xff0c;自 己动手搞个吧 截图如下&am…

如何快速重置模型原点

1、什么是模型原点&#xff1f; 模型原点是三维建模中的概念&#xff0c;它是指在一个虚拟三维空间中确定的参考点。模型原点通常位于模型的几何中心或基本组件的中心位置。如图所示&#xff1a; 可以看到模型的原点在模型的几何中心 2、模型原点的作用 知道了什么是模型原点&…

MR混合现实在军事课堂教学中的应用演示

战场模拟&#xff1a;利用MR技术可以创建逼真的战场模拟环境&#xff0c;将学生置身于真实的战场场景中&#xff0c;可以体验和学习各种作战技巧和战术策略。学生可以通过佩戴MR头盔或眼镜&#xff0c;观察虚拟的场景&#xff0c;并与虚拟对象进行互动&#xff0c;如操作武器、…

人员重识别:Person Re-Identification without Identification via Event Anonymization

论文作者&#xff1a;Shafiq Ahmad,Pietro Morerio,Alessio Del Bue 作者单位&#xff1a;Istituto Italino di Tecnologia;Universita degli Studi di Genova 论文链接&#xff1a;http://arxiv.org/abs/2308.04402v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;…