Programmable Interrupt Controller (PIC) 可编程中断控制器
本章描述了可编程中断控制器(PIC)中断协议、由PIC控制的各种类型的中断源,以及具有一些编程准则的PIC寄存器
1、介绍
PIC符合OpenPIC架构。中断控制器提供多处理器中断管理,并负责接收来自不同来源(包括内部和外部)的硬件生成的中断,对它们进行优先排序,并将它们交付到适当的目的地进行服务
1.1 概述
下图是一个方框图,显示了各种功能块之间的关系,以及PIC外部的信号如何连接到设备上的其他块,包括核心。
PIC features
1、支持以下中断源 | 外部中断:芯片外部信号 IRQ [0:11] |
内部中断:这些是来自集成设备内的外围逻辑的芯片源信号错误条件,需要由软件解决 | |
2、PIC 自身产生中断 | PIC 内部全局定时器 A、B [2*4] 两组4个全局 32位定时器,时钟来源 CCB clk 或者 RTC clk . 每个组内的定时器可以连接在一起,以便于达到更长的时间延时 |
处理器间中断 IPI [8] 旨在用于在同一设备上的不同处理器核心之间的通信(可用于单核设备中的自中断。) | |
消息寄存器 来自于 PIC [8] 触发时寄存器写入,在读取时清除。用于处理器间的通信 | |
共享消息信号寄存器 来自于 PIC [8] 触发时寄存器写入,在读取时清除。用于跨程序通信 8个32位消息中断通道 | |
3、3种可编程中断输出 | 外部中断 (int0/int1) 任何一个PIC中断源都可以被编程为将中断请求定向到int0和int1。 这种中断请求的处理遵循OpenPIC规范,该规范保证了最高优先级的中断会取代较低优先级的中断 |
临界中断 (cint0/cint1) 连接到相应的e500核心的临界中断输入。 | |
IRQ_OUT_B | |
4、编程模型符合OpenPIC体系结构。 | 消息、处理器间、全局定时器中断 (核间与全局定时器中断只能路由到 int) |
以下由openpic定义的特性只支持路由到int信号的中断: 1、完全嵌套中断传递,任何正在服务中的中断,保证具有最高优先级的中断源优先于较低优先级的中断 2、16个可编程中断优先级 3、支持识别和处理虚假的中断 | |
5、支持两个处理器 | 中断可以路由到 处理器核心 0 、1 |
用于处理器间和全局计时器中断的多强制转换交付模式,允许将这些中断路由到核心0或1,或两个核心 | |
6、处理器核心初始化控制 | |
7、通过全局配置寄存器对PIC进行可编程重置 | |
8、支持连接外部中断控制器设备,如8259可编程中断控制器。在8259模式下,中断导致本地(即,在集成设备的内部)中断输出信号IRQ_OUT_B的断言 | |
9、直通模式(PIC禁用),其中PIC引导中断脱离芯片进行外部维修。请参见传递模式(GCR[M]=0)。 |
1.2 The PIC in multiple-processor implementations 多处理器中 PIC 的实现
在多处理器实现中,为每个核心复制PIC,必要时,重复的资源用0或1表示。
例如:int0 标识 int 信号到 处理器 0 , int1 标识 int 信号到处理器 1。与核心相关联的其他资源则由数字来标识。例如,设置Pir[P1]将触发核心1的重置,而设置Pir[P0]将触发核心0的重置。
但是,在没有必要进行区分的情况下,就不作任何区分,而一般地提到这些资源。例如,int信号是指int0或int1的行为。
在多处理器系统中,PIC可以将中断连接到其他处理器。编程模型的某些多处理器方面都支持此功能。例如,处理器0中的中断源可以通过在其目标寄存器xIDRn中设置P1位中的P1位来编程为目标int1。
请注意,尽管它们是编程模型的一部分,但这些资源被保留在单处理器设备中
1.3 Interrupt to the e500 processor core 中断到 e500 处理器核心
外部中断信号 int 是从 PIC 到处理器核心的主要中断输出。
中断源也可以指向临界中断输出,cint0,cint1, 如果对应的 xIDRn[CI0], xIDRn[CI1] 被设置。
PIC 还定义了 PIR,在处理器核心初始化寄存器(PIC_PIR)中描述,可用于重置核心。下表中描述了由PIC生成的处理器核心中断
e500 processor interrupts generated outside the code-types and sources
核中断类型 (core interrupt type) | 信号输入核心 signaled by (input to core) | 源 sources |
PIC 可编程中断 | ||
外部中断 | int | PIC 产生 |
临界中断 | cint | PIC 产生 |
核心外产生的其他中断 | ||
机器检查 Machine check | coren_mcp | MCP 0 MCP 1 SRESET |
无条件调试事件 Unconditional debug event | coren_ude | UDE |
Reset | coren_hreset | HRESET |
1.4 Mode of operation
通过设置或清除GCR[M]来选择混合或通过操作模式,详细描述在 Global Configuration register(PIC_GCR) 全局配置寄存器
1.4.1 Mixed mode (GCR[M] = 1)
在混合模式下,使用常规和正常优先机制传递外部和内部中断,详细描述在中断控制流程(Flow of interrupt control)
1.4.2 pass-through mode (GCR[M] = 0)
PIC提供了一种机制来支持替代的外部中断控制器,如PC/at兼容的8259中断控制器架构。
在这种模式下,只有 外部中断 IRQ0 有效,外部中断通过 IRQ0 直接传递到 core, 内部中断信号通过PIC 传递到外部挂载的PIC ,然后再通过 IRQ0 到达 core。当 PCIE 控制器被设置位一个终端设备,来自PIC 的 IRQ_OUT 信号可用于自动生成指向根复合体 (RC) 上的远程中断控制器资源的出站 PCI 快速 MSI 事务。
硬复位之后,PIC 默认在 pass-through 模式,在该模式中,外部源IRQ0的主动高中断直接传递到核心0,如图下图所示;其他所有的外部中断信号被忽略。因此,来自外部中断控制器的中断信号可以连接到IRQ0,并导致直接中断到处理器核心0。PIC不执行从外部中断控制器进行的向量获取
表9-2
注意,在pass-through 模式下,PIC 由 全局定时器、核间、消息寄存器产生的中断都是无效的,如果 内部中断 或者 PIC 产生中断必须报告给处理器,则必须使用 mixed 模式。
在 pass-through 模式下。内部和外部中断的目标应该是 int 。这是默认的。
1.5 Interrupt sources 中断源
interrupt sources
芯片外部中断 [0:11] |
芯片内部中断 如表 9-2 |
PIC 内部的全局定时器 A、B |
核间中断 IPI 用于核间通信 |
PIC 内部的消息寄存器 |
PIC 内部的共享消息信号寄存器,用于跨程序通信 |
1.5.1 Interrupt routing-mixed mode mixed 模式下在的中断路由
当中断请求传递到 PIC,相应的中断目标寄存器去检测决定这个请求是否应该被路由。如下:
1、If xIDR n[EP] = 1 并且其他目标位为0,该中断被路由到芯片外的外部IRQ_OUT_B信号。如果PCIExpress控制器处于EP模式(以及对应的xIDRn[EP]=1),则控制器将自动生成PCIExpressMSI事务。请参见硬件MSI生成 |
2、其他,但不能同时 ,xIDRn[CI0] 或者 xIDRn[CI1] 被设置。 并且其他目标位为0,中断将被路由到 cint0 或者 cint1 |
3、设置 xIDRn[P0] = 1, 并且其他位为0, 中断将被路由到 int0 n[P1] = 1, 并且其他位为0, 中断将被路由到 int1 在这种情况下,中断被中断待定寄存器(IPR)锁定,中断流如中断控制流中所述。 请注意,多播中断(全局定时器和处理器间中断)可以同时设置P0和P1;而其他中断源则不能。 |
1.5.2 Interrupt destinations 中断目标
复位后,PIC将所有定时器、共享消息信号、来自外部和内部源的中断 引导到 int 输出(连接到e500处理器核心的 int 信号)。
处理器间和全局定时器中断可以被编程为路由到任何一个核心的 int 信号或到两个核心(多核情况)
所有其他的中断都有很多的目标选项,但对于单个非多播中断,只能选择一个目标。这些中断不会被路由到 int, 而是通过 cint 路由到 core ,或者指向 IRQ_OUT_B. 您可以通过写入适当的目标寄存器中的EP或CI字段来选择这些选项。
注意 EP 、CI 只能支持非多播外部和内部中断。
1.5.3 内部中断源
下表显示了内部中断源的分配,以及它们如何映射到控制它们的寄存器。
只列出了所使用的内部中断;也就是说,这些数字不是连续的。
2 PIC external signal description PIC 外部信号描述
2.1 概述
PIC外部接口信号描述见表9-3。 一个外部中断请求输入信号,一个中断请求输出信号 IRQ_OUT_B。如表9-3所示,IRQ输入也用于为PCIExpress根复合物传递INTx信号
2.2 detailed signal descriptions 详细信号描述
Interrupt signals-datiled signal descriptions
信号 | I/O | 描述 | |
IRQ[0:11] | I | 中断请求0~11. 这些中断的极性与检测都是可编程的,所有的输入中断都是可以异步驱动的。一些中断请求信号IRQn 可以与 PCIExpress INTx 信令共享 PIC 外部中断寄存器 | |
状态含义 | 断言-当一个外部中断信号(根据编程的极性),PIC检查其优先级,中断有条件地传递到相应目标寄存器中指定的处理器。在传递模式下,只有在IRQ0上检测到的中断才被直接传递到核心0。 否定-没有来自该源的传入中断。 | ||
时序 | 断言-所有这些输入都可以被异步地断言 中断-编程为电级敏感的中断必须保持维护,直到维护。对边缘敏感的中断的定时要求可以在硬件规范中找到 | ||
IRQ_OUT_B | O | 中断请求。当PIC以直通模式编程时,该输出反映了片上源产生的原始中断。请参见操作模式。 | |
状态含义 | 断言-当前至少有一个中断正在向外部系统发出信号。否定-表示当前没有路由到IRQ_OUT_B的中断源 | ||
时序 | 因为外部中断相对于系统时钟是异步的,所以对于中断源,IRQ_OUT_B的断言和否定都是异步的。这里给出的所有时间都是近似的。断言-内部中断源:中断发生后的2个CCB时钟周期。外部中断源:在中断发生后的4个周期。消息中断:写入消息寄存器后的2个周期。否定-遵循中断源否定与以下延迟:内部中断:2个CCB时钟周期外部中断:4个周期。消息中断:清除消息寄存器后的2个周期 | ||
MCP0_B MCP1_B | I | 机器检查处理器n。断言会导致机器检查中断到相应的核心。请注意,如果核心没有配置为处理机器检查中断(MSR[ME]=0),则断言MCPn_B会导致核心检查停止条件。请注意,如机器内部检查汇总寄存器(GUTS_MCPSUMR)和表9-1所述,内部coren_mcp的内部源也可能导致机器检查对处理器核心的中断。 | |
状态含义 | 断言-集成逻辑应指示相应的核心采取一个机器检查中断或按照MSR的指示进入检查停止状态。否定-外部系统没有要求进行机器检查处理 | ||
时序 | 断言-可能发生在任何时间,异步的任何时钟。否定-因为MCP_B n是被边缘触发的,所以它可以在其断言后被否定一个时钟 |
3 PIC memory map/register defintion PIC存储器映射图/寄存器定义
PIC可编程寄存器映射占用256kb字节的内存映射空间,读取内存映射的未定义部分将返回全零,写入没有效果。
所有的PIC寄存器都是32位宽的,虽然位于128位的地址边界上,但只能以32位的数量进行访问。
PIC地址偏移图被分为三个区域:
PIC register 地址偏移区域
0xnn4_0000-0xnn4_FFF0 | 全局寄存器组 |
0xnn5_0000-0xnn5_FFF0 | 中断源配置寄存器组 |
0xnn6_0000- 0xnn7_FFF0 | 单个(每个) CPU 寄存器组 |