注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
357611988的个人空间 https://home.eeworld.com.cn/space-uid-109933.html [收藏] [复制] [分享] [RSS]
日志

PCI9054中PCI端地址和Local地址的转换重映射

已有 2619 次阅读2010-1-26 09:38 |

例如Local端地址空间大小为1MB,即0xFFFFFh。在写入31-4位时应该是它的反码即0x0000h,其中的低4比特位由03来表示,即0x00000h。设置完了地址空间范围之后,就需要指定Local地址与PCI地址转换时涉及到的比特位,PCI9054手册上设高12位为两者的转换位。即高12位为0xFFF,那么整个Local Space0的范围寄存器设置为0xFFF00000h

     在设置Local Space0 基址寄存器,手册上设置为0x12300000h,如此,在PCI地址与Local端地址转换的时候,用Local Space0基址寄存器的高12位即0x123h替换PCI地址的高12位。

    PCI端的寄存器,由PCI上的主机来设置,在系统上电之后,PC机会给PCI端分配一个基地址0x78900000h,而PCI基址寄存器中存放的是空间偏移地址的。或者是这样理解,0x78900000h是存放在PCI基址寄存器2中,在系统进行写入1PCI基址寄存器中时,PCI9054通过这个写入信息,结合Local Space0 Range寄存器的值来返回一个值,而实际上PCI基址寄存器的0x78900000h值没有变,所以在后面的寻址时这个PCI基址0x78900000h依然存在:)再或者,在系统写入1PCI基址寄存器的时候,已经把PCI基址寄存器的值读取出来并保存,在查询完Local端的地址空间大小的时候,重新写入0x78900000hPCI基址寄存器,这后面一种假设情况似乎更符合PCI9054手册中的:PCI software writes all ones to PCI Base Addressthen return the value of 0xFFF00000hand then PCI software writes to the PCI Base Address RegistersPlease Notethe PCI Base Address were written twice

      在应用程序开发操作硬件的时候,例如:PCI基址寄存器+offset ,通过PCI驱动底层的地址转换得到PCI基址寄存器(0x78900000h+offset,这个地址可以找到PCI9054芯片的内部,然后,PCI9054芯片再把这个PCI地址进行重映射到Local端的内存空间地址,这一步根据Local Space0 Range 寄存器的设置,其高12位由Local端基址寄存器的高12位替换即所谓的重映射,而Local端基地址的高12位是0x123h,所以,PCI端的地址” PCI基址寄存器(0x78900000h+offset”----àLocal端地址0x12300000h +offset,如此完成地址的重映射。

   

        在驱动程序的开发中,我们所操作的Local端内存的偏移地址就是offset。而在操作PCI9054芯片的内部寄存器时,其基地址由主机进行分配进PCI Base0Mem映射)和PCI Base1I/O映射)中。实际操作的地址就是PCI Base0 基址寄存器 + offset,通过offset来寻找芯片内部寄存器。

拷贝处:javascript:;

发表评论 评论 (1 个评论)
回复 xyxproceed 2010-11-2 08:57
你好,我想请问下PCI9054如果与外设进行通信,其地址线和数据线能否与外设直接连接,而不通过CPLD等实现的控制器

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章