【ZYNQ】中断机制介绍

  • 中断介绍
    • GIC特点
    • RPU规范GIC特点
    • APU规范GIC特点
    • GIC代理中断控制器
  • 系统中断
  • GIC中断系统架构
  • RPU GIC中断控制器
    • 软件生成中断
    • 共享外设中断
      • 共享外设中断的灵敏度
      • 中断优先级
  • 编程
    • 产生中断
    • 确立中断请求源
    • 发送IPI通信
    • 接收IPI通信

中断介绍

  中断普遍存在于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中断

【ZYNQ】中断机制介绍(一)相关推荐

  1. 万变不离其宗之ZYNQ启动介绍

    1.概述 ZYNQ 的详细介绍参考 XILINX 官方文档 UG585,在了解了 ZYNQ 的基本架构组成和丰富的资源后,下一步便是分析他的启动流程,以便更好的认识 ZYNQ 并开始开发工作: 关于 ...

  2. 万变不离其宗之ZYNQ串口介绍

    导语 串口是我们在设计程序中最常用的接口,串口是硬件系统运行状态的忠实打印者,可以完成数据的传输.log输出等功能. 1.串口介绍 通信的两种方式:串行通信.并行通信 串行通信方式分为:同步通信.异步 ...

  3. 嵌入式开发平台Zynq芯片介绍

    Zynq发展历史 Zynq是由全球最大的可编程逻辑平台供应商,Xilinx,在2011年末发布的具有崭新架构的芯片.熟悉FPGA技术领域的朋友应该了解Xilinx在可编程逻辑界的地位.但是,从Zynq ...

  4. PCIe扫盲——中断机制介绍(MSI)

    转http://blog.chinaaet.com/justlxy/p/5100057842 前面的文章中介绍过,MSI本质上是一种Memory Write,和PCIe总线中的Message概念半毛钱 ...

  5. 中断机制及ZCU102 DMA中断实例

    本文以XIlinx ZCU102 UltraScale+ MPSoC作为实例,总结在学习嵌入式开过程中对中断系统或机制的理解. ZYNQ其中包含FPGA. Arm处理器以及与之相关的外设,是一款非常强 ...

  6. ZYNQ PL中断PS

    原文地址: http://www.cnblogs.com/milinker/p/5906004.html 本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS ...

  7. ZYNQ | 学习路线

    关注.星标公众号,直达精彩内容 来源:公众号[ZYNQ] ID   :FreeZynq 作者:李肖遥 ZYNQ是什么? ZYNQ系列是赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台. 通俗的 ...

  8. PCIe扫盲系列博文连载目录

    转载自 http://blog.chinaaet.com/justlxy PCIe扫盲系列博文连载目录篇(第一阶段) 1.前言篇:PCIe扫盲--PCIe简介:http://blog.chinaaet ...

  9. AXI总线的DMA数据高速传输

    硕士论文:AXI总线的DMA数据高速传输 1 基于AXI总线的DMA高速通道及驱动设计与实现[D] 1 绪论 1.1 背景 1.2 DMA意义 1.3 Zynq 7000介绍 1.3.1 Zynq开发 ...

最新文章

  1. Mybatis集成二级缓存与同时使用缓存与事务存在的坑
  2. layer,一个可以让你想到即可做到的javascript弹窗(层)解决方案
  3. mysql 区分大小写(大小写敏感)配置
  4. excelvba怎么设置不打开文件自动保存_自从有了这个工具,我的Office操作已经快到慢不下来了!(升级篇)...
  5. Redis学习之缓存穿透、缓存击穿和缓存雪崩详解
  6. explode php 正则,php用preg_replace和explode将li列表分割成纯文本数组
  7. 【转】SpringCloud学习
  8. ldap+ldap-account-manager+svn+apache+php做账号管理
  9. Srs之HttpApi内部调用流程
  10. 用大O记号法测量算法的效率(Algorithm efficiency Asymptotic notation Big O notation)
  11. 无法启动iis express web 服务器
  12. 常见的数值积分方法 (欧拉、中值、龙格-库塔,【常用于IMU中】)
  13. 网吧游戏更新服务器--------各种网卡参数设置
  14. 解决from Crypto.Cipher import AES报错
  15. visual studio2017登录时需要更新 microsoft edge 或当前浏览器的最新版本
  16. 面试题16:不含重复字符的最长子字符串(Java版)
  17. 浏览器主页被搜狗劫持如何处理
  18. 苹果5概念机_iPhone x Fold概念机曝光,搭配A13处理器,还支持5G,价格多少合适?...
  19. Nginx负载均衡策略 - least_conn 最少连接
  20. 代码规范及格式化工具(vscode、clang-format、git)

热门文章

  1. Redis4.0、5.0、6.0、7.0特性整理(持续更新)
  2. opengl处理图片翻转
  3. 人工智能概论知识要点(七)
  4. 十一月典型安全事件盘点
  5. python怎么保存文件视频教程_python3将视频流保存为本地视频文件
  6. 必应搜索引擎怎么了?
  7. 23种设计模式-依赖倒转原则
  8. oracle to_char 和 to_date的区别,斜杠和横杠日期转换,mybatis中入参日期,数据库字段是date的写法
  9. 【剑指offer】解题思路 53-68
  10. mysql数据库中针对结果保留小数的问题