探秘:TriCore处理器中断机制
1. TriCore与中断的简介
TriCore是德国英飞凌科技公司旗下的第一个为实时嵌入式系统而优化的统一的、32位的微控制器-DSP(Digital Signal Processing)处理器架构。TriCore的ISA(Instruction Set Architecture),即指令集体系结构,将微控制器的实时能力、DSP的计算能力以及RISC(Reduced Instruction Set Computing)负载 / 存储体系结构的高性能 / 价格特性,结合在了一个紧凑的可重编程核心中。
中断(Interrupt),指在计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行的过程。中断存在于计算机世界的各个角落,几乎所有的工作都离不开中断,可以说中断驱动了整个计算机系统。
2. TriCore处理器中断机制
2.1.TriCore中断系统介绍
TriCore中断系统支持多个中断源(如外设或外部输入源)通过向CPU生成中断信号以请求服务。中断系统还支持处理中断请求的附加单元的实现,例如第二CPU、标准DMA(Direct Memory Access)单元或PCP(Peripheral Control Processor)。
在本文中,这些附加单元被称为“服务提供者”,而中断请求被称为“服务请求”。除了主CPU外,一个服务请求节点SRN(Service Request Node)还可以选择3个“服务提供者”中的其中一个来提供服务。在一个给定的设备中实现的附加服务提供者的实际数量取决于实现数量。
来自各个模块的每个独立的中断或服务请求都会连接到一个服务请求节点,每个服务请求节点,都包含一个服务请求控制寄存器SRC(Request Control Register)。中断仲裁总线连接SRN与服务提供商的中断控制单元。
典型TriCore中断系统图如图1所示。

图 1 典型TriCore中断系统框图
2.2.TriCore中断系统重要组成部分介绍
2.2.1 SRN(Service Request Node)
每个服务请求节点SRN都包含一个服务请求控制寄存器SRC,以及与请求源模块和中断仲裁总线进行通信的必要逻辑。外设模块或其他模块可以有几个服务请求线,每个请求线都连接到相对应的SRN。
为了支持RTOS(Real-Time Operation System)代码中断的软件发布,TriCore架构定义了特殊的四个没有连接到外设或芯片上的任何其他模块上的CPU服务请求节点,这些SRN的中断请求位只能由软件来设置。
2.2.2 ICU(Interrupt Control Unit)
中断控制单元ICU负责管理中断系统,并仲裁传入的中断请求,以找到优先级最高的中断请求,并确定是否将该中断请求传递给“服务提供者”。中断控制单元的数量取决于在TriCore中实现的服务提供者的数量。每个ICU控制其相关的中断仲裁总线,并管理与其“服务提供者”的通信。
2.2.3 中断向量表(Interrupt Vector Table)
中断向量表IVT是一个包含中断服务例程ISR(Interrupt Service Routine)入口地址的数组。中断向量表存储在代码内存中。CPU接受中断时后,首先会在中断向量表中计算与中断优先级(ICR.PIPN位字段, ICR: Interrupt Control Register, 中断控制寄存器;PIPN: Pending Interrupt Priority Number)对应的地址。计算完成后的地址将会加载到程序计数器中,CPU随即开始执行相应指令。
中断向量表的基础寄存器BIV(Base of Interrupt Vector Table Register)存储中断向量表的基本地址。中断向量随着中断优先级的增加而增加。在中断启用前,可以在系统的初始化阶段中使用MTCR(Move To Condition Register)指令修改BIV寄存器。完成这项设置,即可拥有多个中断向量表,并通过改变BIV寄存器的内容在它们之间进行切换。
当中断产生时,CPU会从PIPN和BIV寄存器的内容中计算适当的中断服务例程作为入口点。如下图2所示,中断向量入口地址为 = 基地址(BIV)+ 中断优先级(PIPN)<< 5,中断服务例程从该地址开始执行。

图2 中断向量表入口地址计算
2.3.TriCore中断处理流程
TriCore中的中断是由ICU来控制的,当外设或软件模块向CPU请求中断后,该请求对应的中断优先级会先经过仲裁,然后被推至ICR.PIPN中。在完成中断向量(Interrupt Vector)入口地址的计算后,CPU跳转至改地址并开始执行ISR(中断服务例程)函数。
3. SkyEye——TriCore中断仿真模型
由迪捷软件自主研发的SkyEye全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,用户可以利用拖拽的方式快速搭建任意的虚拟硬件平台,保证虚拟嵌入式系统的可靠性和实时性,进行嵌入式软件的开发和调试。SkyEye目前支持主流的嵌入式硬件平台,可以运行主流的操作系统,还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,SkyEye可以使虚拟处理器在典型的桌面计算机上的运行速度达到2000MIPS以上。其对标产品为美国风河公司的Simics。
SkyEye 实时仿真软件实现了TriCore 中断相关BIV寄存器和ICR寄存器的数据结构的仿真,并实现了这些寄存器每一位的功能逻辑。同时,SkyEye也仿真了ICU中断控制单元与SRN节点,可执行与真实TriCore硬件中完全一致的中断处理流程。
下图3为中断源为系统定时器STM(System Timer)的中断模型仿真图。

