赞
踩
中断普遍存在于PS和PL的处理器内部和处理器之间,在异构处理系统中系统中断处理状态、事件、请求和错误。平台处理单元(the platform management unit,PMU) 和 配置安全单元(configuration security unit,CSU) 有自带的控制器。PMU包含CPU和外部中断控制器。CSU中断控制器是一个由CSR ROM代码管理的封闭系统。
实时处理单元(Real-time processing unit,RPU) 采用符合GICv1体系结构的ARM PL-390通用中断控制器。应用程序处理单元(Application Processing Unit,APU) 采用符合GICv2体系结构规范的ARM IGIC-400通用中断控制器。通用中断管理器(GIC) 管理着软件生成中断(the software-generated interrupts,SGI)、每个CPU的私有外设中断(private peripheral interrupts,PPI) 和共享外围中断(the shared peripheral interrupts,SPI)。当处理器掉电导致RPU和APU无法处理中断时,PMU使用GIC代理中断。GIC代理中断是Xilinx架构的PMU外部中断控制器,由PMU控制。
有148个系统中断连接着每个GIC、GIC代理中断控制器和PL结构。系统中断通常由RPU或者APU处理,PMU中的用户固件可以在RPU或APU失效的情况下处理系统中断,CSU未连接系统中断。注意:CPU处理器间中断(IPI)通道与处理器相关联,以允许异构处理系统中的其他处理器向它发送消息并接收返回的响应。IPI目标处理器接收来自另一个处理器的中断,并使用预先安排的通信协议访问消息缓冲区。IPI通道针对系统处理器:APU、RPU core0、RPU core1、PL端四个处理器通道,以及PMU的四个私有通道。注意:PMU有四个IPI中断,PMU_0中断由PMU固件分配,用于将PMU转换到休眠模式。
多数GIC所具备的特点:
RPU GIC独有的特点
APU GIC包含了与RPU GIC相同的大部分功能,并增加了安全与虚拟化
GIC代理中断控制器管理着连接到GIC SPI的所有系统中断。这些系统中断设置位在GICP{0:4}_IRQ_STATUS 寄存器中。在掩码寄存器之后,每个寄存器中的位通过“或”运算组合在一起,以设置另一个状态寄存器中的位,该状态寄存器通过“或”运算组合在一起,以生成单个中断信号到PMU外部中断控制器。
PMU以回退模式使用GIC代理中断来处理应用程序处理器无法管理的系统中断。
系统中断由许多系统组件产生,并通过GIC代理(GIC_IRQ寄存器)发送到GICs和PMU,并在PL中输出信号。系统中断列表见下图所示,该表列出了RPU和APU中断控制器的IRQ编号,以及GIC代理Bit分配。
注意:
系统中断体系结构包括两个mpcore的GIC中断控制器,用于PMU的GIC代理中断单元,以及用于系统处理器通信的IPI中断。中断框图展示如下:
从图中可以看到,共享外设中断由各种子系统产生,这些子系统包括PS中的I/O外设和PL中的逻辑。PCIE MSI由PCIE控制器处理,方法是将MSI解码成位向量,然后使能一个边沿触发中断,为了保证PCIE顺序,PCIE控制器必须在使能MSI中断之前等待之前未完成的(入栈)写操作的完成。此外,PCIE控制器必须确保MSI缓冲区(在向CPU使能中断后保存MSI信息)最终不会导致PCIE入栈流量阻塞(这会导致死锁)。
RPU MPcore和RPU GIC之间有两个接口。
每个CPU可以使用软件生成中断(SPI)来中断自己、其他CPU或者MPCore中的两个CPU。共有16个软件生成中断。通过将SGI中断号写入PL390来生成SGI。enable_sgi_cortrol(ICDSGIR)寄存器,并指定目标CPU。通过CPU私有总线进行写操作,每个CPU都有自己的一组SGI寄存器来生成16个软件生成的中断中的一个或者多个。通过读取中断确认PL390来清除中断。control_n_int_ack_n(ICCIAR)寄存器或写入中断清除挂起PL390.enable_sqi_pendinig(ICDICPR)的相应位。
所有的SGI都是边缘触发的,SGI的灵敏度是固定的,不能更改;控制寄存器是只读的,因为它指定了所有16个SGI的灵敏度类型。
一组来自不同模块的大约160个共享外设中断(SPI)可以被连接到一个或两个CPU或PL。中断控制器为CPU管理这些中断的优先级和接收。
共享外设中断可以针对任意数量的CPU,但只有一个CPU处理中断。如果一个中断是针对两个CPU,并且他们同时响应GIC,MPCore确保只有一个CPU读取有效中断ID,另一个CPU接收伪中断ID(ID 1023/1022)或下一个挂起的中断,这取决于时间。
除了来自PL的中断IRQ(121-128)和IRQ(136-143)之外,所有中断敏感类型都是由请求源固定的,不能更改。GIC的程序必须适应这一点。BootROM不编写这些寄存器,因此SDK设备驱动程序必须对GIC进行编程以适应这些灵敏度类型。
对于电平敏感类型的中断,请求源必须为中断处理程序提供一种机制,以便在中断被确认好清除中断。这一要求适用于任何具有高灵敏度类型的IRQ-F2P[n](来自PL)。对于上升沿敏感的中断,请求源必须提供足够大的脉冲宽度以便GIC捕获,这通常至少需要两个CPU_2X3X周期。
每个中断的灵敏度控制都有一个2位字段,用于指定灵敏度类型和处理模式。
所有的SGI和SPI中断请求都被分配了一个唯一的ID号。控制器使用ID号进行仲裁。中断分发器保存每个CPU的挂起中断列表,然后将其发送到CPU接口之前选择最高优先级的中断,通过选择最低的ID来解决同等优先级的中断。
优先级逻辑在物理上是重复的,以便为每个CPU同时选择最高优先级的中断。中断分发器保存中断、处理器和激活信息的中心列表,并负责触发对CPU的软件中断。
SGI和PPI分配器寄存器被存入分区,为每个CPU提供单独的副本。中断控制器确保一个针对多个CPU的中断在同一时间只能有一个CPU处理。
中断分发器将最高的挂起中断发送到CPU接口。它接收到中断被确认的信息,现在可以改变相应中断的状态。只有负责中断的CPU才能结束中断。
处理器之间的通信通道必须与商定的协议和消息格式相协调。
为了生成中断,发送方将1写入其触发器(TRIG)寄存器中对应于目标接收方的位。它可以通过读取自己的OBS寄存器来验证是否在接收器的状态寄存器中设置了位。然而,它无法确定是否启用中断来生成IRQ中断信号。
处理单元读取其中断状态(ISR)和掩码(IMR)寄存器,以确定导致IRQ中断的源。服务程序完成后,可以通过写入从该寄存器读取的数据来清除ISR。设置的位被清除,同时保留读取后设置的任何位,这有助于消除错过的中断。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。