PCI-PCIE中断机制之三
一个简单的PCI总线INTx中断实现流程,如下图所示。
1. 首先,PCI设备通过INTx边带信号产生中断请求,经过中断控制器(Interrupt Controller,PIC)后,转换为INTR信号,并直接发送至CPU;
2. CPU收到INTR信号置位后,意识到了中断请求的发生,但是此时并不知道是什么中断请求。于是通过一个特殊的指令来查询中断请求信息,该过程一般被称为中断应答(Interrupt Acknowledge);
3. 该特殊指令被发送至PIC后,PIC会返回一个8bits的中断向量(Interrupt Vector)值给CPU。该中断向量值与其发送的INTR请求是对应的;
4. CPU收到来自PIC的中断向量值后,会去其Memory中的中断向量表(Interrupt Table)中查找对应的中断服务程序(Interrupt Service Routines,ISR)在Memory的位置;
5. 然后CPU读取ISR程序,进而处理该中断。
上面的例子主要是基于早期的单核CPU设计的,并没有考虑到目前多核CPU的情况。因此,在后续的PCI Spec中,将PIC替换为IO APIC(Advanced Programmed Interrupt Controller)。如下图所示:
实际上,在PCIe总线中,传统的中断机制(INTx)已经很少被使用,很多应用甚至直接将该功能禁止了。无论是在PCI总线(V2.3及以后的版本),还是PCIe总线中,都可以通过配置空间中的配置命令寄存器(Configuration Command Register来禁止INTx中断机制),如下图所示。不过,需要特别注意的是,虽然该bit的名称为中断禁止(Interrupt Disable),但是其只会影响INTx,对MSI/MSI-X不会造成影响。因为MSI/MSI-X的使能(或禁止)是通过配置空间中的MSI/MSI-X Capability Command Register来实现的,并且一旦使能了MSI/MSI-X,PCI总线/PCIe总线便会自动地禁止INTx。
并且可以通过配置状态寄存器的中断状态(Interrupt Status)bit来确定当前的中断状态,如下图所示:
INTx相关的寄存器在配置空间的位置如下图所示,Interrupt Pin和Interrupt Line分别定义了中断边带信号引脚号(INTA#~INTD#)和中断向量号(IRQ0~IRQ255)。
然而,PCIe总线继承了PCI总线的INTx中断机制,但是在实际的PCIe设备之间的中断信息传输中使用的并非边带信号INTx,而是基于消息(Message)的。其中Assert_INTx消息表示INTx信号的下降沿。Dessert_INTx消息表示INTx信号的上升沿。当发送这两种消息时,PCIe设备还会将配置空间的相关中断状态bit的值更新。对于PCIe-PCI(X)桥设备来说,会将接收到的来自PCI/PCI-X总线的INTx信号转换为消息,在往上级发送。一个简单的例子如下图所示:
INTx消息的格式为:
桥设备中的INTx消息的类型与设备号的映射关系如下图所示:
对应的,一个简单的例子如下:
当多个设备使用同一个中断信号线时,只有先置位的设备会被中断控制器响应。但是该中断信号线,并不会因为其中一个设备的中断请求得到响应便被清除,而是会等到所有的发送请求的设备的中断请求都得到了响应之后。如下图所示:
PCI-PCIE中断机制之三相关推荐
- KVM 介绍(4):I/O 设备直接分配和 SR-IOV [KVM PCI/PCIe Pass-Through SR-IOV]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- linux禁用及启用pcie设备,KVM 介绍(4):I/O设备直接分配和 SRIOV [KVM PCI/PCIe PassThrough SRIOV]...
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- Linux(debian7)操作基础(三)之PCI/PCI-E设备配置空间
⑴ 概念 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间.PCI/PCI-E设备的正常运行, ...
- PCI/PCIe基础
PCI/PCIe基础 处理器系统中的PCI PCI总线全称Peripheral Component Interconnect,它是处理器系统的一部分,属于局部总线,其主要功能是连接外部设备. PCI总 ...
- Remotely Controlling(远程控制) an Octeon through PCI, PCIe, or EJTAG
Remotely Controlling(远程控制) an Octeon through PCI, PCIe, or EJTAG 1. Introduction In development, and ...
- 要实现八个串口怎么办(PCI/PCIE/USB方案)
要同时使用8个互相独立的异步串口UART,可以采用PCI-Express转8串口.PCI转8串口,笔记本还可用USB转8串口.下面我们逐个来看: 一.PCIE(PCI-Express)转8串口 PCI ...
- KVM之I/O PCI/PCI-E设备直接分配和SR-IOV
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接 ...
- RK3399平台开发系列讲解(PCI/PCI-E)5.54、PCIE INTx中断机制
文章目录 一.PCIe中断过程 二.PCIE 控制器支持的中断 三.PCIE 控制器注册中断 四.PCIe设备中断号分配 沉淀.分享.成长,让自己和他人都能有所收获!
- 多功能PCIE交换机之三:PCIE非透明桥 cache一致性
关于PCIE非透明桥 cache一致性 PCIE非透明桥提供了两种机制来从local node往remote node迁移数据,分别是基于地址映射和内嵌的 DMA.对remote节点而言,当它接受数据 ...
- 嵌入式知识框架之六-接口与总线(SPI\I2C\ USB\PCI\PCI-E\SD\SDIO\以太网接口)
接口是外设和主设备连接的方式/规则/协议的名称:XX总线是主设备连接某一类接口的名称 1.串口 串行数据接口标准(根据时间发展顺序介绍): RS-232:命名为EIA-232-E标准:通信距离短.速率 ...
最新文章
- 贪心:Wiggle Subsequence 摇摆序列
- java SE环境变量配置
- 【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法
- httpClient多线程问题
- 一个爬虫的demo,requests,beatuifulsoup使用的
- springmvc 重定向传递参数
- 得到src目录下的properties文件属性
- Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
- Oracle中listener does not currently know of SID given in connect descriptor
- 牛客练习赛29: F. 算式子
- eclipse 构建maven web工程
- visio显示形状窗口
- BT656协议讲解与解码
- HDU	 4699 Editor【模拟栈】
- 5 Linux系统编程之网络编程--学习笔记
- C语言入门题库——求数列2/1+3/2+5/3......的和
- IDA使用初探-1.启动IDA
- dae模型如何合并_PV3D学习笔记-导入DAE模型
- JAVA 基础——学习
- fork与vfork