zynq7000中断系统

article/2025/11/8 10:13:28

7.1环境

这一章节描述了系统级的中断环境以及中断控制器功能。PS端是基于ARM架构的,并且使用了两个Cortex-A9处理器以及型号为pl390的GIC中断控制器。整个中断结构与处理器、可编程逻辑器件(PL)、从外部IO接受到的中断请求有非常紧密的联系。本章节包含了下面这些关键点:

1 私有、共享以及软件中断

2 GIC功能

3 中断优先级和中断处理

7.1.1 私有、共享以及软件中断

每个CPU拥有一组使用banked寄存器(R8~R14) 且拥有私有访问权限的 私有外部中断(PPI)。PPI的来源包含了本地timer,私有看门狗timer,私有timer,以及来自于PL的FIQ/IRQ。软件生成中断(SGIs)被发送到1个或者两个CPU,SGIs通过写通用中断控制器(GIC)的寄存器来产生,详情查看7.3章节-寄存器概述。共享外部中断(SPIs)通过PS/PL端的I/O和内存控制器来产生。SPIs只会被发送到两个CPU中的一个。来自PS端外设的SPI中断也会被发送到PL端。

7.1.2 通用中断控制器(GIC)

GIC是一个集中式的中断管理块,用来管理发送到CPU的中断。GIC以编程的方式来进行以下操作:使能、失能、屏蔽、对中断资源的优先级排序、确定中断发送到哪一个CPU。此外,GIC对于有安全需求系统的操作是支持安全扩展的。

控制器的版本为 Generic Interrupt Controller Architecture version 1.0 (GIC v1),非矢量型。

寄存器通过CPU私有总线访问,私有总线的高速读写响应是内部通过避免暂时阻塞以及其他瓶颈来实现。

在将一个最高优先级的中断发送到独立的各个CPU之前,GIC会集中所有的中断资源。GIC确保一个指定发送到多个CPU的中断同一时间只被一个CPU捕获。每一个中断源都拥有一个独特的中断号。每一个中断源都有可配置的优先级和目标CPU列表(一个中断可能被发送到多个CPU,那么此时就需要一个表来存储需要被发送到的CPU号)。

7.1.3 重置以及时钟

中断控制器通过 reset子系统 来进行重置。具体操作为写A9_CPU_RST_CTRL寄存器的PERI_RST位。同样的重置信号也会重置CPU私有timers以及私有看门狗timers(AWDT)。reset之后,所有的中断包括挂起的或者需要处理的,都将被忽略。

7.1.4 时钟示意图

共享外部中断由多个子系统产生,这些子系统包括 PS端的I/O外设以及PL端的逻辑。中断源如图7-2所示。

7.1.5 CPU中断信号传递

来自于PL的IRQ/FIQ中断可以通过GIC作为PPI中断发送,或者绕过GIC,使用传递数据选择器。传递模式通过mpcore的ICCICR寄存器使能,如表7-1所示。

7.2 功能描述

7.2.1软件中断(SGI)

使用软件中断,每个CPU可以中断自己、中断其他的CPU、或者中断多个CPU。一共有16个软件中断(Table 7-2)。一个SGI中断通过写入中断号到ICDSGIR寄存器来产生中断以及指定目标CPU,这样的写入操作通过CPU的私有总线进行。每个CPU拥有它自己的SGI寄存器组来产生一个或多达16个软件中断。通过写入ICCIAR寄存器的 corresponding 位为1 或 读取ICCIAR寄存器来清除中断。

所有的SGI中断是边沿触发的。SGI中断的触发类型是固定的且不可更改;ICDICFR0寄存器是只读寄存器,它指定了所有的16个SGI中断的触发类型。

7.2.2 CPU私有外部中断(PPI)

每个CPU连接到5个私有外部中断。PPI中断列在Table7-3中。

PPI中断的触发类型也是固定的且不可改变的;因此,ICDICFR1寄存器是只读的,它指定了这5个PPI中断的触发类型。注意:来自于PL端的FIQ中断和IRQ中断信号被反转然后发送到中断控制器,因此,即使ICDICFR1寄存器中指示他们为低电平活跃状态(也就是低电平会触发中断),他们在PS-PL的接口上仍然是高电平活跃状态。

 7.2.3共享外部中断(SPI)

来自于各个模块的大约60个中断可以发送到1个或多个CPU或PL端。GIC控制器管理这些中断的优先级和接收者。

除了 61~68号以及84~91号中断,所有的中断触发类型都是由请求源固定的且不可改变的。GIC控制器需要通过编程来适应上面的特性。boot ROM(固化在芯片内部的一段起始代码)不会编程这些寄存器;因此SDK设备驱动(uboot/kernel)必须对GIC进行编程来适应这些触发类型。

