阅读:3086回复:2
pci9054配置的存储器空间和I/O空间地址映射读写问题,请高手赐教!
(开发工具DriverStudio)pci9054配置的存储器空间和I/O空间地址是不是映射到m_MemoryRangex和m_IoPortRangex上?
还有m_MemoryRangex和m_IoPortRangex是映射到BAR几?比如我用两个:m_MemoryRange0,m_MemoryRange1和一个:m_IoPortRange0是不是分别映射到BAR0,BAR2,BAR1;如果是一个:m_MemoryRange0,两个:m_IoPortRange0,m_IoPortRange1又是如何映射的呢? 如果我对m_MemoryRange1或m_IoPortRange1进行读/写操作,它应该是对应到前面的存储器空间和I/O空间吧,比如m_MemoryRange1.outb(0Xxx, pBuffer,dwTotalSize)或m_IoPortRange1.outb(0Xxx, pBuffer,dwTotalSize),这个偏移地址0Xxx是全局地址还是局部地址? 用DriverStudio生成的框架里有个dwBytesSent表示传了多少数据,如何设置这个变量呢,是根据outb函数系统自己设的吗?我每次写数据后,dwBytesSent都是0,百思不得其解,请求高手指教! |
|
沙发#
发布于:2007-09-05 11:08
一般接口芯片的BAR0,BAR1都是被占用了吧?我不知道这么说是否准确。我的卡用的是9052接口芯片,BAR0和BAR1种的内容是我的EEPROM中的配置信息,当然,这个是在CNTRL中设置的。同时我把存储器影射到局部空间0,memory access,这时候BAR2种就是我的存储器的内容了。
所以我的理解是,具体的BARx要看你影射到局部空间x。 希望有点帮助吧。 |
|
板凳#
发布于:2009-07-14 21:04
BAR0大小0x100,为Local register,BAR2大小自定,在EEPROM中设定,为自己使用的内存空间,但是WriteFile一般不能达到64MBytes,所以设得太大无意义,BAR1是I/O端口,舍弃不用
|
|