ZYNQ 中断子系统

目录

1、简述

2、SGI(Software Generated Interrupts)

3、PPI (CPU Private Peripheral Interrupts)

4、SPI(Shared Peripheral Interrupts )

5、Registers

5.1、ICC

5.2、ICD


 

1、简述

ZYNQ-7000 带双核 Cortex-A9 处理器的 7020 芯片,PS 端集成的是 GIC 中断控制器;

GIC 是通用中断控制器(Generic Interrupt Controller)的简称。GIC 的版本是 pl390,也就是 GIC 的 v1 版本;

更多 GIC 相关的请移步《ARM GIC 中断控制器

双核 A9 CPU 靠这个 GIC 来进行中断相关的调度;它的结构如下所示

图中可以看到,GIC 主要分为了三种中断:

SGIs(software generated interrupts):最大 16 个软件可产生的中断,中断号0-15;

PPIs(private peripheral interrupts):每颗 CPU 专有的 5 个私有中断,中断号27-31;

SPIs(shared peripheral interrupts):60 个共享的外设中断(包含来自 IOP 的和来自 PL),中断号32-95;

GIC 在整个中断的过程中,主要负责了中断的仲裁、分发;

GIC 支持配置中断的优先级,中断源做启用、禁用、屏蔽、配置中断的触发条件(边沿、电平),指定哪些中断发送到指定的 CPU(如果中断和多个CPU有关,SGI和PPI分发器的寄存器会为每个CPU提供独立的副本,硬件上确保中断一次只能由一个CPU执行。只有应答了中断的CPU才能中止那个中断)

GIC 由多个中断触发源连接分发器构成:

所有中断请求(PPI、SGI、SPI)都分配了唯一的ID号。控制器使用ID号执行仲裁,中断分发器有每个CPU中挂起的中断列表,它会选择中断优先级最高的中断,将其发送给CPU接口。中断优先级相同时先选择ID号小的中断。中断分发器会接收中断已被应答的信息,更改相应的中断状态。

 

2、SGI(Software Generated Interrupts)

每个 CPU 都可以用 SGI 中断本 CPU 或者其它 CPU。可以写 SGI 中断号到 ICDSGIR 寄存器中,并且指定发送的目标 CPU 来产生对应的 SGI 中断。每个CPU都有自己的一组SGI寄存器,以生成16个(共16个SGI,如下图)中的一个或多个SGI中断。

SGI 常用于多核间通讯,硬件中断号从 ID0~ID15。(SGIs 的触发条件是上升沿,不可以进行更改)

 

3、PPI (CPU Private Peripheral Interrupts)

每个 CPU 都有一组自己的私有中断,即 PPI。PPI 包括全局定时器、CPU 私有看门狗定时器、CPU 私有定时器,PL的FIQ/IRQ共五种外设。

PPI 通常会送达到指定的 CPU 上,应用场景有 CPU 本地时钟。

 

4、SPI(Shared Peripheral Interrupts )

共享的外设中断, 可以看到,有常用的 DMA、UART、Timer、IIC、SDIO 等等;

SPI 中断可以被选择绑定到一个或者两个 CPU,但是只有一个CPU处理该中断(GIC 保证)

 

5、Registers

GIC 相关的寄存器,在 UG585 文档中,全部集成在  mpcore 这个域下面,主要分为了几种类型的寄存器:ICC 和 ICD:

5.1、ICC

ICC 寄存器的全称叫:Interrupt Controller CPU,即,控制寄存器:

ICCICR:使能/禁能 CPU 的一级中断;

ICCPMR:CPU Interface 的优先级屏蔽寄存器,优先级高于这个值的中断来的时候(与具体的中断优先级比较),才有可能处理这个中断;

ICCBPR:控制优先级组的寄存器,子优先级;

 

5.2、ICD

ICD 寄存器的全称叫:Interrupt Controller Distributor,即,中断控制器分发器:

ICDDCR:分配控制寄存器,安全或者非安全控制开启或者关闭中断配置;

ICDICFR:配置寄存器,配置中断触发模式(沿触发还是电平触发),共6个寄存器,分别是 ICDICFR 0 ~ ICDICFR 5,并不是所有的都可以配置,有的是 RO 的,有的可以配置;

ICDIPR:中断优先级寄存器,共24个寄存器,ICDIPR 0 ~ ICDIPR 23,每 8 位代表一个中断的优先级配置;

ICDIPTR:CPU 接口选择寄存器,即,中断会被发送的哪个 CPU 上去,共24个寄存器,ICDIPTR 0- ICDIPTR 23,注意,并不是所有都可以配置,有的是固定和 CPU 绑定的;

ICDICER:中断屏蔽寄存器,共3个寄存器,ICDICER 0- ICDICER 2,写1表示屏蔽中断;

ICDISER:中断使能寄存器,共3个寄存器,ICDISER 0- ICDISER 2,功能和上面一个寄存器相反,写1表示使能中断;

ICDISPR:拉起中断 Pending 寄存器,共3个寄存器,ICDISPR 0- ICDISPR 2,设置 pending 寄存器,写1生效;

ICDICPR:清除中断 Pending 寄存器,共3个寄存器,ICDICPR 0- ICDICPR 2,清除 pending 寄存器,写1生效;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章