PCI-PCIE中断机制之一
PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),PCI总线规范并没有明确规定在一个处理器系统中如何使用这些信号,因为这些信号对于PCI总线是可选信号。所谓边带信号是指这些信号在PCI总线中是可选信号,而且只能在一个处理器系统的内部使用,并不能离开这个处理器环境。
注:PCI Spec对边带信号的定义如下:
Any signal not part of the PCI specification that connects two or more PCI-compliant agents and has meaning only to those agents.
完整的PCI信号结构图如下:
中断信号与中断控制器的连接关系
PCI总线规范没有规定PCI设备的INTx信号如何与中断控制器的IRQ_PINx#信号相连,这为系统软件的设计带来了一定的困难,为此系统软件使用中断路由表存放PCI设备的INTx信号与中断控制器的连接关系。在x86处理器系统中,BIOS可以提供这个中断路由表,而在PowerPC处理器中Firmware也可以提供这个中断路由表。
在一些简单的嵌入式处理器系统中,Firmware并没有提供中断路由表,此时系统软件开发者需要事先了解PCI设备的INTx信号与中断控制器的连接关系。此时外部设备与中断控制器的连接关系由硬件设计人员指定。
我们假设在一个处理器系统中,共有3个PCI插槽(分别为PCI插槽A、B和C),这些PCI插槽与中断控制器的IRQ_PINx引脚(分别为IRQW#、IRQX#、IRQY#和IRQZ#)可以按照下图所示的拓扑结构进行连接。
此时,PCI插槽A、B、C的INTA#、INTB#和INTC#信号将分散连接到中断控制器的IRQW#、IRQX#和IRQY#信号,而所有INTD#信号将共享一个IRQZ#信号。采用这种连接方式时,整个处理器系统使用的中断请求信号,其负载较为均衡。而且这种连接方式保证了每一个插槽的INTA#信号都与一根独立的IRQx#信号对应,从而提高了PCI插槽中断请求的效率。
在一个处理器系统中,多数PCI设备仅使用INTA#信号,很少使用INTB#和INTC#信号,而INTD#信号更是极少使用。在PCI总线中,PCI设备配置空间的Interrupt Pin寄存器记录该设备究竟使用哪个INTx信号。
中断信号与PCI总线的连接关系
在PCI总线中,INTx信号属于边带信号。PCI桥也不会处理这些边带信号。这给PCI设备将中断请求发向处理器带来了一些困难,特别是给挂接在PCI桥之下的PCI设备进行中断请求带来了一些麻烦。
在一些嵌入式处理器系统中,这个问题较易解决。因为嵌入式处理器系统很清楚在当前系统中存在多少个PCI设备,这些PCI设备使用了哪些中断资源。在多数嵌入式处理器系统中,PCI设备的数量小于中断控制器提供的外部中断请求引脚数,而且在嵌入式系统中,多数PCI设备仅使用INTA#信号提交中断请求。
在这类处理器系统中,可能并不含有PCI桥,因而PCI设备的中断请求信号与中断控制器的连接关系较易确定。而在这类处理器系统中,即便存在PCI桥,来自PCI桥之下的PCI设备的中断请求也较易处理。
在多数情况下,嵌入式处理器系统使用的PCI设备仅使用INTA#信号进行中断请求,所以只要将这些INTA#信号挂接到中断控制器的独立IRQ_PIN#引脚上即可。这样每一个PCI设备都可以独占一个单独的中断引脚。
而在x86处理器系统中,这个问题需要BIOS参与来解决。在x86处理器系统中,有许多PCI插槽,处理器系统并不知道在这些插槽上将要挂接哪些PCI设备,而且也并不知道这些PCI设备到底需不需要使用所有的INTx#信号线。因此x86处理器系统必须要对各种情况进行处理。
x86处理器系统还经常使用PCI桥进行PCI总线扩展,扩展出来的PCI总线还可能挂接一些PCI插槽,这些插槽上INTx#信号仍然需要处理。PCI桥规范并没有要求桥片传递其下PCI设备的中断请求。事实上多数PCI桥也没有为下游PCI总线提供中断引脚INTx#,管理其下游总线的PCI设备。但是PCI桥规范推荐使用下面的表建立下游PCI设备的INTx信号与上游PCI总线INTx信号之间的映射关系。
我们举例说明该表的含义。在PCI桥下游总线上的PCI设备,如果其设备号为0,那么这个设备的INTA#引脚将和PCI总线的INTA#引脚相连;如果其设备号为1,其INTA#引脚将和PCI总线的INTB#引脚相连;如果其设备号为2,其INTA#引脚将和PCI总线的INTC#引脚相连;如果其设备号为3,其INTA#引脚将和PCI总线的INTD#引脚相连。
在x86处理器系统中,由BIOS或者APCI表记录PCI总线的INTA~D#信号与中断控制器之间的映射关系,保存这个映射关系的数据结构也被称为中断路由表。大多数BIOS使用表中的映射关系,这也是绝大多数BIOS支持的方式。如果在一个x86处理器系统中,PCI桥下游总线的PCI设备使用的中断映射关系与此不同,那么系统软件程序员需要改动BIOS中的中断路由表。
BIOS初始化代码根据中断路由表中的信息,可以将PCI设备使用的中断向量号写入到该PCI设备配置空间的Interrupt Line register寄存器中。
PCI总线的错误处理
PCI设备可以通过奇偶校检来检测到来自AD上的地址或者数据的错误,并通过PERR#或者SERR#报告错误。但是需要注意的是,PCI Spec并未规定任何硬件层面上的错误处理或者恢复机制,因此,这些错误都只能通过软件进行处理。
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设备中断号分配 沉淀.分享.成长,让自己和他人都能有所收获!
- 嵌入式知识框架之六-接口与总线(SPI\I2C\ USB\PCI\PCI-E\SD\SDIO\以太网接口)
接口是外设和主设备连接的方式/规则/协议的名称:XX总线是主设备连接某一类接口的名称 1.串口 串行数据接口标准(根据时间发展顺序介绍): RS-232:命名为EIA-232-E标准:通信距离短.速率 ...
- linux pci/pcie驱动
/driver/pci/probe.c /arch/powerpc/kernel/pci_64.c 在pci驱动中pci调用pci_scan_device扫描每个设备的每个功能,当发现该功能存在时(通 ...
最新文章
- Mysql的锁机制之表锁
- exchange系列(四)如何保护exchange邮件服务器的安全
- OPenCV膨胀函数dilate()的使用
- 创业编程七个错误认识
- basic认证 接口 php,PHP 模拟 HTTP 基本认证(Basic Authentication) - 黄棣-dee - 博客园...
- 虚拟主机 webdav php,ubuntu 搭建 webdav 文件服务器 及客户端配置 详解
- 计算机程序设计 大作业 vb,成人《VB程序设计》标准化大作业(答案)1
- AS3 CookBook学习整理(二)
- Unity AssetBundle 资源(纹理,网格,动画,字体,LightMap,音频等)使用 优化
- 课堂测试2014.3.10
- 【C语言】05-printf和scanf函数
- 安装,激活(不更新升级)Navicat premium12.0.24(12.0.18)
- python下载付费文档教程-用Python批量爬取付费vip数据,竟然如此简单
- [Windows]Win10/Win11切换专业工作站版本
- 如何理解STM32单片机引脚的复用功能?
- word文档设置页眉页脚的技巧
- java 图片 加边框_给图片加图片边框 图片边框要求为PNG格式
- Win10 Delete键失效怎么办 ?
- 桌面自动化实现原理-RPA+
- python小玩意——抠图换背景
热门文章
- centos8 安装kvm
- 华为鸿蒙推送机型,华为鸿蒙系统开始推送,这15款机型可率先升级,有你的吗?...
- python 降低图片分辨率的两种方法
- QTreeWidget去掉虚线框
- 披上了SSL战甲的HTTP战士——HTTPS
- 教你在MathType中输入空心字和花体字的重要方法
- 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?
- 计算机能使用硬盘吗,电脑内置硬盘可以直接当移动硬盘用吗?
- 佐治亚州立大学计算机科学,佐治亚州立大学计算机科学研究生语言及申请要求-费用-课程设置...
- 微信mars学习笔记