当前位置:   article > 正文

【ZYNQ】中断机制介绍(一)_zynq在一个中断中响应另一个中断

zynq在一个中断中响应另一个中断

中断介绍

  中断普遍存在于PS和PL的处理器内部和处理器之间,在异构处理系统中系统中断处理状态、事件、请求和错误。平台处理单元(the platform management unit,PMU)配置安全单元(configuration security unit,CSU) 有自带的控制器。PMU包含CPU和外部中断控制器。CSU中断控制器是一个由CSR ROM代码管理的封闭系统。
  实时处理单元(Real-time processing unit,RPU) 采用符合GICv1体系结构的ARM PL-390通用中断控制器。应用程序处理单元(Application Processing Unit,APU) 采用符合GICv2体系结构规范的ARM IGIC-400通用中断控制器。通用中断管理器(GIC) 管理着软件生成中断(the software-generated interrupts,SGI)每个CPU的私有外设中断(private peripheral interrupts,PPI)共享外围中断(the shared peripheral interrupts,SPI)。当处理器掉电导致RPU和APU无法处理中断时,PMU使用GIC代理中断。GIC代理中断是Xilinx架构的PMU外部中断控制器,由PMU控制。
  有148个系统中断连接着每个GIC、GIC代理中断控制器和PL结构。系统中断通常由RPU或者APU处理,PMU中的用户固件可以在RPU或APU失效的情况下处理系统中断,CSU未连接系统中断。注意:CPU处理器间中断(IPI)通道与处理器相关联,以允许异构处理系统中的其他处理器向它发送消息并接收返回的响应。IPI目标处理器接收来自另一个处理器的中断,并使用预先安排的通信协议访问消息缓冲区。IPI通道针对系统处理器:APU、RPU core0、RPU core1、PL端四个处理器通道,以及PMU的四个私有通道。注意:PMU有四个IPI中断,PMU_0中断由PMU固件分配,用于将PMU转换到休眠模式。

GIC特点

  多数GIC所具备的特点:

  • MPcore的多处理环境
  • 针对CPU cores的仲裁系统中断
  • 软件生成中断
  • 来自PL端IRQ(中断请求)/FIQ(快速中断请求)的私有外设中断
  • 共享外设中断
    需要注意的是:来自 PL 的快速中断( FIQ)信号和中断( IRQ)信号在发送给中断控制器之前,会在传输给 PS 的时候被反转。因此,这些信号因此在 PL 内低电平有效,在 PS-PL 接口处高电平有效

RPU规范GIC特点

  RPU GIC独有的特点

  • GICv1编程模型
  • 安全扩展

APU规范GIC特点

  APU GIC包含了与RPU GIC相同的大部分功能,并增加了安全与虚拟化

  • GICv2编程模型
  • 安全扩展
  • 虚拟化扩展
  • 中断组0引起IRQ或者IFQ指令
  • 中断组1使用IRQ指令
  • 统一方案处理优先级
  • 组0上某些中断支持可选寄存器锁定
  • CPU私有寄存器在AXI互连上被限制访问

GIC代理中断控制器

  GIC代理中断控制器管理着连接到GIC SPI的所有系统中断。这些系统中断设置位在GICP{0:4}_IRQ_STATUS 寄存器中。在掩码寄存器之后,每个寄存器中的位通过“或”运算组合在一起,以设置另一个状态寄存器中的位,该状态寄存器通过“或”运算组合在一起,以生成单个中断信号到PMU外部中断控制器。
  PMU以回退模式使用GIC代理中断来处理应用程序处理器无法管理的系统中断。

