ZYNQ中断系统

Zynq 芯片的PS 部分是基于使用双核 Cortex-A9 处理器和 GIC pl390 中断控制器的 ARM 架构。中断结构与 CPU 紧密链接,并接受来自 I/O 外设(IOP)和可编程逻辑(PL)的中断。中断控制器架构如下图所示:

在这里插入图片描述

中断控制器架构图

从图中可以看到,CPU 接收的中断来源有三种,分别是私有外设中断(private peripheral interrupts,PPI)、软件生成的中断(software generated interrupts,SGI)和共享外设中断(shared peripheral interrupts、SPI)。

每个 CPU 都有一组私有外设中断,使用存储寄存器进行私有访问。PPI 包括全局定时器、专用看门狗定时器(AWDT)、专用定时器和来自PL 的FIQ/IRQ。软件生成的中断通过SGI 分配(派)器分配给一个或两个CPU。共享外设中断由PS 和PL 中的各种I/O 和存储控制器生成。它们被路由到任一个或两个CPU,来自 PS 外设的SPI 中断也可以路由到 PL。下面我们从下图的系统级中断环境来进一步了解中断。

在这里插入图片描述

系统级中断环境

首先我们来看通用中断控制器。通用中断控制器是一个用于集中管理从 PS 和 PL 发送到 CPU 的中断,启用、禁用、屏蔽和优先化中断源的处理中心,将具有最高优先级的中断源分配给各个 CPU 之前集中所有中断源,并在 CPU 接口接受下一个中断时以编程方式将它们发送到选定的CPU(the selected CPU or CPUs)。此外,控制器还支持用于实现安全感知系统的安全扩展。该控制器基于非矢量化的 ARM 通用中断控制器架构版本 1.0(GIC v1)。GIC 寄存器通过 CPU 私有总线访问,以避免临时阻塞或互连中的瓶颈,从而实现快速读/写响应。GIC 确保针对多个CPU 的中断一次只能由一个CPU 占用。所有中断源都由唯一的中断 ID 号标识,对应有它自己的可配置优先级和目标CPU 列表。

接下来我们依次来看软件生成中断、CPU 私有外设中断和共享外设中断。

每个CPU 都可以使用软件生成的中断中断自身、另一个CPU 或同时中断两个CPU。有16 个软件生成中断,具体见下表。向软件产生的中断寄存器(Software Generated Interrupts Register,ICDSGIR)写入SGI 中断编号并指定目标CPU(或两个CPU),就产生了一个 SGI。该写操作通过CPU 自己的专用(私有)总线进行。每个 CPU 都有自己的一组 SGI 寄存器,用于生成 16 个软件生成的中断中的一个或多个。中断的清除是通过读取中断确认寄存器(Interrupt Acknowledge Register,ICCIAR)或向中断挂起清除寄存器(Interrupt Clear-Pending Register,ICDICPR)对应的位写入“1”来实现的。

所有的 SGI 都是边缘触发的,且其敏感性类型是固定的,不能修改。只读的 ICDICFR0 寄存器指定了所有 16 个SGI 的灵敏度类型。

软件生成中断 (SGI)

在这里插入图片描述
每个CPU 核连接到了一个有五个外设中断的私有组上,这五个外设中断见下表。PPI 的敏感类型是固定的,不能改变。需要注意的是:来自 PL 的快速中断(FIQ)信号和中断(IRQ)信号在发送给中断控制器之前,会在传输给 PS 的时候被反转。因此,这些信号因此在 PL 内低电平有效,在 PS-PL 接口处高电平有效。

私有外设中断 (PPI)

在这里插入图片描述
来自各种模块的大约60 个中断的组可以被路由到PL 或CPU 中的一个或两个,这60 个中断见下表。那些目标为 CPU 的中断的优先级和中断的接收情况是由中断控制器管理的。除 IRQ#61 至#68 和#84 至#91 外,所有中断灵敏度类型均由请求源固定,无法更改。必须对GIC 进行编程以适应这种情况。Boot ROM不编程这些寄存器。因此,SDK 设备驱动程序必须对GIC 进行编程以适应这些敏感类型。

对于电平敏感类型的中断,请求源必须为中断处理程序提供一种机制,以便在确认中断后清除中断。此要求适用于具有高电平敏感类型的任何 IRQF2P [n](来自 PL)。对于上升沿敏感的中断,请求源必须提供足够宽的脉冲以便 GIC 捕获。这通常至少为 2 个 CPU_2x3x 周期。此要求适用于具有上升沿灵敏度类型的任何 IRQF2P [n](来自PL)。

PS 和 PL 共享外设中断(SPI)

在这里插入图片描述
了解了软件生成中断 SGI、CPU 私有外设中断 PPI 和共享外设中断 SPI 后,我们来看下中断优先级定序。

所有的中断请求,无论是 PPI、SGI 还是 SPI,都分配了一个唯一的 ID 编号,以用于中断控制器的仲裁。中断分派(配)器保存每个CPU 的中断挂起列表,并从中选择优先级最高的中断,然后把它发送到CPU接口。如果具有相同优先级的两个中断同时到达,具有最低中断 ID 的会首先被发送。

每个 CPU 都存在着优先级定序逻辑,所以对最高优先级中断的选择是每个 CPU 各自进行的。中断分配器具有中断、处理器和活跃信息的中央列表,并负责触发CPU 的软件中断。为了给每个处理器提供单独的副本,SGI 和 PPI 分派器寄存器是分组的。硬件确保针对多个 CPU 的中断同一时间只能被一个 CPU 获取。

在发送挂起的最高优先级的中断给CPU 接口后,中断分配器会从该CPU 收到中断已被确认的消息,这样它就可以改变对应的中断的状态。只有确认中断的 CPU 才能结束该中断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值