英飞凌TC3xx_IR

2023-10-19 13:40
文章标签 ir 英飞凌 tc3xx

本文主要是介绍英飞凌TC3xx_IR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.功能概述

2.具体功能描述

2.1 SRN_SRC

2.2 ICU(Interrupt Control Unit)

2.3 GPSR

2.4 仲裁机制

2.5 CPU对于中断请求操作

2.6 中断向量表

3.代码解析


1.功能概述

        IR(Interrupt Router)将外部、内部和软件触发的中断分配给CPU或者DMA;在英飞凌中,中断触发方叫做Service requests,CPU和DMA叫做Service Provide;

        每一个中断都和一个特定的服务请求节点(Serivice Request Node\SRN)关联,这与ARM、瑞萨自研的核有一些不同。

        中断请求与SRN关联,每个SRN可以通过ICU将路由给CPU或者DMA;

        根据芯片手册,TC3xx支持1024个中断请求,优先级0-255,数字越大优先级越高;详细细节具体如下:

         除了SRN之外,每个CPU有8个通用服务请求(Genearl Purpose Service Requests)(GPSR),可以用作软件中断(不分配给外围设备或外部中断),使用SRB(Service Request Broadcast registers)可以将软中断同时路由给多个Service Providers。

        SRN包含一个SRC(Service Request Control Register),用于配置中断请求:优先级,分发给某个CPU或者DMA;每个SRN都和所有ICU关联,ICU会处理中断优先级仲裁。

2.具体功能描述

2.1 SRN_SRC

        本节,我们主要讨论SRN最关键的寄存器SRC。每个SRC的格式都相同,如下:

SRPN -- Service Request Priority Number,相同service provider中该请求的优先级,0--FF

SRE -- Service Request Enable

TOS -- Type of service,将该服务请求路由给目标provider,000 -- 111分别对应 CPU0\DMA\CPU1\2\3\4\5

        从芯片手册可以看到,SRC共有1024个,对应1024个中断源配置, 意味着我们在配置中断时,首先需要找到的就是对应SRC,例如现想配置CAN0的一个发送中断,那么对应的SRC如下:

 

         那么就要对该寄存器进行配置,代码如下:

SRC_CAN_CAN0_INT0.SRPN = 10; //该请求的优先级
SRC_CAN_CAN0_INT0.TOS = 0;//路由给CPU0处理

2.2 ICU(Interrupt Control Unit)

        每个service provider都对应一个ICU模块。ICU主要作用为

  •  对路由到相同provider的中断请求进行仲裁,并将竞争胜利的中断请求发给provider
  • 接收provider的中断请求接收信号
  • 检查中断请求的ECC
  • 路由完整性错误给SMU
  • 管理已知中断请求的清理

每个ICU比较核心寄存器如下:

只读:LWSR(Lastest Winning Service Request)和LASR(Last Acknowledged service request)

读写:ECR

LWSR:上次仲裁胜者请求的信息,提供给provider 

LASR:被provider确认的最近一个中断请求

 ECR:Error Capture Register

2.3 GPSR

        GPSR仅用于软件中断,因为他们没有和任何硬件中断触发事件挂钩,其内部结构如下:

        其用法是通过给SPB(Service Request Boradcast)写入1到对应位,可以同时将中断请求分发给SRC_GPSR,然后配置GPSR.TOS就可以实现将软中断路由给不同provider。

2.4 仲裁机制

        

         ICU通过SPRN来决定并发的中断请求优先级,然后将胜者作为PIPN(Pending Interrupt Priority Number)和触发源一同发给CPU或者DMA,CPU拿到后通过和CCPN(Current CPU Priority Number)比较,最终决定接收优先级高的中断请求,CPU把接收的中断信息返回给ICU,ICU清除请求中断源

2.5 CPU对于中断请求操作

         CPU通过ICU interrupt Control Register(ICR)来控制中断请求,其结构如下:

        当CPU接收中断请求后,需要如下动作:

  • 保存当前task的上文;
  • 将当前PC保存到A[11](return address)
  • 如果当前处理器之前没有使用中断栈(PSW.IS = 0),A[10](SP)指向ISP(Interrupt stack pointer),然后设置PSW.IS = 1
  • 此时I.O模式切换到supervisor模式
  • 清除当前调用深度:
  • 关闭全局中断 ICR.IE = 0
  • 将ICR.CCPN保存至PCXI.PCPN,将ICR.PIPN保存至ICR.CCPN
  • 访问ISR的中断向量表

        当完成中断处理时,硬件自动恢复上下文,PCXI.PCPN写入ICR.CCPN,PCXI.PIR写入ICR.IE

2.6 中断向量表

         中断向量表是由多个ISR入口点组成的一个数组,存放在内存中;

        当CPU接收中断后,会根据ICP.PIPN计算当前中断的地址,该地址会加载至PC;CPU从该地址开始执行指令,根据中断函数的代码量,确定是跳转到内存其他位置还是就在表中进行处理。

        BIV(Base of interrupt vector table)存储这中断向量表的基地址,中断向量按照优先级顺序排布,在使能中断时,使用MTCR指令可以修改BIV;因此可以通过修改BIV来管理多个中断向量表;

        中断函数地址计算如下: 