引用:
英飞凌官方TriCore参考手册 tc1_6__architecture_vol1.pdf
原文链接:https://blog.csdn.net/digi2020/article/details/123269862
探秘:TriCore处理器中断机制的更多相关文章
- Java并发编程之多线程
线程 进程/线程/协程/管程 进程:操作系统会以进程为单位,分配系统资源(CPU时间片.内存等资源),是资源分配的最小单位 进程间通信(IPC): 管道(Pipe) 命名管道(FIFO) 消息队列(M ...
- 探秘Tomcat——启动篇
tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Conne ...
- linux0.11下的中断机制分析
http://orbt.blog.163.com/ 异常就是控制流中的突变,用来响应处理器状态中的某些变化.当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用, ...
- elf 文件格式探秘——程序运行背后的故事
摘要:本文主要讲解elf文件格式,通过readelf命令结合底层的相关数据结构,讲解相关内容,分析程序运行的基本原理. 本文来源:elf 文件格式探秘——程序运行背后的故事 http://blog.c ...
- 第6章 MSI和MSI-X中断机制
在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制.而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持IN ...
- 6.3 x86处理器如何处理MSI-X中断请求
PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据.只是MSI-X中断机制为了支持更多的中断 ...
- 6.2 PowerPC处理器如何处理MSI中断请求
PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求.其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的Powe ...
- 1.4 PCI总线的中断机制
PCI总线使用INTA#.INTB#.INTC#和INTD#信号向处理器发出中断请求.这些中断请求信号为低电平有效,并与处理器的中断控制器连接.在PCI体系结构中,这些中断信号属于边带信号(Sideb ...
- SpringMvc请求处理流程与源码探秘
流程梳理 dispatcherServlet作为前端控制器的主要作用就是接受请求与处理响应. 不过它不是传统意义上的servlet,它在接受到请求后采用转发的方式,将具体工作交给专业人士去做. 参与角 ...
随机推荐
- CabloyJS - GitHub Readme
简体中文 | English CabloyJS CabloyJS是一款顶级NodeJS全栈业务开发框架, 基于KoaJS + EggJS + VueJS + Framework7 文档 官网 & ...
- 【物联网天线选择攻略】2.4GHz 频段增益天线模块设备选择
天线模块设备(antenna)是一种能量变换器,它把传输线上传播的导行波,变换成在无界媒介中传播的电磁波,或者进行相反的变换.对于设计一个应用于射频系统中的小功率.短距离的2.4GHz无线收发设备, ...
- 常用排序算法(一)-java实现
排序算法总结 1.十大经典算法及性能 2.具体排序算法 1.冒泡排序 循环过程中比较相邻两个数大小,通过交换正确排位,循环整个数组即可完成排序 图片演示 代码实现Java //冒泡排序 public ...
- 前端学习 linux —— 第一篇
前端学习 linux - 第一篇 本文主要介绍"linux 发行版本"."cpu 架构"."Linux 目录结构"."vi 和 v ...
- JS:undefined number
undefined数据类型:未定义属性 undefined 表示不含值 <script> var t1=""; var t2; if (t1===undefined) ...
- 『忘了再学』Shell流程控制 — 36、for循环介绍
目录 1.for循环介绍 2.示例 语法一举例: 语法二举例: 3.for循环总结 4.练习:批量解压缩脚本 方式一:批量解压缩 方式二:批量解压缩 1.for循环介绍 for循环是固定循环,也就是在 ...
- LeetCode. 812. 最大三角形面积
812. 最大三角形面积 鞋带公式 鞋带公式,用于计算任意多边形的面积,可用于计算三角形的面积 已知 ΔABC 三个顶点的坐标 A:(x1,y1). B:(x2,y2). C:(x3,y3) 对应的矩 ...
- (零)机器学习入门与经典算法之numpy的基本操作
1.根据索引来获取元素* 创建一个索引列表ind,用来装载索引,当numpy数据是一维数据时:一个索引对应的是一个元素具体的例子如下: import numpy as np # 数据是一维数据时:索引 ...
- Tomcat7下使用Log4j接管catalina.out日志文件
Tomcat7下使用Log4j接管catalina.out日志文件 摘要 Tomcat7下使用Log4j接管catalina.out日志文件生成方式,按天存放,解决catalina.out日志文 ...
- 千万小心,99%的Java程序员会踩这些坑
前言 作为Java程序员的你,不知道有没有踩过一些基础知识的坑. 有时候,某个bug查了半天,最后发现竟然是一个低级错误. 有时候,某些代码,这一批数据功能正常,但换了一批数据就出现异常了. 有时候, ...