询问XP下Windriver清Pcie中断问题

该昵称已被占用了了了 2014-12-27 12:04:15
我目前使用的是XP系统,Pcie板卡端通过PPC处理器给我发来的是MSI中断, 由于XP本身不支持MSI,
所以估计是XP下的某个PIC控制器将MSI转换为了电平中断。而电平中断需要进行清中断动作。
我知道WDC_IntEnable中可以注册清除动作。 但我完全不知道应该清哪个寄存器。
能查到的资料是一个叫INTCSR的REG,但这个REG是在PCIE端还是XP端???
PCIE端使用的MSI所以找不到这个REG,而XP端我也不知道去哪里找这个REG地址,以及对应bit位含义。
还望各位大牛提供一些帮助,非常感谢!
...全文
416 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 curious_cat 的回复:
PCI总线的中断是共享的(不了解MSI),也就是设备发出中断申请后,要一直占有 INT A,B,C,D,需要HOST来查询到具体是哪个设备发中断申请之后,再清除设备的中断状态寄存器(设备释放INT信号) 因此需要清除设备的寄存器,而不是HOST的PIC寄存器。 PCIE类似; 微软的桌面系统对MSI的支持状况: Windows Vista and later versions of Windows support MSI and MSI-X. 微软关于使用MSI的文档: http://msdn.microsoft.com/en-us/library/windows/hardware/ff548079(v=vs.85).aspx
感谢回复, 目前问题在于: 1:、因为设备使用的assert deassert方式发送legacy中断,而硬件并没有拉实际的中断线到INTABCD,即设备不会拉住 中断线不放,等待你写某个REG去清除它。 2、XP确实不支持MSI,而硬件又没拉中断线,所以只能发legacy中断出来,这个legacy感觉在PCIE上就是MSI,只是到XP后,可能是电平,可能是边沿。
curious_cat 2015-01-03
  • 打赏
  • 举报
回复
PCI总线的中断是共享的(不了解MSI),也就是设备发出中断申请后,要一直占有 INT A,B,C,D,需要HOST来查询到具体是哪个设备发中断申请之后,再清除设备的中断状态寄存器(设备释放INT信号) 因此需要清除设备的寄存器,而不是HOST的PIC寄存器。 PCIE类似; 微软的桌面系统对MSI的支持状况: Windows Vista and later versions of Windows support MSI and MSI-X. 微软关于使用MSI的文档: http://msdn.microsoft.com/en-us/library/windows/hardware/ff548079(v=vs.85).aspx
  • 打赏
  • 举报
回复
感谢 版主回复~ 四处问了下, 目前认为 XP收到中断后,首先要清远端中断,然后要设置自己的REG进行中断屏蔽操作, 当处理完后,再开启中断。 也就是 清--屏蔽--开启, 对中断处理的三个动作。 PCIE端发完中断后,就自动禁止了的。 所以就剩下对XP端的屏蔽了, 不过很惆怅啊, XP端有REG可以控么?
曹大夯 2014-12-30
  • 打赏
  • 举报
回复
INTCSR寄存器地址是PCIBAR0+68h? PICBAR0应该是系统为对应PCIE板卡设定的映射地址。
lr2131 2014-12-27
  • 打赏
  • 举报
回复
引用 楼主 dongyang626 的回复:
我目前使用的是XP系统,Pcie板卡端通过PPC处理器给我发来的是MSI中断, 由于XP本身不支持MSI, 所以估计是XP下的某个PIC控制器将MSI转换为了电平中断。而电平中断需要进行清中断动作。 我知道WDC_IntEnable中可以注册清除动作。 但我完全不知道应该清哪个寄存器。 能查到的资料是一个叫INTCSR的REG,但这个REG是在PCIE端还是XP端??? PCIE端使用的MSI所以找不到这个REG,而XP端我也不知道去哪里找这个REG地址,以及对应bit位含义。 还望各位大牛提供一些帮助,非常感谢!
没玩过那么高级的东东哦,建议你还是再多看看资料,再写程序尝试下吧。

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