3.代码解析

         中断entry地址存放在一个数组中,其软件写法有如下几种模式:

  1. void (*isr_pointer_arr[256])(void)
  2. void (**isr)(void) = isr_pointer_arr
  3. void irqInstall(long int SRNprio, long int addr){*isr_pointer_arr[SRNprio] = addr}
  4. isr [__mfcr(ICR&0xFF)]{} 
  5. IFX_INTERRUPT(GPT12_T4_Int0_Handler, 0, ISR_PRIORITY_GPT12_T4_INT)

这篇关于英飞凌TC3xx_IR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

LLVM IR指令VM混淆分析

未混淆编译  编写一个最简单的测试代码,对 test_add函数用于对两个数相加: int __attribute((__annotate__("vm"))) test_add(int a, int b) {int c = a + b;return c;}int main(void) {int c = test_add(1, 2);return c;} 编译成中间代码:  未加

新路程------英飞凌imx6的lvds驱动

最近拿到一块开发版,打算在lvds上做些小修改,之前也接触过一点驱动,但是现在的驱动框架看起来和之前的有点差异。 关于lcd的参数信息请参考这篇文章 http://blog.csdn.net/longxiaowu/article/details/24319933  lvds的驱动在framebuffer驱动之下,也就是上层应用只知道有个framebuffer设备也就是dev/fb,而至于下

WiFi/BLE芯片(1):英飞凌

前言: 大部分客户很少直接接触到WiFi/Bluetooth的芯片,一般是直接封装到了模块中,隔了一层。具体到芯片而言,WiFi/BLE芯片,芯片厂家有:Qualcomm高通、broadcom博通、Infineon英飞凌、Nordic诺迪科、Espressof乐鑫等。而英飞凌这块产品也是很丰富的,低功耗、距离等性能指标方面做的不错。 英飞凌AIROC蓝牙芯片RoadMap:

TC3xx A\B SWAP机制的小细节(2)

目录 1.引入 2.TC3xx Swap机制小细节 3.小结 1.引入 上文TC3xx A\B SWAP机制的小细节(1)-CSDN博客主要把OTA的概念,以及MCU的硬件A\B Swap机制做了简单介绍,下面我们来聊聊TC3xx的SWAP机制 2.TC3xx Swap机制小细节 英飞凌TC3xx提供了硬件SOTA机制,它可以实现代码在一个Flash Bank读取并运行,同时

关于物联网安全 NXP、ST、英飞凌等大佬怎么说?

2016年度慕尼黑电子展CEO论坛邀请了多家欧洲半导体大厂的执行长,共同讨论如何确保物联网安全性的话题…   每年德国慕尼黑电子展(Electronica)都会举行的CEO论坛,从两年前就持续谈同一个主题:物联网(IoT),但是今年终于尝试阐明如何确保其安全性。   论坛主持人Kilian Reichert在开场时指出,不久前曾发生一场全球性的分布式阻断服务(distributed denia

IR NEC协议

1. 基本介绍: 红外遥控通常是由发送端和接收端两个部分组成。发送端将要发送的二进制信号编码成一系列的脉冲信号,然后通过红外发射管发射红外信号。接收端完成对红外信号的接收,放大,整形,并解调出遥控编码脉冲。这个过程如下:   2. NEC协议 NEC协议实际上是由NEC开发的NEC红外协议,一些电视厂商包括Skyworth、TCL、Konka都会使用这种协议用在TV的遥控器上。 2.1.

AURIX TC3xx单片机介绍-启动过程介绍1

从各个域控制器硬件解决方案来看,MPU可能来自多个供应商,有瑞萨,有NXP等,但对于MCU来说,基本都采用英飞凌TC3xx。 今天我们就来看一下TC3xx的启动过程,主要包含如下内容: uC上电过程中,会经过一个上电时序,从复位状态“脱离”出来;Boot Firmware是复位后第一个执行的指令时序,该固件会进行一些基本的硬件初始化,之后执行权限会交给用户启动软件;用户启动软件会根据特殊应

Cache基本原理--以TC3xx为例(2)

目录 1.概述 2. Cache映射模式 3.DCache的数据一致性  4.小结 1.概述 上一篇Cache基本原理--以TC3xx为例(1)-CSDN博客,我们聊了Cache基本概念,接下来我们将继续聊Cache映射模式,DCache的数据一致性问题。 2. Cache映射模式 常见的Cache地址映射模式包括直接映射、组相联和全相联。 直接映射(Direct Map

【TC3xx芯片】TC3xx芯片时钟监控

目录 前言 正文 1.时钟监控概念 1.1 时钟监控原理 1.2时钟监控配置寄存器