dos操作系统下pci板卡访问方法的研究与实现

上传人:第*** 文档编号:31626944 上传时间:2018-02-09 格式:DOC 页数:6 大小:56.50KB
返回 下载 相关 举报
dos操作系统下pci板卡访问方法的研究与实现_第1页
第1页 / 共6页
dos操作系统下pci板卡访问方法的研究与实现_第2页
第2页 / 共6页
dos操作系统下pci板卡访问方法的研究与实现_第3页
第3页 / 共6页
dos操作系统下pci板卡访问方法的研究与实现_第4页
第4页 / 共6页
dos操作系统下pci板卡访问方法的研究与实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《dos操作系统下pci板卡访问方法的研究与实现》由会员分享,可在线阅读,更多相关《dos操作系统下pci板卡访问方法的研究与实现(6页珍藏版)》请在金锄头文库上搜索。

1、DOS 操作系统下 PCI 板卡访问方法的研究与实现摘要:简述了DOS操作系统下访问PCI板卡的机理。给出了两种访问配置空间的方法,分别介绍了访问采用内存映射局部空间和采用IO映射局部空同的方法。通过给出的BC+3.1中编写的相应程序对访问方法进行了说明。关键词:DOS 操作系统;PCI;配置空闻;局部空间;PCI90521 前言当前,随着计算机技术的飞速发展,对于高速、高性能板卡的需求越来越大。曾在工控机中广泛应用的ISA总线逐渐被淘汰。相比之下,PCI总线作为一种高性能的局部总线,具有兼容性好,传输速度高,不受处理器限制以及支持“即插即用”(PlugPlay)等优点,正逐步取代ISA总线而

2、广泛应用于PC机和工控机中。在今后相当长的一段时间内,开发应用基于PCI总线的扩展板卡将显得尤为重要。Windows操作系统和DOS操作系统是目前在工控机中使用较多的两种操作系统,有着各自的优缺点。Windows操作系统虽具有多任务多线程的特点,但由于他采用消息传递机制,虽能实时响应外部事件,但其处理并不是实时的。虽然可以通过对底层模块进行修改,使其能够实时处理外部事件,但会给系统的稳定性、健壮性带来不良的影响。相比之下,DOS是一种单任务的操作系统,对硬件资源要求较少,实时性也较好,在DOS下的开发工具已经相当成熟,而且DOS内核已公开,可免费使用。基于上述考虑,在一些对于系统实时性、可靠性

3、要求比较高的的场合,如在电力系统自动化领域中的微机保护,故障录波等系统中,仍然采用DOS作为其软件开发平台。2 PCI板卡的访问一般来说,PCI板卡都可以分为2个部分:数据处理部分和PCI接口部分。数据处理部分一般完成信号的获取、分析及处理等操作,而PCI接口部分则完成计算机与数据处理部分之间的数据传递。在计算机系统上电时,通过固化在BIOS中的POST(PowerOn SelfTest)程序自动检测PCI总线,确定PCI总线上的设备及其配置要求,为各板卡分配相应的内存空间、IO空间以及中断等。为了完成对PCI板卡的访问,首先必须读取PCI板卡的配置空间,以获取一系列的配置信息如设备ID、制造

4、商ID和内存映射或IO映射的基地址等。然后,通过获得的基地址,采用下文所述的方法就可以对PCI板卡局部空间的数据进行读写操作。21 配置空间的访问PCI协议定义了3种地址空间:配置空间,IO空问和存储器空问。配置空间是PcI所特有的,他提供了一个合适的配置设备的集合,使其能满足当前和未来的系统配置特性的需要,他为所有的PCI设备提供了系统软件可以利用的功能,可以通过访问他来进行自动配置,这极大地增强了PCI设备的灵活性。一个PCI设备可以包含一个或多个(最多8个)独立的PCI功能(即逻辑设备),PCI配置空间分为PCI设备中包含的每一个功能的独立的、指定的配置地址空间。每个PCI功能都应具有6

5、4个配置双字用于实现配置寄存器。其中前64个字节为头标区,后面的192个字节为设备相关信息。在头标区中,前16个字节的定义是确定的,后48个字节的具体含义因设备而异,具体说明如表1所示。在DOC下对配置空间的访问办法有2种:方法一,通过读写32 bit PCI配置地址端口0xCF8和PCI配置数据端口OxCFC来进行访问。配置地址端口OxCF8的信息格式如表2所示。其中,使能位为“1”时表示使能。保留位为“0”。总线号为0255,设备号为O31,功能号为07,寄存器号用于选择目标功能配置空间的一个双字寄存器。表1 配置空间头标区的结构:00h 设备 ID 制造商 ID04h 状态 命令08h

6、类别码 版本ID0ch BIST 头部类型 延迟计时器 cache线性范围10h 基地址寄存器28h CardBus CIS Pointer2ch 子系统ID 子系统制造商ID30h 扩展ROM基地址寄存器34h 保留3ch Max_Lat Min_Gnt Interrupt pin Interrupt lin表2 配置地址寄存器0xcF8的信息格式:31 30 24 23 16 15 11 lO 9 8 7 2 l 0使能 保留 总线号 设备号 功能号 寄存器号 00访问特定的PCI功能设备的配置空间一般分为以下几个步骤:首先,按照端口0xCF8的信息格式,组成相应的配置字,写入端口OxCF

