首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

pci IO地址空间与Momery地址空间,该如何处理

2013-01-05 
pci IO地址空间与Momery地址空间PCI的基址寄存器(BA0-BA5)可以把PCI设备配置为IO地址空间和Momery地址空间

pci IO地址空间与Momery地址空间
PCI的基址寄存器(BA0-BA5)可以把PCI设备配置为IO地址空间和Momery地址空间。这两种地址空间都什么不同?被配置为不同地址空间的PCI设备有什么不同?请大家赐教!
[解决办法]
有几点:
1 IO空间有限;虽说X86处理器的IO空间可以寻址4G;但是windows系统里给外设分配的IO空间共64KB;
  所以就要求单个PCI设备若使用了IO空间,其大小不要超过256字节;
  MEMORY空间则没有这个限制,受限于操作系统能够管理的内存大小;
2 在驱动程序里面访问IO空间,可以直接使用IO指令访问;
  在驱动程序里面访问memory 空间,需要先将其物理地址(physical address)映射到虚拟地址(virtual address),然后才能访问;
3 memory 空间访问的时候可以支持burst, IO空间访问的时候只能一个一个访问,所以从性能上看,memory空间访问的性能要高于IO空间。
[解决办法]
网上有相关的PCI内存映射的程序实例,程序中有对PCI配置空间的操作,改改就可以了。内存映射成功后,直接对内存操作。当然对PCI配置空间的配置,一般有对应的EEPROM,将配置信息写到EEPROM中,系统上电后,BIOS读取EEPROM中的配置信息,写入PCI配置空间,在初始化程序中,根据PCI配置空间的信息,进行相应的初始化操作,当然包括内存映射和中断挂接之类的。
找些对PCI配置的论文来看看,同时结合PCI规范中的相关内容,很好理解的!
希望以上能给你些许启发!

热点排行