探秘: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,它在接受到请求后采用转发的方式,将具体工作交给专业人士去做. 参与角 ...
随机推荐
- 【Java并发编程】Synchronized关键字实现原理
想必在面试中经常会被问到Synchronized关键字,它有什么特性,原理什么 它的主要特性是同步锁.非公平锁.阻塞锁.可以保证线程安全(可见性.原子性.有序性) JDK1.6之后对Synchroni ...
- [学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用
使用Docker容器方案可以快速安全地将项目部署到客户的服务器上,作为公司项目,需要解决两个问题: 1. 需要搭建一个私有的Docker仓库,以便安全的存储镜像 2. 需要一套自动化发布方案,实现代 ...
- Java-SpringBoot-使用多态给项目解耦
Java-SpringBoot-使用多态给项目解耦 提及 今天在打算维护一下智慧社区这个项目的时候,想到项目是使用Satoken这个开箱即用的授权和认证的组件,因为在项目开启的时候对SpringSec ...
- Android Jetpack Navigation基本使用
Android Jetpack Navigation基本使用 本篇主要介绍一下 Android Jetpack 组件 Navigation 导航组件的 基本使用 当看到 Navigation单词的时候 ...
- 在 Pisa-Proxy 中,如何利用 Rust 实现 MySQL 代理
一.前言 背景 在 Database Mesh 中,Pisanix 是一套以数据库为中心的治理框架,为用户提供了诸多治理能力,例如:数据库流量治理,SQL 防火墙,负载均衡和审计等.在 Pisanix ...
- Skywalking光会用可不行,必须的源码分析分析 - Skywalking Agent &插件解析
3 Skywalking源码导入 接上文,已经学习了Skywalking的应用,接下来我们将剖析Skywalking源码,深度学习Skywalking Agent. 3.1 源码环境搭建 当前最新版本 ...
- SAP Word97 Intergration
*&---------------------------------------------------------------------* *& Report SAPRDEMOW ...
- Kali信息收集
前言 渗透测试最重要的阶段之一就是信息收集,需要收集关于目标主机的基本细腻些.渗透测试人员得到的信息越多,渗透测试成功的概率也就越高. 一.枚举服务 1.1 DNS枚举工具DNSenum DNSenu ...
- VisionPro · C# · 加密狗检查程序
写VisionPro C#项目时,我们需要在程序的启动时加载各种配置文件,以及检查软件授权,以下代码即检查康耐视加密狗在线状态,如查无加密狗,关闭程序启动进程并抛出异常. 1 using System ...
- Unity-A-Star寻路算法
最短路径 将地图存成二维数组,通过行列查找: 每一步都查找周围四个方向,或者八方向的所有点,放入开表: 是否边缘 是否障碍 是否已经在确定的路线中 计算每个方向上路径消耗,一般斜着走消耗小,收益大: ...