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

2023-11-21 04:00

本文主要是介绍英飞凌 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 架构中断系统详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399672

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听