7、8中。然后通过读取端口0xCFC,得到每个功能设备配置空问中相应的寄存器内容。接着,由读出的配置空间中设备ID和制造商ID与指定的功能设备的设备ID和制造商ID相比较。若不匹配则重复进行上述操作直到匹配为止。最后,由获得的相应的总线号、设备号以及功能号,通过读写端口OxCF8和0xCFC就可以访问特定板卡的配置空间了。下面给出一个通过PCI配置寄存器0xCF8和OxCFC来查找特定PCI板卡的函数。程序采用BC+3.1编写,PCI接口芯片采用PLX公司的PCI9052,设备ID为0x9050,制造商ID为Ox10B5,使用寄存器号为0x00。由于BCC+ 3.1中不提供一次读写32 bit数据

8、的端口函数,故用嵌入汇编的方法编写了两个32 bit读写数据的函数outpd(),inpd()。int scan_pci()bus=0;device=0; /bus为总线号、device为设备号for(char i=O;i5;i+)for(char j=O;j32;j+)bus=I;device=j;port_in=Ox80000000+bus*0x10000十(device*8)*0x100l; /组成配置字outpd(Oxcf8,port_in); /写配置字蓟配置地址寄存器0xCF8port_out=inpd(Oxcfc);/读取配置数据寄存器0xCFCif(port_out=Ox905

9、010b5);/配置寄存器中设备ID和制造商ID是否与PCI设备的相符return 0;/找到PCI设备return一1; /未找到PCI设备方法二,通过BIOS中断来进行访问。中断号为0xlA,所用到的子功能号为0xB102(查找设备)和0xB10A(读设备配置空间)。通过调用子功能0xBl02查找设备的总线号,设备号和功能号,然后根据相应的寄存器号,通过调用子功能0xBlOA读取相应的配置信息,从而完成配置空间的访问。22 局部空间的访问在完成对PCI设备配置空间的访问之后,可以得到PCI设备IO映射或内存映射的基地址,通过这个基地址就可以对PCI设备的局部空间进行访问。(1) 通过IO映

10、射的方式进行访问的方法在DOS下,由于系统未对计算机端口的访问做出任何限制,所以可以使用一般的IO指令或函数,如BC+3.1中的inportb和outportb等,来进行IO端口的读写。这些操作方便简单,在一般的场合可以很好地满足要求,但是由于x86系列IO空间最大为64K,其中有一部分为系统占用或保留,一部分为其他板卡所占用,剩下的空间有限,若PCI设备需要大量映射数据,则需要采用内存映射的方式。(2) 通过内存映射的方式进行访问的方法在一般情况下,都是在DOS实模式下开发应用程序的,这样不能有效的应用内存资源,只能对1 MB以内的常规内存进行访问,然而PCI设备的内存映射又是由系统自动完成

11、的,既可能映射在1 MB以内,也可能映射到1 MB以外。采用一般实模式的访问方法就存在着一定的局限性,为了克服这种局限性,可以通过在DOS程序中嵌人保护模式程序段的方法,完成在DOS实模式下对4 GB内存空间的直接访问。为了完成在DOS实模式下对4 GB内存空间的直接访问,有必要深入了解DOS的实模式、保护模式以及在这2种模式下的寻址方式。在DOS实模式下,可以通过执行类似“MOV AX,ESI”的指令,来进行间接寻址操作访问内存空间,但由于ESI的内容必须在0FFFFH范围内,使其寻址范围受到了限制。要扩大其寻址范围就必须扩大段描述符高速缓冲寄存器中的界限值。但CPU在实模式下不能改变这些界

12、限值。必须在保护模式下完成该操作。因此必须从实模式切换到保护模式中,通过向相应的段寄存器写入相应的选择字SEL,装载由SEL对应的具有4 GB界限的段描述符到段描述符高速缓冲寄存器中去,然后返回到实模式下,由于段描述符高速缓冲寄存器的内容不发生变化,CPU就可以通过32 bit寄存器间接寻址操作来实现4GB内存的访问。下面给出了进出保护模式,设置4 GB段界限的子函数,使用BC+3.1中嵌入汇编的方式编写。在主程序中调用这个子函数后,就可以用间接寻址操作来实现4 GB内存的访问了。unsigned long GDT_Table= /全局描述符表GDT0,O, /选择字0h,NULL,保护模式下

13、系统要求Ox0000FFFF,0x008F9200;选择宇8H,基址0,界限值4G-1unsigned char GDT_Addr6=0;/存放GDT的基地址和长度void LoadDSLimit4G()Asmcli /清中断push ds /将DS压人堆栈push es /将ES压入堆栈mov word ptr GDT_Addr0,(2*8-1)/存入GDT的长度mov eax,dsshl eax,4 /段地址左移4 bmov ebx,0 /ebx清零mov bx,offset GDT_Table /GDT的偏移地址add eax,ebx /GDT的线性地址mov dword ptr GDT

14、_Addr2,eax /存人GDT的线性地址1gdt fword ptr GDT_Addr /重新调入GDTmov bx,8 /设置数据段描述符的选择字mov eax,cr0 /取出cr0寄存器的值or eax,1mov cr0,eax /进入保护模式mov es,bx /ES重载数据段描述符mov ds,bx / ES重载数据段描述符and eax,0fffffffehmov crO,eax /返回实模式pop espop dssti /开中断3 结语我们开发了一种基于PCI总线的GPS同步时标卡。该卡的PCI接口部分采用PLX公司的PCI9052接口芯片。该卡使用了PCI9052的局部地址空间0,采用内存映射方式,分配了2K地址空间,可映射于内存空间的任何地方。该卡应用在电力系统故障录波采集站中,采集站采用的是D0S6.22操作系统。当电力系统发生故障时,采用本文介绍的方法,录波装置可从PCI板卡上读取200 us的时间刻度作为故障发生的精确时刻。参考文献1 PCI Special Interest GroupPCI local bus specification revision 21oregon:PCI Special Interest Group,19952 陈家棋, DOS实方式下直接访问4GB内存, 微型机与应用,1997,(10):4-6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号