一个简单的PCI总线INTx中断实现流程

一个简单的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消息的类型与设备号的映射关系如下图所示:
对应的,一个简单的例子如下:
当多个设备使用同一个中断信号线时,只有先置位的设备会被中断控制器响应。但是该中断信号线,并不会因为其中一个设备的中断请求得到响应便被清除,而是会等到所有的发送请求的设备的中断请求都得到了响应之后。如下图所示:

晶体管和场效应管的区别
智慧园区系统为园区内的安全设备管控提供了重大帮助
Google在其Google Meet视频聊天服务中添加了一项新功能
大屏智能电视推荐
荣耀8XMax上手 为影音而生
一个简单的PCI总线INTx中断实现流程
从FPGA工程师到CEO,你准备好了吗?
Elon Musk的Model 3的价格不仅仅是3.5万美金那么简单
优化DS2715电池充电器的负载切换功能
华为正式上架AI全彩摄像头2K版
开关型防雷器件放电管有几种类型?优缺点是什么?
MIMO路由器详细资料
提高了电网运行效率和安全可靠性的新技术
24小时在线实时监测!建筑工地扬尘监测仪对pm10的全面监测
USB3.0主机控制器Upd720200在嵌入式媒体网关系统
如何在基于NAND闪存系统中实现最低的故障率
最新未来汽车技术趋势:无人驾驶、车载多媒体系统智能化
华为服务器助力云机器人
i.MX RT1170评估套件快速入门:这份保姆级教程,请收藏!
新款 MacBook Air 和 13 英寸 MacBook Pro 两者差异在哪?