系统中断

  系统中断由许多系统组件产生,并通过GIC代理(GIC_IRQ寄存器)发送到GICs和PMU,并在PL中输出信号。系统中断列表见下图所示,该表列出了RPU和APU中断控制器的IRQ编号,以及GIC代理Bit分配。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  注意:

  • ARM_PMU是ARM开发的性能监视单元,与Xilinx开发的平台管理单元(PMU不同。
  • 系统看门狗定时器产生至少四个时钟周期的中断脉冲,使用x_SWDT.MODE[IRQLN]位区域进行编程,四时钟脉冲长度对于正常情况足够长。GIC中断控制器必须设置为边缘触发。
  • 用于检测的最小中断脉冲宽度是GIC的四个时钟周期。这通常是一个100MHz时钟,导致最小脉冲宽度为40ns。信号同步器可能会检测到较短的脉冲,但不能保证。应该避免故障。

GIC中断系统架构

  系统中断体系结构包括两个mpcore的GIC中断控制器,用于PMU的GIC代理中断单元,以及用于系统处理器通信的IPI中断。中断框图展示如下:
在这里插入图片描述
  从图中可以看到,共享外设中断由各种子系统产生,这些子系统包括PS中的I/O外设和PL中的逻辑。PCIE MSI由PCIE控制器处理,方法是将MSI解码成位向量,然后使能一个边沿触发中断,为了保证PCIE顺序,PCIE控制器必须在使能MSI中断之前等待之前未完成的(入栈)写操作的完成。此外,PCIE控制器必须确保MSI缓冲区(在向CPU使能中断后保存MSI信息)最终不会导致PCIE入栈流量阻塞(这会导致死锁)。

RPU GIC中断控制器

  RPU MPcore和RPU GIC之间有两个接口。

  • 分发器接口用于将中断分配给每个Cortex-R5F MPCore处理器
  • CPU接口,每个CPU接口有一组独立的4KB内存映射寄存器。这可以防止一个CPU对分配给另一个CPU的中断进行不必要的访问。
    APU MPCore处理器通过外设接口访问RPU_GIC中断控制器,如图所示:
    在这里插入图片描述

软件生成中断

  每个CPU可以使用软件生成中断(SPI)来中断自己、其他CPU或者MPCore中的两个CPU。共有16个软件生成中断。通过将SGI中断号写入PL390来生成SGI。enable_sgi_cortrol(ICDSGIR)寄存器,并指定目标CPU。通过CPU私有总线进行写操作,每个CPU都有自己的一组SGI寄存器来生成16个软件生成的中断中的一个或者多个。通过读取中断确认PL390来清除中断。control_n_int_ack_n(ICCIAR)寄存器或写入中断清除挂起PL390.enable_sqi_pendinig(ICDICPR)的相应位。
  所有的SGI都是边缘触发的,SGI的灵敏度是固定的,不能更改;控制寄存器是只读的,因为它指定了所有16个SGI的灵敏度类型。

共享外设中断

  一组来自不同模块的大约160个共享外设中断(SPI)可以被连接到一个或两个CPU或PL。中断控制器为CPU管理这些中断的优先级和接收

共享外设中断的灵敏度

  共享外设中断可以针对任意数量的CPU,但只有一个CPU处理中断。如果一个中断是针对两个CPU,并且他们同时响应GIC,MPCore确保只有一个CPU读取有效中断ID,另一个CPU接收伪中断ID(ID 1023/1022)或下一个挂起的中断,这取决于时间
  除了来自PL的中断IRQ(121-128)和IRQ(136-143)之外,所有中断敏感类型都是由请求源固定的,不能更改。GIC的程序必须适应这一点。BootROM不编写这些寄存器,因此SDK设备驱动程序必须对GIC进行编程以适应这些灵敏度类型
  对于电平敏感类型的中断,请求源必须为中断处理程序提供一种机制,以便在中断被确认好清除中断。这一要求适用于任何具有高灵敏度类型的IRQ-F2P[n](来自PL)。对于上升沿敏感的中断,请求源必须提供足够大的脉冲宽度以便GIC捕获,这通常至少需要两个CPU_2X3X周期
  每个中断的灵敏度控制都有一个2位字段,用于指定灵敏度类型和处理模式

中断优先级

  所有的SGI和SPI中断请求都被分配了一个唯一的ID号。控制器使用ID号进行仲裁。中断分发器保存每个CPU的挂起中断列表,然后将其发送到CPU接口之前选择最高优先级的中断,通过选择最低的ID来解决同等优先级的中断
  优先级逻辑在物理上是重复的,以便为每个CPU同时选择最高优先级的中断。中断分发器保存中断、处理器和激活信息的中心列表,并负责触发对CPU的软件中断。
  SGI和PPI分配器寄存器被存入分区,为每个CPU提供单独的副本。中断控制器确保一个针对多个CPU的中断在同一时间只能有一个CPU处理。
  中断分发器将最高的挂起中断发送到CPU接口。它接收到中断被确认的信息,现在可以改变相应中断的状态。只有负责中断的CPU才能结束中断。

编程

  处理器之间的通信通道必须与商定的协议和消息格式相协调。

产生中断

  为了生成中断,发送方将1写入其触发器(TRIG)寄存器中对应于目标接收方的位。它可以通过读取自己的OBS寄存器来验证是否在接收器的状态寄存器中设置了位。然而,它无法确定是否启用中断来生成IRQ中断信号。

确立中断请求源

  处理单元读取其中断状态(ISR)和掩码(IMR)寄存器,以确定导致IRQ中断的源。服务程序完成后,可以通过写入从该寄存器读取的数据来清除ISR。设置的位被清除,同时保留读取后设置的任何位,这有助于消除错过的中断。

发送IPI通信

  • 将32B请求写入相应的消息缓冲区
  • 在其中断触发寄存器的目标接收器位中写入1
  • 或者,通过读取其观察寄存器来验证是否发布了中断
  • 确定中断已通过以下步骤之一进行处理:1、轮询观察寄存器,直到状态位被清除,表明接收器已处理中断;2、从发送方接收IPI中断
    必须在发送方和接收方之间预先安排指示中断处理时间的方法。还必须预先安排消息缓冲区的格式。

接收IPI通信

  • 通过以下步骤之一准备接收消息请求:1、使用IPI掩码寄存器IMR启用发送器的中断,并通过访问GIC寄存器在处理器的中断控制器中启用中断;2、轮询状态寄存器以查找正在设置的位。
  • 当接收到中断时,可以选择将32B响应写入相应的消息缓冲区
  • 向发送方发出信号,表明中断已通过以下步骤之一进行处理:1、清除状态寄存器;2、向发送方发出IPI中断
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/892941
推荐阅读
相关标签
  

闽ICP备14008679号