C语言读PCI
来源:互联网 发布:网络社交英文怎么说 编辑:程序博客网 时间:2024/05/17 00:55
C语言读PCI ——利用I/O命令
一、 PCI访问相关知识不了解PCI的配置空间是不可能的,配置空间是一块容量为256字节并具有特定记录结构或模型的地址空间,通过配置空间,我们可以了解该PCI设备的一些配置情况,进而控制该设备,除主总线桥以外的所有PCI设备都必须事先配置空间。PCI配空间如下图: PCI配置空间被分为64个4个字节空间,从0—63进行编号。
二、 PCI CONFIG-ADDRESS配置空间 PCI设备给我们提供了两个32位的I/O空间,可以让我们进行读写操作。一个是CF8H另一个是CFCH,这两个端口对应PCI桥路的两个寄存器。当桥路看到CPU在局部总线对这两个I/O空间进行双字操作时,就将该I/O操作转变为PCI总线的配置操作。寄存器CF8h用于产生配置空间的地址(CONFIG-ADDRESS),寄存器CFCh用于保存配置空间的读写数据(CONFIG-DATA)。 Config-address 配置空间如下图,我们在访问PCI空间时,就是按下图所示进行遍历。寄存器号:选择配置空间中的一个双字(32位);功能号:选择多功能设备中的某一个功能,有八种功能(0—7);设备号:在一条总线上选择32个设备中的一个。0—31;总线号:从系统256条总线中选择一条,共256条。0—255;尽管理论上有256条总线,但实际PC机上的PCI插槽的总线号总是1,我们访问0到15就够了。
三、遍历PCI 在windows下遍歷PCI,需用到winio.dll。 1、 配置CF8H配置空間。即,將第31位(使能位)置1,總號,設備號,功能號,寄存器號相等均置0,得到(二進制:10000000000000000000000000000000)(16進制:0x80000000)。 2、 確認需遍歷多少條BUS,設備號,功能號,從0開始。 3、 使用CF8H空間對PCI配置空間進行遍歷訪問。再利用位移方式,將bus號<<16,設備號<<11,功能號<<8和0x80000000相加得到值Reval。 4、 利用winio中的SetPortVal(0xcf8,Reval,4);再用GetPortVal到CFCH空間將遍歷的PCI值取回。Pci=GetPortVal(0xcfc). 5、 用Pci的值與0xffffffff進行比較,來半判斷設備是否存在。 代码如下:
- C语言读PCI
- C语言:编写访问PCI的小工具
- pci-skeleton.c
- PCI
- PCI
- PCI
- PCI
- pci
- PCI
- C语言读文件
- C语言读txt
- c语言读文件
- 周立功 CAN PCI接口卡C#语言示例
- Linux C获取PCI设备名和厂商名
- PCI,PCI-X,PCI-E
- PCI,PCI-X,PCI E
- PCI PCI-X PCI-E
- 《PCI Express系统结构导读》-读后
- 使用oprofile 过程
- 使用BackTrack4清除/修改Windows用户密码
- is not allowed to connect to this mysql server
- 如何检查电脑是否被安装木马及防范技巧
- 嵌入式linux c 学习笔记3-date
- C语言读PCI
- sql refid
- vb.net控制TextBox控件只能输入数值型字符串
- 剑盟现在开放注册了
- 32位windows 支持大内存。
- vb.NET中为组合框添加自动查询功能
- 英文自我介绍 终身受益
- DateTimePicker中自定义时间或日期显示格式
- php 怎样读取word,excel,pdf,