FactsMan
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2003-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1271回复:3

新手提问:如何在程序里配置PCI的地址空间?

楼主#
更多 发布于:2003-04-20 18:26
我的毕设是做一个PCI卡,现在在配置地址空间的时候遇到了问题。
具体是这样的:一块PCI数据采集卡,是用9052作为连接芯片的,
数据都存在一个2k*8的RAM里,RAM连在9052的CS2上。没有配置EEPROM,准备采用默认的,再在程序里修改。但是,PCI配置寄存器和局部配置寄存器都改了,就是没有效果。后来看了一下DriverStudio的帮助,可能要用到KResourceRequest类,可是一用机器就重起了?好像WDM不太支持这个类?到底应该怎么来做呢?
我是一个新手,请大家多多帮忙!
谢谢了!
seraph
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2003-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-23 18:25
我做的是和你大致一样,也是数据采集卡,只不过是9050,不过目前我帮不上你的忙,你的卡是买的呢还是自己做的呢?我是用WINDRIVER写的驱动程序,没用DS,你把PCR和LCR改成什么了呢?我们大家共同交流吧。
jerriaemail
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2003-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-23 21:39
我觉得你应该先在windows下位你的ram分配线性地址空间,然后将pci配置寄存器中的基地址映射到你在windows下所分配的线性地址,因为物理地址是不能直接访问的。
FactsMan
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2003-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-24 09:39
俺是这么改的,直接改寄存器:
m_IoPortRange.outd(0x08, 0x0FFFF800);
m_IoPortRange.outd(0x1C, 0x00001001);
m_IoPortRange.outd(0x30, 0x00000003);
m_IoPortRange.outd(0x44, 0x00001401);
m_IoPortRange.outd(0x50, 0x0020007F);
m_Cfg.WriteBaseAddress(4, CS2STARTBASEADDRESS);
然后再status = m_MemoryRange.Initialize(
pResListTranslated,
pResListRaw,
m_Cfg.BaseAddressIndexToOrdinal(4)
);
时就通不过了,这点我还能理解,应为开始本来就没有给CS2分配空间,所以pResListTranslated,pResListRaw就没有记录。
我觉得现在关键就是怎么让开始改PCI配置寄存器和局部寄存器的语句生效,或是WDM在系统分配好地址空间后就没有办法改了?
还有一点我想问一下:就是我用EEPROM配置的时候,单独用EEPROM编程器写和读都没有问题,而且内容都一样,但一插到PCI卡上再往外读PCI配置寄存器和局部寄存器时就是乱七八糟的了?这是为什么呀?是EEPROM有问题,还是我写的内容或格式不对呢?
给点建议吧,多谢各位啦!
游客

返回顶部