zlinzhu
驱动牛犊
驱动牛犊
  • 注册日期2007-06-20
  • 最后登录2007-09-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1663回复:3

9054如何写基址寄存器

楼主#
更多 发布于:2007-08-20 15:31
看到过这样的话:

PCI配置寄存器提供了6个基地址寄存器,其中BASE0和BASE1用来访问其他配置寄存器的基地址,BASE0是其他配置寄存器映射到PCI端内存的基地址,BASE1是其他寄存器映射到PCI端I/O的基地址。可以通过PCI端内存和PCI端I/O来访问LOCAL配置寄存器与其他3种寄存器。

BASE2~5四个空间提供了访问本地端所接的4个芯片(当然可以少于4个),它们将本地端的芯片通过本地端地址(LOCAL配置寄存器中设)翻译成PCI的地址,也就是将本地的芯片映射到系统的内存或 I/O口。

是不是可以这样理解:
1。通过base0和base1,我们可以访问pci桥片(如9054)上的其他寄存器?若真是如此,如何访问呢?????
2。当有一个芯片(或说是一段空间)的基地址写到了某个基址寄存器后,我们就可以通过此基址+偏移地址访问此段空间了?若是如此,那这个基地址该如何写到某个基址寄存器(比如base2)呢??是不是要用到base0和base1呢????
bloomrain
驱动牛犊
驱动牛犊
  • 注册日期2005-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-21 11:43
除非你要在可编程器件(比如FPGA)里实现一个PCI桥片模块,否则不用关心寄存器的具体工作过程。PCI9054会自动完成对各种寄存器的访问并且根据应用改写相应寄存器值。
你要实现的功能是通过编写PCI BUS端和LOCAL BUS端的程序完成的。
举个例子,如果想从主机写一个数到PCI设备上,那么在主机PCI总线上插入PCI卡,安装PCI9054 SDK里的对应驱动程序(或者自己写一个驱动),再写一个应用程序,可以调用PLX API函数"PlxMemoryWrite"完成这次写操作。这时PCI9054的本地总线端会发出你在PlxMemoryWrite函数中指定的地址和数据,PCI卡的本地CPU完成对地址的译码,数据就存入本地存储空间。
这个过程中PCI9054操作了很多内部寄存器才把PCI BUS上的地址数据信息“翻译”到LOCAL BUS上,但是这些操作对用户“透明”,不用具体关心。
zlinzhu
驱动牛犊
驱动牛犊
  • 注册日期2007-06-20
  • 最后登录2007-09-13
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-22 13:49
感谢您的指点,真的给了我很大帮助,谢谢。

我还有一些问题想要向您请教,能冒昧要您一个联系方式吗,邮箱QQ之类的。

我的QQ:747797115
邮箱:zhulynn@qq.com
zixuan1982
驱动牛犊
驱动牛犊
  • 注册日期2007-08-28
  • 最后登录2008-02-02
  • 粉丝1
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-01 16:57
基地址是不用分配的,pc机会自动分配的,我们只需分配它的使用空间,根据自己需要的空间,比如你后面加fpga。用plx的那个软件可以自动生成配置文件

qq78234813
游客

返回顶部