
上图所示GIC左边的称为中断请求源,它们产生中断请求。所有的中断请求都可以发送到GIC通用中断控制器,所以它是一个集中式的中断请求中心。GIC根据请求源的属性(enables, disables, masks, and prioritizes)把请求派发给相应的中断执行者进行中断处理,一般指CPU。PL端也可以进行中断处理,这是个特例。
上图中 / 斜杠 的数字表示有多少路信号,GIC通过具体是哪条线来判断是哪个请求源产生了中断请求。
中断分发器将所有中断源集中起来,然后将优先级最高的中断源分配给各个cpu。GIC确保针对多个CPU的中断一次只能被一个CPU执行。所有中断源都由唯一的中断ID号标识。所有中断源都有自己可配置的优先级和目标cpu列表
下图是GIC中断控制器更加详细的中断源请求分配图,可以看到不同的中断类型的请求源如何进行分配的。

PL部分的中断请求,可以通过GIC也可以直通CPU,这部分如下图所示,通过寄存器 mpcore.ICCICR 选择。

共享的请求中断源,也就是说中断源发送中断后GIC可以发送给CPU0或者CPU1.


中断敏感信息说的是中断有谁处理,发送给谁,和 触发方式


所有中断请求(PPI, SGI和SPI)都被分配了一个唯一的ID号。控制器使用ID号进行仲裁。中断分发器保存每个中断的挂起中断列表
CPU,然后选择最高优先级的中断,然后将其发送到CPU接口。通过选择最低的ID来解决同等优先级的中断。
优先级逻辑在物理上是重复的,以便为每个CPU同时选择最高优先级的中断。中断分发器保存中断、处理器和激活信息的中心列表,并负责触发软件中断到cpu。
GPIO 中断

上图红色所示,MIO or EMIO的输入Input 信号是中断的触发信号。

简单可以看成5个部分
1.中断信号输入,输入来源GPIO 输入,GPIO引脚的电平状态为中断的输入信号
2.中断信号逻辑,解决的是什么样的信号满足中断条件,条件是我们通过设置三个寄存器来完成的,电平,边沿,极性。
3.中断状态,当输入的信号瞒住中断判断逻辑那么中断发生,这个事件通过一个中断状态来记录。
4.中断上报使能,中断状态是否要进行上报,在ZYNQ A9处理器架构下中断事件是先报给GIC。
5.中断上报线路,通过一条IRQ #25 上报给GIC。注意这里不是直接发给CPU。
需要注意的部分
中断事件报给的是GIC,GIC用来决定这个中断事件发给谁,这种架构在MCU中并不常见。
在Cortex M系列处理器中,中断事件经过NVIC直接报给CPU。然而Arm A9处理器并不是这样
ps7_cortexa9_0\libsrc\standalone_v6_8\src下asm_vectors.s
文件的目录会有少许不一样。
#include "xil_errata.h"
#include "bspconfig.h"
.org 0
.text
.globl _vector_table
.section

本文详细介绍了ARM处理器中的GIC(Generic Interrupt Controller)中断管理系统,包括中断请求源、中断分发、中断处理流程以及中断向量表的运作。GIC作为一个集中式中断请求中心,管理中断请求的分配、优先级和处理。在中断处理过程中,中断信号从GPIO等外设经过GIC分配给CPU,中断处理程序在IRQHandler中判断并处理具体中断事件。在Zynq A9处理器中,中断事件通过GIC而不是直接报给CPU,中断向量表分为CPU硬件跳转的中断向量表和GIC的中断向量表。文章还展示了中断配置的代码示例,包括中断连接、中断类型设置、中断启用等步骤。

2814

被折叠的 条评论
为什么被折叠?



