idyllcheung
驱动牛犊
驱动牛犊
  • 注册日期2009-04-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2553回复:3

VxWorls下9054读runtime register问题

楼主#
更多 发布于:2009-09-07 22:36
各位大侠~~
我的问题总结如下:

      主要工作: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位)。

hwybird
论坛版主
论坛版主
  • 注册日期2006-11-11
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分988分
  • 威望359点
  • 贡献值0点
  • 好评度96点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-11-25 12:02
什么架构下的?有可能是没有空间映射,无法访问相应地址
philoman
驱动牛犊
驱动牛犊
  • 注册日期2005-05-29
  • 最后登录2011-07-13
  • 粉丝0
  • 关注0
  • 积分73分
  • 威望235点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-12-09 08:58
楼主的理解并没有问题,本人没有接触过VxWorks,对其内存管理方式不太了解;
在Windows下,内存是分用户态和内核态,且有物理地址与虚拟地址之分,PCIBAR0中保存的是物理地址,对于Windows下的用户程序而言,其不能直接访问物理地址,而是要通过虚拟地址间接访问;
不知道对楼主有没有帮助;
hwybird
论坛版主
论坛版主
  • 注册日期2006-11-11
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分988分
  • 威望359点
  • 贡献值0点
  • 好评度96点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-12-29 13:36
什么架构下的?
VxWorks采用平面方式管理内存。虚拟地址和真实地址可以相同。任何一个线程都是内核态。从你给的数据看来,第一个空间似乎是I/O空间,无须映射,但是在不同架构下的访问方式不同X86的需要用sysByteIn之类的函数
游客

返回顶部