ZYNQ PS端模块读书笔记-中断

本文详细介绍了Zynq-7000 SoC的中断系统,包括私有、共享和软件中断的分类,通用中断控制器(GIC)的功能,以及CPU中断信号的传递机制。GIC管理来自PS和PL的中断,支持优先级排序和安全扩展。每个CPU有私有的PPI中断,共享的SPI中断可配置为不同CPU。中断处理涉及中断优先级、触发和处理方式的设置。软件中断(SGI)是边沿触发且不可改变。
摘要由CSDN通过智能技术生成

在这里插入图片描述


作者:ShownSun
工作室:时沿科技


ZYNQ PS端模块读书笔记-中断

0 引言

  来源于Zynq-7000 SoC Technical Reference Manual

1 环境

  单核设备包含一个Cortex-A9处理器(CPU),双核设备包含两个。本章讨论双核配置。

1.1 私有、共享和软件中断

  每个CPU都有一组私有外围中断(PPIs),通过使用banked寄存器进行私有访问。PPIs包括全局定时器、私有看门狗定时器、私有定时器和来自PL的FIQ/IRQ。软件产生的中断(SGIs)被布线到一个或两个cpu。SGIs是由写入通用中断控制器(GIC)中的寄存器而产生。共享外围中断(SPIs)是由各种I/O和在PS与PL之间的内存控制器。来自PS外围的SPI中断也可以布线到PL。

1.2 通用中断控制器

  通用中断控制器(GIC)是用于管理来自PS和PL的中断发送到cpu。控制器启用、禁用、掩码并为中断源排序并将它们作为CPU接口,以编程的方式发送到选定的CPU(或CPU)接受下一个中断。此外,控制器支持实现安全性敏感的系统的安全扩展。

  中断分发服务器将所有中断源集中在一起,然后调度其中最高优先级的中断源到各自cpu。GIC确保一个针对多个cpu的中断只能一次被一个CPU占用。所有中断源都由唯一的中断ID号标识。所有中断源都有自己的可配置优先级和目标cpu列表。

1.3 复位和时钟

  通过向SCLR中的A9_CPU_RST_CTRL 寄存器写入参萨湖复位中断控制器。该复位信号也复位CPU私有定时器、私有看门狗定时器。一旦复位,所有中断挂起,服务被忽略。
中断控制器操作在CPU_3x2x时钟(一半的CPU频率)。

1.4 模块框图

1.5 CPU中断信号传递

  来自PL的IRQ/FIQ可以作为PPI#4和#1通过GIC布线,或者使用如图7-3所示的直通多路复用器旁路GIC。这个逻辑是为两个cpu实例化的。直通模式通过mpcore.ICCICR寄存器使能。

2 功能描述

2.1 软件产生中断

  每个CPU能够中断自身或者其他CPU或者两个CPUs使用一个SGI。通过向ICDSGIR寄存器和指定的CPUs写入SGI中断序号来产生SGI。每个CPU有它自己的SGI寄存器的设置来产生一个或者多个SGI。中断可以通过读取ICCIAR寄存器或者向ICDICPR寄存器写1来清除中断标志。

  所有的SGIs是边沿敏感的,不能被改变。ICDICFR0寄存器只读,配置所有16个SGI的敏感类型。

2.2 CPU私有外部中断

  每个CPU连接5个外围中断的一个私有设置。

  PPI的敏感类型是固定的。因此ICDICFR1寄存器只读,并且配置所有5个PPI的敏感类型。注意来自PL的快速中断FIQ信号和中断IRQ信号是反向的,然后发送到中断控制器。因此,在PS-PL接口他们是高电平激活,因此ICDICFR1寄存器设置低电平响应。

2.3 共享外部中断

  大约有60个中断被布线到一个或者多个CPU或者PL。中断控制器管理优先级和这些中断的接收。

  除了IRQ 61-68和84-91,所有的敏感类型是固定的请求源,不能被改变。SDK设备驱动编程GIC来调节这些敏感类型。

  ICDICFR2到ICDICFR5寄存器配置所有的SPIs的中断类型。每个中断类型有2个bit,配置具体的敏感类型和处理模式。

2.4 中断敏感、触发和处理

  主要有两个寄存器来设置敏感、处理和触发;
  mpcore.ICDICFR[5:0]寄存器:敏感和处理;
  mpcore.ICDICFR[23:0]寄存器:触发CPU(s);

共享外围中断SPI

  SPI中断可以针对任意数量的CPU,但是只有一个CPU处理中断。如果一个中断同时针对两个cpu,并且它们同时响应GIC,那就是MPcore确保只有一个cpu读取活动的中断ID#。另一个CPU接收假信号id# 1023中断或下一个挂起的中断,取决于时间。这消除了在中断服务程序中需要一个锁。通过ICDIPTR[23:8]寄存器来触发中断。每个SPI中断的触发边沿必须按照清单被编程。触发边沿通过ICDICFR[5:2]进行编程。

所有外围中断PPI

  每个CPU有它自己的PPI中断;触发边沿、处理和这些中断的处理不可编程。每个中断只有他自己的CPU和被CPU处理。ICDICFR[1]寄存器只读,ICDICFR[5:2]保留。

软件产生中断SGI

  SGI中断总是边沿触发,通过向ICDSGIR寄存器写入对应中断号来生成。

2.5 等待中断事件信号

3 寄存器概述

3.1 写协议锁定

  中断控制器提供了功能,对关键配置寄存器防止进行写访问。这是通过将1写入APU_CTRL[CFGSDISABLE]位来实现的。APU_CTRL寄存器是SoC的系统电平控制寄存器集的部分,SLCR。控制安全中断控制寄存器的写行为。

4 编程模板

4.1 中断优先级

  所有的中断请求(PPI、SGI和SPI)都被分配一个惟一的ID号。控制器使用要仲裁的ID号。中断分发服务器持有每个中断的挂起中断列表,然后在将它发送给CPU接口之前,选择最高优先级的中断。具有同等优先级的中断通过选择最低ID来解析。

  优先级逻辑在物理上进行了复制,以支持同时选择最高的优先级每个CPU的优先中断。中断分发服务器持有中断的中心列表,处理器和激活信息,并负责触发软件中断cpu。

  SGI和PPI分布寄存器被存入银行,为每个连接的寄存器提供单独的副本处理器。硬件确保一个针对多个CPU的中断在一个时间只能由一个CPU执行。

  中断分发服务器将最高挂起的中断传输给CPU接口。它接收返回中断已被确认的信息,然后可以更改的状态相应的中断。只有接受中断的CPU才能结束中断。

4.2 中断处理

  如果在GIC中的中断是挂起的,并且IRQ被取消断言,那么在GIC中的中断变成不活动(CPU永远不会看到它)。

  如果中断在GIC中是活动的(因为CPU接口已经确认了中断),那么软件ISR通过首先检查GIC寄存器,然后轮询I/O来确定原因外设中断状态寄存器。

4.3 ARM编程主题

  GIC寄存器接口
  分配器和CPU接口
  GIC安全扩展的影响
  PU接口寄存器
  保留和存储控制状态

4.4 遗留中断和安全扩展

  仅向可重入的IRQ处理程序发送IRQ信号,并在GIC中使用抢占特性。

  在ICCICR[AckCtl]=0时使用FIQ和IRQ,在不安全模式的情况下使用TLB表处理IRQ,并在安全模式下处理FIQ。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShownSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值