Programmable Interrupt Controller (PIC) 可编程中断控制器

本章描述了可编程中断控制器(PIC)中断协议、由PIC控制的各种类型的中断源,以及具有一些编程准则的PIC寄存器

1、介绍

PIC符合OpenPIC架构。中断控制器提供多处理器中断管理,并负责接收来自不同来源(包括内部和外部)的硬件生成的中断,对它们进行优先排序,并将它们交付到适当的目的地进行服务

1.1 概述

下图是一个方框图,显示了各种功能块之间的关系,以及PIC外部的信号如何连接到设备上的其他块,包括核心。

pipeline 架构 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不执行从外部中断控制器进行的向量获取

pipeline 架构 pic架构_ci_02

表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 内部中断源

下表显示了内部中断源的分配,以及它们如何映射到控制它们的寄存器。

只列出了所使用的内部中断;也就是说,这些数字不是连续的。

pipeline 架构 pic架构_外部中断_03

pipeline 架构 pic架构_学习_04

 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 寄存器组

pipeline 架构 pic架构_pipeline 架构_05

 

pipeline 架构 pic架构_pipeline 架构_06

 

pipeline 架构 pic架构_pipeline 架构_07

 

pipeline 架构 pic架构_ci_08

 

pipeline 架构 pic架构_学习_09

 

pipeline 架构 pic架构_外部中断_10

 

pipeline 架构 pic架构_外部中断_11

 

pipeline 架构 pic架构_外部中断_12

 

pipeline 架构 pic架构_寄存器_13

 

pipeline 架构 pic架构_pipeline 架构_14