阅读:1309回复:7
pci map
我现在有一个外围设备,是通过pci 总线连接的,
我怎样把 这个设备的寄存器组映射到memory中 我现在是这样做的,把一个地址如(0xd0000)写道pci head 寄存器中,然或我到那个地址去读数据,结果不对,不知为什么? 我是在dos中开发的。用c 语言,请大家帮帮忙!!! |
|
沙发#
发布于:2002-04-23 11:30
0xD0000只是一个物理地址,而在程序中你能访问到的是虚拟地址,所以你需要进行Memory Map, 在DOS下,你可以调用DosDpmi函数完成此功能。
|
|
|
板凳#
发布于:2002-04-23 11:47
我在c 语言中没有找到你说的函数
请您再指点一下 |
|
地板#
发布于:2002-04-23 11:55
DosDpmi32不是C中的函数,你可以在网上Search一下,找它的obj文件,和你的obj文件进行链接生成exe.
|
|
|
地下室#
发布于:2002-04-23 12:00
非常感谢
在c 中可以使用MK_FP 但是 就是map 的不对 不知为什么 对了 在pci中map 的空间,是不是固定的 |
|
5楼#
发布于:2002-04-23 12:52
你应该用dpmiMapPhysicalRegion函数来做。还有,每次map的虚拟地址并不是固定的。
|
|
|
6楼#
发布于:2002-04-23 20:54
pharos老兄,我和wang_wcj有同样的问题,不过是在win2k下,我读出了base address,再haltranslatebusaddress,mmmapiospace,read_register_ulong
可得到的值不对,哪里有问题呢? 给分的话,我再开个帖子,您说一声我就给了。 帮帮忙好吗? |
|
7楼#
发布于:2002-04-23 21:04
不好意思,我没有看出有什么不对的。 你用的函数应该说都是正确的,我只能建议你再看一下这几个函数的入口参数你有没有用错或者理解错。
|
|
|