英飞凌 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,所以当前组内的更高优先级的中断也不能打断当前正在执行的中断了。只有当新的中断的优先级大于组内最高优先级的时候,中断才会被打断。
相关文章:
英飞凌 Tricore 架构中断系统详解
本文以TC3系列MCU为例,先来了解中断源是如何产生的,再看一下CPU是如何处理中断源的。 AURIX TC3XX的中断路由模块 Interrupt Router (IR) 在TC3中,中断既可以被CPU处理,也可以被DMA处理,所以手册中不再把中断称为中断…...
单例模式:饿汉式
单例模式全局仅一个实例,用于获取公共的内容 头文件mglobalinfomgr.h class MGlobalInfoMgr {MGlobalInfoMgr();~MGlobalInfoMgr(); public:static MGlobalInfoMgr* GetInstance(); private:static MGlobalInfoMgr* _instance; }; 源文件mglobalinfomgr.cpp MGl…...
什么是视图
目录 一、什么是视图 二、视图的作用 三、创建视图 四、使用视图 1.使用视图查询员工信息 五、注意事项 六、补充 一、什么是视图 视图是基于查询的虚拟表,是一个逻辑表,本身并不包含数据。同真实的表一样,视图包含一系列带有名称的列…...
C++——list(2)
作者:几冬雪来 时间:2023年9月28日 内容:C——list内容讲解 目录 前言: list的const迭代器: const的iterator: const迭代器: operator->: 拷贝构造: 迭代器接口补充&…...
Django基础讲解-路由控制器和视图(Django-02)
一 路由控制器 参考链接: Django源码阅读:路由(二) - 知乎 Route路由, 是一种映射关系!路由是把客户端请求的 url路径与视图进行绑定 映射的一种关系。 这个/timer通过路由控制器最终匹配到myapp.views中的视图函数 …...
【算法题】2873. 有序三元组中的最大值 I
题目: 给你一个下标从 0 开始的整数数组 nums 。 请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。 下标三元组 (i, j, k) 的值等于 (nums[i]…...
HTML5 跨屏前端框架 Amaze UI
Amaze UI采用国际最前沿的“组件式开发”以及“移动优先”的设计理念,基于其丰富的组件,开发者可通过简单拼装即可快速构建出HTML5网页应用,上线仅半年,Amaze UI就成为了国内最流行的前端框架,目前在Github上收获Star数…...
EXCEL会计记账报表财务软件企业公司做账系统凭证自动生成报表
本系统基于VBA编程设计,具有界面简洁美观,操作方便快捷,功能完备实用的特点,系统分为基本信息、凭证处理、账簿查询、会计报表、固定资产管理、系统管理、凭证数据库七大模块,您只需要录入记账凭证,就可以自…...
Can‘t pickle <class ‘__main__.Test‘>: it‘s not the same object as __main__.Test
目录 原因1 类名重复了 案例1 变量名和类名重复 原因1 类名重复了 检查项目代码,是不是其他地方有同名类。 案例1 变量名和类名重复 转自:python3报错Cant pickle <class __main__.Test>: its not the same object as __main__.Test解决 - 知乎…...
第九章 动态规划 part14 1143. 最长公共子序列 1035. 不相交的线 53. 最大子序和
第五十六天| 第九章 动态规划 part14 1143. 最长公共子序列 1035. 不相交的线 53. 最大子序和 一、1143. 最长公共子序列 题目链接: 题目介绍: 思路: 本题和“最长重复子数组”区别在于**这里不要求是连续的了,但要有相对顺序*…...
腾讯云服务器南京地域详细介绍、测试IP和Ping值测速
腾讯云服务器南京地域怎么样?南京地域很不错,正好处于中间的位置,南方北方用户均可以选择,网络延迟更低速度更快,并且目前南京地域有活动,南京地域可用区可选南京一区、南京二区和南京三区,腾讯…...
理解CSS的层叠性和继承性
CSS的层叠性(cascading)指的是在同一元素上应用多个样式时,不同样式之间的优先级别以及如何进行组合和冲突解决的规则。具体来说,CSS采用的是“选择器优先级”规则来判断哪个样式优先级更高,如果多个样式的优先级相同&…...
OSI体系结构和TCP/IP体系结构
在第一章( 计网第一章 )的时候,曾经提到过OSI体系结构和TCP/IP体系结构,并对它们进行了简单的对比。这篇博客在其基础上进行更深层次的理解。 一.OSI体系结构: 通信子网: 计算机网络在逻辑功能上可以分为…...
侯捷 C++ STL标准库和泛型编程 —— 8 适配器
8 适配器 适配器 Adapter 只是一个小变化,比如改个接口,函数名称等等其出现在三个地方:仿函数适配器,迭代器适配器,容器适配器可以使用继承 / 复合的两种方式实现,STL中都用复合 其思想就是将该记的东西记…...
每日一题 416 分割等和子集(01背包)
题目 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] …...
U盘插上就显示让格式化是坏了吗?
U盘以其体积小巧、存储容量大、读写速度快的特点,在各种工作和个人使用场合中得到了广泛应用,因此深得用户好评。然而,在日常使用U盘的过程中,经常会遇到一些问题和挑战。今天,我将为大家详细解释U盘出现要求格式化的现…...
分布式应用程序协调服务 ZooKeeper 详解
目录 1、ZooKeeper简介 2、ZooKeeper的使用场景 3、ZooKeeper设计目的 4、ZooKeeper数据模型 5、ZooKeeper几个重要概念 5.1、ZooKeeper Session 5.2、ZooKeeper Watch 5.3、Consistency Guarantees 6、ZooKeeper的工作原理 6.1、Leader Election 6.2、Leader工作流…...
Anniversary party(树形dp 基础题)
1.题目大意 There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E. Tretyakov. In …...
Junit的常用操作
注:本篇文章讲解的是junit5 目录 Juint是什么 Juint需要导入的依赖 Juint常用注解 Junit执行顺序 参数化 断言 测试套件 Juint是什么 Juint 是 Java 的一个单元测试框架. 也是回归测试框架. 使用 Junit 能让我们快速的完成单元测试。 注意:Junit 测试也是程序…...
Elasticsearch安装并使用Postman访问
Elasticsearch,一个强大的开源搜索和分析引擎,已经在全球范围内被广泛应用于各种场景,包括网站搜索、日志分析、实时应用等。由于其强大的功能和灵活性,Elasticsearch 已经成为大数据处理的重要工具。然而,对于许多初次…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
