一个简单的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中断机制之三相关推荐

  1. 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设备直接分 ...

  2. 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设备直接分 ...

  3. Linux(debian7)操作基础(三)之PCI/PCI-E设备配置空间

    ⑴ 概念 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间.PCI/PCI-E设备的正常运行, ...

  4. PCI/PCIe基础

    PCI/PCIe基础 处理器系统中的PCI PCI总线全称Peripheral Component Interconnect,它是处理器系统的一部分,属于局部总线,其主要功能是连接外部设备. PCI总 ...

  5. Remotely Controlling(远程控制) an Octeon through PCI, PCIe, or EJTAG

    Remotely Controlling(远程控制) an Octeon through PCI, PCIe, or EJTAG 1. Introduction In development, and ...

  6. 要实现八个串口怎么办(PCI/PCIE/USB方案)

    要同时使用8个互相独立的异步串口UART,可以采用PCI-Express转8串口.PCI转8串口,笔记本还可用USB转8串口.下面我们逐个来看: 一.PCIE(PCI-Express)转8串口 PCI ...

  7. KVM之I/O PCI/PCI-E设备直接分配和SR-IOV

    学习 KVM 的系列文章:  (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接 ...

  8. RK3399平台开发系列讲解(PCI/PCI-E)5.54、PCIE INTx中断机制

    文章目录 一.PCIe中断过程 二.PCIE 控制器支持的中断 三.PCIE 控制器注册中断 四.PCIe设备中断号分配 沉淀.分享.成长,让自己和他人都能有所收获!

  9. 多功能PCIE交换机之三:PCIE非透明桥 cache一致性

    关于PCIE非透明桥 cache一致性 PCIE非透明桥提供了两种机制来从local node往remote node迁移数据,分别是基于地址映射和内嵌的 DMA.对remote节点而言,当它接受数据 ...

  10. 嵌入式知识框架之六-接口与总线(SPI\I2C\ USB\PCI\PCI-E\SD\SDIO\以太网接口)

    接口是外设和主设备连接的方式/规则/协议的名称:XX总线是主设备连接某一类接口的名称 1.串口 串行数据接口标准(根据时间发展顺序介绍): RS-232:命名为EIA-232-E标准:通信距离短.速率 ...

最新文章

  1. 贪心:Wiggle Subsequence 摇摆序列
  2. java SE环境变量配置
  3. 【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法
  4. httpClient多线程问题
  5. 一个爬虫的demo,requests,beatuifulsoup使用的
  6. springmvc 重定向传递参数
  7. 得到src目录下的properties文件属性
  8. Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
  9. Oracle中listener does not currently know of SID given in connect descriptor
  10. 牛客练习赛29: F. 算式子
  11. eclipse 构建maven web工程
  12. visio显示形状窗口
  13. BT656协议讲解与解码
  14. HDU 4699 Editor【模拟栈】
  15. 5 Linux系统编程之网络编程--学习笔记
  16. C语言入门题库——求数列2/1+3/2+5/3......的和
  17. IDA使用初探-1.启动IDA
  18. dae模型如何合并_PV3D学习笔记-导入DAE模型
  19. JAVA 基础——学习
  20. fork与vfork

热门文章

  1. 电信光纤ipv6-- 搭建属于自己的服务器
  2. C#将大量数据批量写入Excel中
  3. 移动硬盘写入数据报错“MS-DOS功能无效”,或移动硬盘内新建文件夹报错0x8000FFFF灾难性错误
  4. 海外服务器配置多少带宽比较合适?
  5. 路由宽带运营商服务器未响应,宽带运营商服务器未响应解决方法
  6. C#资源文件的使用实例
  7. 汽车传感器:自动驾驶“第一步”
  8. linux下ftp工具
  9. opencvsharp阈值分割threshold函数的ThresholdTypes
  10. 数字滤波算法——程序判断滤波