对于一个电平触发方式的中断,在中断被收到之后,请求源必须提供一种中断操作方法来清除中断。这一要求应用到所有的使用高电平触发方式的IRQF2P[n]中断。

对于一个上升沿触发方式的中断,请求源必须提供一个足够被GIC控制器捕获的脉冲宽度。通常情况下这个脉宽至少需要两个 CPU_2x3x 周期。这一要求应用到所有的使用上升沿触发方式的IRQF2P[n]中断。

ICDICFR2寄存器通过ICDICFR5寄存器配置SPI中断的中断类型,每个中断占用2bit位域,用来指定触发方式以及处理方式。

SPI中断见Table 7-4。

 7.2.4中断触发、目标、处理

 有三种进入GIC的中断:SPI,PPI,SGI(在以上章节已经介绍过)。一般情况下,中断信号包含一个触发设定,处理中断的CPU数量,中断的目标CPU。然而,大多数的中断信号的功能是固定的,其他的中断信号是部分可编程的。

有两组寄存器用来中断触发,处理,指定目标:

1 mpcore.ICDICFR[5:0]寄存器: 触发方式以及处理方式,见Figure 7-4。

2 mpcore.ICDIPTR[23:0]寄存器:指定CPU,见Figure7-5。

共享外部中断(SPI)

SPI中断可以被发送到任意数量的CPU,但却只会有一个CPU处理它。如果一个中断发送到两个CPU且这两个CPU同时回复GIC控制器,那么MPcore就会确保只有一个CPU会读到这个中断的ID号。而另外一个CPU则读到伪中断ID号--1023或者读到下一个挂起等待处理的中断的ID号,到底读到哪一个,这取决于时序。在中断服务执行时通过锁来移除一个请求。通过ICDIPTR[23:8]寄存器可以获取指定CPU的操作是否结束。每个SPI中断的触发方式必须通过编程来匹配表7-4所列出的内容。触发方式通过ICDICFR[5:2]寄存器位来编程。

私有外部中断(PPI)


每个CPU拥有自己独立的PPI中断。触发方式、处理方式、发送目标这些选项都是无法编程的,每个中断只会发送到它自己所属的CPU并且被处理。ICDICFR[1]寄存器是只读的且ICDIPTR[5:2]寄存器实际上是闲置的。

软件中断(SGI)

SGI中断总是边沿触发的并且只有当软件写中断号到ICDSGIR寄存器时中断才会产生。所有定义在ICDIPTR[23:8]寄存器位中的目标CPU必须处理掉中断来清除ICDSGIR寄存器。


http://chatgpt.dhexx.cn/article/tAO0A1sH.shtml

相关文章

【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例

UART 简介 我们在使用 PS 的时候,通常会添加 UART 控制器,用于打印信息和调试代码。除此之外,PS 在和外部设备通信时,也会经常使用串口进行通信。 UART 控制器 UART 控制器是一个全双工异步收发控制器,ZYNQ 内部包含…

Xilinx ZYNQ 7000入门

ZYNQ是Xilinx推出的新一代全可编程片上系统,将处理器的软件可编程性与FPGA的硬件可编程性完美整合。 ZYNQ7020:xc7z020clg400-2 ZYNQ7010:xc7z010clg400-1 组合了一个双核ARM Cortex-A9(PS)处理器和一个传统的…

ZYNQ7000平台介绍

基于ZYNQ7000平台软件开发 ZYNQ7000平台简介 本文介绍ZYNQ7000平台采用Avnet推出的ZedBoard开发板进行讲解,ZedBoard开发板基于Xilinx Zynq-7000 All Programmable Soc,整合了双核Cortex-A9的PS处理单元和PL逻辑单元。 在zynq上,ARM Cortex…

【ZYNQ】ZYNQ7000 全局定时器及其驱动示例

定时器简介 在 ZYNQ 嵌入式系统中,定时器的资源是非常丰富的,每个 Cortex-A9 处理器都有各自独立的 32 位私有定时器和 32 位看门狗定时器,这两个 CPU 同时共享一个 64 位的全局定时器(GT)。 系统框图 全局定时器&am…

Xilinx ZYNQ 7000学习笔记一(复位和启动)

一、复位系统 参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中,硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱…

zynq7000系列芯片介绍

ZYNQ从架构上可以划分为两大模块,一个是PS(处理器系统),另一个是PL(可编程逻辑) PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU(Application Processor Unit)应用处理单元 即PS【可编…

xilinx zynq-7000 基本知识

