EDN首页   博客首页

3

关于投票
PCI 配置空间的访问方法

访问配置空间可以采用两种方式:一是通过BIOS调用进行访问;二是在Intel CPU平台上可以通过I/O口进行访问。I/O访问方式比较简单。在开发PCI数据采集卡时,我采用了PLX公司提供的PLXMON软件对设备卡进行了调试,该软件可以访问设备卡的配置空间。另外,我又采用C语言编写了一段程序直接对配置空间进行了访问,效果不错,核心程序代码如下(需要注意的一点是,我当时在windows98平台上测试的,所以直接通过_inpd等函数访问IO端口,windows98之后IO端口对于应用程序进行了屏蔽~~只能在内核才能对IO端口进行访问):

#include <stdio.h>

#include <conio.h>

void main()

{ 

__u32 data,address;

 

address=0x80000000 + 9 * 8 * 0x100;  //插槽号为9

_outpd(0x0cf8, address);

data=_inpd(0x0cfc);

printf(“%x”, data);

address=0x80000004 + 9 * 8 * 0x100;  //访问第二个寄存器

_outpd(0x0cf8, address);

data=_inpd(0x0cfc);

printf(“%x”, data);

}

    0XCF8~0XCFB称为配置地址空间,0XCFC~0XCFF称为配置数据空间,这是两个双字空间,配置地址空间的格式如下:

最高位是配置访问使能位,要访问配置空间,使能位必须为1。位3024为保留位,只读且为0,总线号用在一个系统中从256条总线中选择一条,对应系统引导时PCI期间列表中的BUS NO项,在PC机中,每个PCI插槽的设备号是固定的,而且互不相同。功能号用来选择多功能设备中的某一个功能,最多由8种功能供选择,单功能设备此项为0。寄存器号为配置空间寄存器的索引号。最低两位必须为0

 

系统分类: 接口电路
用户分类: 总线技术
标签: 总线接口,PCI
来源: 原创
发表评论 阅读全文(685) | 回复(0)
总共 , 当前 /