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

这篇具有很好参考价值的文章主要介绍了英飞凌 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。

tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断

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

tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断

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的中断优先级数值越大,优先级越高。
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断

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寄存器的定义如下:
tc334中断,嵌入式,英飞凌,tricore,AURIX,TC3XX,中断
中断入口函数起始地址的计算方式如下:
当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,所以当前组内的更高优先级的中断也不能打断当前正在执行的中断了。只有当新的中断的优先级大于组内最高优先级的时候,中断才会被打断。文章来源地址https://www.toymoban.com/news/detail-837048.html

到了这里,关于英飞凌 Tricore 架构中断系统详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 英飞凌TC3xx系列GTM系统介绍

    英飞凌TC3xx是英飞凌AURIX 2G系列单片机,该系列单片机是32位微控制器,具有多个TriCore CPU、程序及数据存储器、总线、中断系统、DMA及功能强大的外围设备。 AURIX 2G系列按不同的需求有不同的内存及功能组合的单片机选择,全系均可满足ASIL D功能安全要求,其中功能最强大的

    2024年02月09日
    浏览(56)
  • 英飞凌TC397 BootLoader (SOTA)开发目录

    目录 欢迎大家来到TC397 BootLoader专栏,开始前我会先列出TC397 BootLoader学习大纲,同时可以作为大家学习、开发BootLoader的参考。点击下面的链接,可以传送到对应的文章下。 开始前的准备 TC397 BootLoader讲解 - 总目录 TC397 BootLoader讲解 - 准备工作 TC397 BootLoader讲解 - 资料下载 1、

    2023年04月11日
    浏览(35)
  • 英飞凌(Infineon)TC264单片机---LED

    本文介绍如何应用Infineon官方提供的免费IDE开发环境AURIX Development Studio和TC264开发板(龙邱科技提供)实现LED的闪烁。 AURIX Development Studio(下简称ADS), 是英飞凌推出在针对自家AURIX芯片的免费编译环境,软件使用无需license,长期免费。该开发环境基于业内流行的Eclipse打造而

    2024年02月03日
    浏览(53)
  • (智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

    一,程序,变量储存地址设置 二,运行核选择 概念及过程描述 尽量将不同的功能划分为各个模块,然后交给不同的cpu运行。 或者说 不同的cpu负责运行不同的功能,cpu之间以少量的参数进行配合交互 ,这样可以尽最大化利用多核cpu的资源效率。 具体做法 尽量将.h以及相关函

    2024年02月02日
    浏览(42)
  • 英飞凌TC367芯片Port口配置IN和OUT的寄存器操作

    一. 打开数据手册查看配置Port口对应的寄存器   TC367配置IN和OUT的寄存器为 PXX_IOCR0, PXX_IOCR4, PXX_IOCR8, PXX_IOCR12      这四个寄存器对应的PCx分别代表1-15pin脚的配置为输入输出   Port口输入配置的值 Port口输出配置的值   二.代码实现部分         P00_IOCR0 (*(volatile Ifx_P_IOCR0

    2024年02月07日
    浏览(41)
  • 英飞凌TC3xx--深度手撕HSM安全启动(一)--安全启动方式

            汽车MCU的信息安全在最近几年是越来越火,而信息安全最重要的一个功能就是系统的安全启动;         从嵌入式角度出发,安全启动最早应用在linux系统上,全称叫secure boot;它是一种逐级验证镜像,从而实现固件可信运行。以常见的uboot启动为例,通常要经过

    2024年02月08日
    浏览(59)
  • 英飞凌TC3xx--深度手撕HSM安全启动(二)--加密算法解析

            在第一节,我们简单描述了汽车MCU常见的安全启动,以及英飞凌和vector设计的安全启动流程。这里我们就要对启动中所使用的加密算法进行描述。         首先我们来分析在MCU中安全启动时所需要的成员: 待校验对象(通常为应用程序)的数据长度、起始地址;

    2024年02月06日
    浏览(40)
  • 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制

    无刷电机是矢量控制,是交流电机调速的核心,也是Foc控制的核心 以下内容学习自【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 以电流闭环控制为例,也就是让电机始终产生一个恒定的力矩(也就是恒定的电流,因为力矩和电流成正比) 可以看到控制器的输入是最左边

    2024年02月02日
    浏览(85)
  • 瑞萨RH850-P1X ECM和英飞凌TC3xx SMU对比

            P1X ECM(Error Control Module)收集从不同的错误源和监控电路发来的错误信号,并通过error pin(ERROROUTZ)对外输出、产生中断并发出ECM reset信号。         P1x-C系列根据产品型号不同,ECM个数也不相同,如下:         对应寄存器基地址如下:         其内部结构

    2024年02月08日
    浏览(47)
  • 英飞凌TC3xx--深度手撕HSM安全启动(五)--TC3xx HSM启动流程、通信机制分析

            在包含HSM的MCU的软件开发里,Host和Hsm应该为两个独立的软件工程。不管是Etas还是Vector的HSM包,都是需要单独收费的。         既然是单独的工程,相应的启动代码也是必须要有的。         在英飞凌的HSM固件架构里,HSM BootRom主要有以下几个作用:内部测试、生产

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包