阅读:1288回复:7
关于PCI板卡的memory读写
我刚刚接触PCI的驱动,正在做WDM驱动,环境是Windows2K + Windows 2K DDK + DriverStudio3.1
在一块板子上测试,用DriverStudio生成WDM驱动,增加了一个KMemoryRange m_MemoryRange0。 在OnStartDevice里Initialize这个m_MemoryRange0,想测试通过m_MemoryRange0读写。 我不知道是不是我用得不对,感觉好像写不进去,不管怎么写,读出来的都是类似0xff这样的数据,比如 UCHAR data00 = 0x01; m_MemoryRange0.outb(0x200, data00); data00 = m_MemoryRange0.inb(0x200); t <<"data00: "<<data00<<"n"; 发现0x01根本没有写进去 请高手指点一下,多谢 |
|
沙发#
发布于:2004-07-22 21:34
那个写的应该是你的内部的寄存器的值,你把01写到寄存器里面去了
|
|
|
板凳#
发布于:2004-07-23 09:54
不好意思,内部寄存器是不能写的?
|
|
地板#
发布于:2004-07-27 16:35
我在开发中遇到了的问题还不如你,我的程序在通过driver winzard自动生成后(生成了m_ioportrange0),什么程序都不写,也会出现ERROR opening device:return from creatfile这个错误,我只是想访问并口而已,你的程序既然通过了这一关,可否告诉我一下是如何解决的?
|
|
地下室#
发布于:2004-07-27 17:20
我没有遇到过你的问题。
是不是你的板子没有I/0 range? |
|
5楼#
发布于:2004-07-27 17:33
能都用qq聊天
我想问你写问题,多谢大侠指教 我的qq:66267476 |
|
6楼#
发布于:2004-07-29 00:44
PCI 的 BAR0 是PCI配置寄存器空间一般不要对其进行写操作!
你EEPROM的配置所对应的空间应该是在后面的 如果EEPROM里配置了BAR0 & BAR1有效, 那么你配置的第一个Mem的Local Space应该是在BAR2, 也就是MemoryRange2.. 你配置的第一个IO的Local Space 应该是在BAR3... 以此类推…… |
|
7楼#
发布于:2004-07-30 10:33
我也遇到了同样的问题:环境是Windows2K + Windows 2K DDK + DriverStudio3.1
在一块板子上测试,用DriverStudio生成WDM驱动,增加了一个KMemoryRange m_MemoryRange0(bar0)和KMemoryRange m_MemoryRange1(bar3)。 在OnStartDevice里Initialize这个m_MemoryRange0和m_MemoryRange1,对m_MemoryRange0能写进去,可是对m_MemoryRange1好像写不进去。 我不知道是不是我用得不对,程序: m_MemoryRange0.outb(0x6c, 0x40000000); m_MemoryRange1.outb(0x4c00, 0x140000); m_MemoryRange1.outb(0x4000, 0x140000); m_MemoryRange1.outb(0x8c00, 0x700); 发现0x700根本没有写进去 你们的解决了,能告诉我怎么回事么? |
|