oe2002
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:851回复:0

WinDriver603和Plx 9054 的问题:

楼主#
更多 发布于:2003-12-28 16:26
WinDriver603和Plx 9054 的几个问题:

看了一下WinDriver603的9054lib.c和9054的datasheet, 发现9054大致有以下几个空间:

(1) PCI配置空间包括厂商设备和几个基地址寄存器等
(2) 9054自定义的一些寄存器如runtime系列, DMA系列等
(3) local address space 0
(4) local address space 1
(5) EEPROM

WinDriver603的9054lib.c提供的对空间访问的函数有:
对(1)如:P9054_ReadPCIReg()
对(2)如:P9054_ReadReg(), 以BAR0为基地址寄存器
对(3)和(4)如:P9054_ReadByte() 用基地址+偏移量的寻址方法
             P9054_ReadByteLocal()用局部端物理地址的寻址方法
对(5)如:P9054_EEPROMReadDWord()

问题在对(3)和(4)的访问.

在9054lib.c中有函数P9054_SetMode(),我理解它的作用是从局部端地址得到基地址写入LAS0BA寄存器,供remap时使用. 因为9054提供了LAS0BA和LAS1BA分别对(3)和(4)空间进行访问,所以开始我以为9054lib.c只是提供了对(3)空间访问的例子函数.这样用P9054_ReadByteLocal()等local系列函数就只能对(3)空间进行访问.

可没想到在WinDriver603提供的例子程序P9054_DIAG.c中,PLX_BoardAccess()函数通过调用P9054_ReadByte()和P9054_ReadByteLocal()等函数,通过两种寻址方法可以访问(3)和(4)两个空间!

不知哪位朋友可以作出解释,谢谢!

另外,我理解P9054_IntEnable()函数是要先取消中断,再执行中断例程,最后开中断.但好像还要添加什么语句,我想在调用中断例程之前添加
WD_Transfer(hPlx->hWD,&hPlx->Int.Trans[0]);//读INTCSR的值
WD_Transfer(hPlx->hWD,&hPlx->Int.Trans[1]);//写入INTCSR,取消中断

不知对不对?

最新喜欢:

mapoflmapofl
游客

返回顶部