当前位置: 代码迷 >> 驱动开发 >> 关于pci中断和空间访问的有关问题
  详细解决方案

关于pci中断和空间访问的有关问题

热度:95   发布时间:2016-04-28 11:04:49.0
关于pci中断和空间访问的问题
现象描述:
我的机器上插了两块相同的pci板卡,中断号相同,用第一块板卡访问外围器件空间正确,用第二块板卡访问外围器件空间就错误了,结果变成了第一块卡的空间,以上范围都是在内核态。用户态范围都正常。把板卡插到两个中断号不同的槽位上没有这种现象,完全正确。请高手指教会是什么地方的问题?似乎与中断和内核态在外围器件的映射上有关系。下面是映射部分的代码:
(开发环境Driver studio)
status = m_Ram.Initialize(
pResListTranslated,
pResListRaw,
PciConfig.BaseAddressIndexToOrdinal(3)
);
dev.ram = (unsigned long)m_Ram.Base();
dev.fpga = (fpga_register_t *)(dev.ram + FPGA_REGISTER_OFFSET);
访问fpga时出错!
红色为获得fpga的基地址

------解决方案--------------------
PCI板卡中断选择ABCD一般单中断都是INTA
每个槽位也有4个对应的引脚INTABCD分别接PCI卡并连到主板或CPU中断控制器
槽位也可以把4个中断都并到一根上,不同槽位连接中断控制器的ABCD线可能相同也可不同
实际上每经过一级PCI桥PCI中断号都会打乱一次,当然也有一定的规律
中断控制器汇总所有的中断线然后报告给CPU
当CPU接到PCI中断时,会分析是哪个槽哪个卡 不同的中断号会倒推到不同的槽去
  相关解决方案