阅读:2636回复:3
VxWorls下9054读runtime register问题
各位大侠~~
我的问题总结如下: 主要工作:VxWorks下PCI板卡的驱动(PCI板卡采用PLX9054)。 疑惑:PLX9054分为配置空间、IO空间和Memory空间。 上电后可以访问配置空间的基地址寄存器:BAR0-BAR5,我的理解是BAR0和BAR1分别是MEM方式和IO方式访问内部寄存器(Local runtime and DMA register)的基地址。 比如从BAR1读取到0xe001,那么对地址(0xe000+0x70)进行读取,得到的应该是runtime register中的Device ID和Vendor ID。但是基于上面的这种做法,我读取到的是全1的值,不正确。 我在想,是否要对BAR1中读取到的基地址做一些移位或者其他的处理(因为其最后一位是Indicator位)。 |
|
沙发#
发布于:2009-11-25 12:02
什么架构下的?有可能是没有空间映射,无法访问相应地址
|
|
板凳#
发布于:2009-12-09 08:58
楼主的理解并没有问题,本人没有接触过VxWorks,对其内存管理方式不太了解;
在Windows下,内存是分用户态和内核态,且有物理地址与虚拟地址之分,PCIBAR0中保存的是物理地址,对于Windows下的用户程序而言,其不能直接访问物理地址,而是要通过虚拟地址间接访问; 不知道对楼主有没有帮助; |
|
地板#
发布于:2009-12-29 13:36
什么架构下的?
VxWorks采用平面方式管理内存。虚拟地址和真实地址可以相同。任何一个线程都是内核态。从你给的数据看来,第一个空间似乎是I/O空间,无须映射,但是在不同架构下的访问方式不同X86的需要用sysByteIn之类的函数 |
|