Zynq-7000 采用可扩展式处理平台架构(Extensible Processing Platform、EPP),是 Xilinx 用 28nm HKMG工艺制成的低功耗,高性能,高扩展性的新型芯片,这款新品里面集成了ARM CORTEX-A9 MPSOC 硬核以及相应的S…

ZYNQ-7000概述

摘要 Xilinx推出的ZYNQ-7000被称为全可编程片上系统(SOC),它由FPGA与ARM组合构成,硬件可编程,软件也可编程,在众多应用场合有一定优势。本文根据Xilinx官网的介绍并结合ZYNQ-7000的多份数据手册总结了此产品…

ZYNQ学习笔记(一)---初识ZYNQ-7000系列

前几日刚入手一款ZYNQ-7000系列的板卡,之前我也没用过FPGA,直接跨越到ZYNQ的原因主要是某宝上这款板卡相较于其他片上仅有一块FPGA的板卡性价比更高。作为入门,在学习过程中,笔者选择先单独学习ZYNQ上的FPGA部分,也就是…

ZYNQ7000 Vivado详细教学步骤

ZYNQ7000 Vivado开发 ZYNQ7000 Vivado详细教学步骤 ZYNQ7000 Vivado开发1.建立工程项目2.创建Block Design3.配置IO BANK4.配置DDR和CLOCK5.配置PS外设6.测试PS外设7.增加PL外设 1.建立工程项目 Xilinx提供了一系列开发工具,其中包括Vivado平台工具,它是…

mongodb客户端 robo 3T 查询突破50行限制

robo 3T的小bug 这个mongodb客户端,每次查询数据只有50行,虽然有向下翻页的功能 但实际上点击后会被重置,还是只有前50条 解决办法 DBQuery.shellBatchSize 500; 当前窗口最大查询数量修改到500(只有当前窗口生效)…

centos7仅安装mysql/mongodb客户端

1、仅安装MySQL客户端 # 添加rpm源 [rootk8s-master ~]# rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm [roottest1 ~]# # 通过yum搜索 [roottest1 ~]# yum search mysql-community [roottest1 ~]# # 安装x64位的 mysql客户端 [roottest1 ~]…

专业级MongoDB桌面客户端:MongoBooster for Mac

mongobooster mac破解版是适用于MongoDB的最智能IDE,也是以shell为中心的跨平台GUI工具,它提供了流畅的查询构建器,SQL查询SQL查询,就地更新,ES2017语法支持和真正的智能感知体验。MongoBooster下载可以帮助用户能够连接到选项卡式用户界面中的多个数据库,并通过shell命令…

mongodb官方客户端可视化工具Compass,免费,官方值得信赖

之前一直用的客户端是nosqlbooster4mongo,基本操作还都是挺好用的,但是有一些命令在这个客户端上运行不了,以后要慢慢的替换到compass上。 下载compass 官方下载:https://downloads.mongodb.com/compass/mongodb-compass-1.26.1…

Centos下mongodb的安装

方法一 可以使用yum命令直接安装MongoDB服务端和客户端。 sudo yum install mongodb-server # 安装MongoDB服务端 sudo yum install mongodb # 安装MongoDB客户端 sudo mongod -f /etc/mongod.conf # 加载配置项,启动mongodb服务器 mongo #启动客户端方法…

linux下MongoDB客户端shell基本操作

MongoDB 是一款NoSql数据库,没有固定的模式,即同一个集合中的不同文档结构可以不同,如:第一条记录{name:”xiaoming”},第二条记录:{name:”xiaoli”,age:15},这在关系型数据库中是无法实现的。…

MongoDB 客户端 MongoVue

直接上图片,图片是按顺序来的 软件下载地址(Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本): http://pan.baidu.com/s/1skYIEq5

mongoDB介绍与客户端认证权限

mongoDB简介 Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。 Mongodb是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库…

MongoDB客户端Robo 3T安装使用

MongoDB客户端Robo 3T安装使用 MongoDB安装 MacBook解压安装MongoDB Linux解压安装MongoDB Robo 3T下载和安装 官网下载Robo 3T 官网下载地址: https://robomongo.org/download 有解压版本和安装版本 下载成功后,点击安装,这里不多做说明 Robo 3T使用 打开Ro…

linux/centos单独安装mysql、mongodb客户端

安装mysql客户端 下载想要版本mysql客户端 带client https://downloads.mysql.com/archives/community/ rpm卸载已安装mysql rpm -qa | grep -i mysql 查询出来的rpm -e 全部卸载 rpm -e mysql57-community-release-el7-9.noarch rpm -e mysql-community-server-5.7.17-1…