计算机接口技术实验手册.docx
目录第一章概况1. 1硬件说明1. 2软件说明第二章系统介绍和安装方法2. 1 PCI9054性能简介2. 2结构组成2. 3 PCI9054主要寄存器的设置2. 4 DJ-598PCI实验机与PCI接口卡的连接2. 5驱动程序的安装2. 6使用PLXMON软件第三章基本接口技术实验实验一获得PCI设备配置空间2.1.1 实验要求2.1.2 实验目的2.1.3 实验原理2.1.4 实验内容及说明2.1.5 实验步骤实验二基本I。口扩展实验2.2.1 实验目的2.2.2 实验内容说明2.2.3 实验原理图2.2.4 实验步骤实验三PCI中断实验2.3.1 了角犁尸C/9054中断的工作方式2.3.2 实验目的2.3.3 实验内容及说明2.3.4 实验步骤实验四可编程定时器/计数器8253实验2.4.1 实验目的2.4.2 实验内容及说明2.4.3 实验原理图2.4.4 实验步骤实验五可编程并行接口8255实验2.5.1 实验目的2.5.2 实验说明2.5.3 实验原理图2.5.4 实验内容2.5.5 实验步骤2实验六8250通用串行通信实验2.6.1 实验目的2.6.2 实验说明2.6.3 实验原理图2.6.4 实验内容2.6.5 实验步骤实验七A/D转换实验2.7.1 实验目的2.7.2 实验内容及说明2.7.3 实验原理图2.7.4 实验步骤实验八D/A转换实验2.8.1 实验目的2.8.2 实验说明1.1.1 验原理图3.8.4 实验内容3.8.5 实验步骤实验九键盘显示实验3.9.1 实验目的3.9.2 实验说明3.9.3 实验内容3.9.4 实验原理3.9.5 实验步骤实验十16*16 LED中文字幕实验3.10.1 实验目的3.10.2 实验内容及说明3.10.3 实验原理图3.10.4 实验步骤实验H128*64点阵式LCD实验3.11.1 实验目的3.11.2 实验内容及说明3.11.3 实验原理图3.11.4 实验步骤实验十二直流电机驱动实验3.12.1 实验目的3.12.2 实验内容及说明3.12.3 实验原理图3.12.4 实验步骤实验十三步进电机驱动实验3.13.1 实验目的3.13.2 实验内容及说明3.13.3 实验原理图3.13.4 实验步骤实验十四开关继电器实验3.14.1 实验目的3.14.2 实验内容及说明3.14.3 实验原理图3.14.4 实验步骤实验十五电子音乐实验3.15.1 实验目的.3.15.2 2实验内容及说明3.15.3 实验原理图3.15.4 实验步骤实验十六重新定义PCI设备的地址空间3.16.1 实验要求3.16.2 实验目的3.16.3 实验方法3.16.4 实验结论实验十七8251可编程通讯接口与PC机通讯3.17.1 实验目的3.17.2 实验内容3.17.3 实验接线图3.17.4 实验编程指南3.17.5 实验步骤实验十八8279键盘接口显示实验3.18.1 实验目的3.18.2 实验内容3.18.3 实验接线图3.18.4 实验框图3.18.5 实验步骤实验十九32位输入输出实验3.19.1 实验目的3.19.2 实验内容3.19.3 实验接线图3.19.4 实验框图3.19.5 实验步骤实验二十32位存储器实验3.20.1 实验目的3.20.2 实验内容3.20.3 实验接线图3.20.4 实验框图3.20.5 实验步骤实验二十一 DMA传送实验3.21.1 实验目的3.21.2 实验内容3.21.3 实验接线图3.21.4 实验框图3.21.5 实验步骤第四章高级接口技术实验4.1初识VXD4.1.1了解虚拟设备驱动程序(VxD)和虚拟机(VM)4.7.2 Windows 9x/ME的运行及执行环境4.1.3在Windows中实现虚拟环境4.7.4 VxD简介4.7.5以。开发工具简介4. 2基本VXD实验4.1.1 实验内容4.1.2 实验原理4.1.3 实验步骤及程序参考4.3 WIN32应用程序和VXD之间的通信4.3.1 实验目的4.3.2 实验内容4.3.4 实验原理4.3.5 实验步骤4.4为PCI总线扩展卡设计VXD实验4.4.1 实验目的4.4.2 实验内容4.4.3 实验原理.4.4.4 实验步骤4.5在WIND0WS9X/ME下获取PCI配置空间4.6基本I/O输入输出4.6.7 I/O驱动程序实例4.6.2 Ring3层应用程序调用QDDJPLX.VxD4.6.3实验步骤4. 7存储器的操作4.1.1 Windows9x/MET映射存储空间的处理4.1.2 映射与解映射VXD的范例4.1.3 ring3层调用Mem.vxd的范例.4.1.4 实验步骤4. 8在VXD中处理硬件中断.4.1.1 的中断处理及在ring。产生ring3层指定窗口的消息4.1.2 中断处理4.9 PCI设备的WDM驱动程序设计之DS篇4.9.1 开发工具安装篇4.9.2 利用向导生成程序框架和设备配置信息4.9.3 PCI设备的配置空间的访问4.9.4 I/O端口的访问4.9.5 内存的访问4.9.6 中断的处理4.9.7 驱动程序的安装4.9.8 驱动程序的调试和调用4.9.9 应用层调用WDM驱动程序的方法4.9.10 PCI资源配置的获取4.9.11 应用程序控制WDM驱动程序以及进行数据交换的方法。4.9.12 输入输出处理4.9.13 怎样从内核驱动程序向应用程序发消息4.10 PCI设备的WDM驱动程序设计之DDK篇带*选配模块不在基本配置中附录附录1 INF的标准段附录2 PCI BIOS函数附录3 VTOOLSD的安装及VC+6.0配置附录4 VXD调用接口说明附录5 DEBUG调试软件的使用附录6 Softice驱动调试工具使用说明附录7 TURBO DEBUGGER调试器的使用第一章概况DJ-598PCI开发板是启东市东疆计算机有限公司开发设计的高性能的PCI总线开发平台,采用了PLX公司的 PCI9054芯片作为PCI的接口芯片,PCI90XX系列 PCI接口芯片其低成本、高性能的特点是举世公认的,用户可放心使用。1.1硬件说明硬件包括两大部分:PCI接口卡一块,DJ-598PCI实验机。PCI接口卡主要由PCI9054、93cs56L、组成。P成9054是 PLX公司的PCI90XX系列芯片中的一款从模式桥芯片(其硬件与PCI9050相兼容),93CS56L (EERP0M)用于存放PCI9054初始化设置信息,在开发板上还提供了一个PCI总线扩展插座,可提供8位和16位,32位的总线宽度。可与PLX公司的开发软件PlxMon联合使用,用户可重新定义总线宽度,I。、MEMORY地址空间,中断方式等。与DJ-598PCI实验仪相连可实现以下实验:基本单元实验内容主控模块1PCI 转8,16,32位接口1、8,16,32位总线接口及系统电源输出接口。2、提供16位地址数据总线,符合PCI接口的控制插口3、配有PCI接口转换卡(PLX9054芯片)常用I/O实验模块1、74LS244与74LS273基本输入/输出实验2、32位输入输出实验3、8253定时器与计数器和分频器实验4、8255通用I/O接口实验5、8250通用串行口接口实验,RS232实验,8251与PC机通讯实验PCI中断PCI中断实验8259中断实验(PCI总线下有)AD/DA1、ADC0809并行8位,TLC549串行A/D转换实验2、DAC0832并行8位,TLC5615串行DA转换实验DRAM实验模块1、PCI访问8,32位存储器读写实验8位,32位DMA传送实验PCI9054 DMA传送验8237 DMA传送实验(PCI总线下有)键盘LED显示模块、4*6键盘与6位LED八段显示实验1、8255,8279组成的键盘显示接口2、16*16点阵LED中文字幕实验LCD实验模块1、128*64阵式LCD显示实验(选配)2、1602字符显示液晶控制与信号源模块1、配有带驱动的12个LED发光极管显示2、8路手动电平控制3、2路手动单脉冲输出4、15路振荡方波信号源:32kHZ,64kHz,128kHz,256KHz,512KHz,1MHz 等,电机、喇叭1、四相步进电机2、直流电机3、音频电路,喇叭,蜂鸣器.4、单刀双掷继电器ISP下载接口1、用于80s52,89s53在线下载系统电源+5V/3A、±12V/0.5A05V直流可调电压1. 2软件说明本实验的驱动所采用的软件有三种,分别是Microsoft 的Visual C+6.0、VTOOLSD, DriverStudioo 所用的驱动程序调试工具是Dr iverMoni tor或Soft Ice。使日这些软件,可以在短期内快速准确的构成驱动程序的框架,便于驱动的编写。同时调试工具能准确的地了解驱动的运行情况,对驱动进行跟踪,便于修改。用户也可以用windri ver来开发驱动,作前期的硬件快速测试,进行基本的读写测试本实验的应用程序全部采用Visual C+6.0开发,其与驱动的通讯方法将在之后介绍,因为驱动是在VC基础上开发的,所以应用程序也利用VC,其优点是显而易见的。第二章系统介绍和安装方法2. 1 PCI9054性能简介PCI9054是PLX公司继PCI9050之后推出的低成本PCI总线接口芯片,低功耗,PQFP176pins封装,可以使局部总线快速转换到PCI总线上。其主要特点:1、符合PCI2.1规范,支持低成本从属适配器;2、支持PCI总线到ISA总线的单周期存储器(8位或16位)读写和I/O访问及32位的存储器和IO读写;3、支持来自局部总线的中断及DMA等中断,可生成一个PCI 中断4、PCI9054的局部总线与PCI总线的时钟相互独立运行,局部总线的时钟频率范围为。40MHz, TTL电平,PCI的时钟频率范围为033MHz;5、可编程的局部总线配置,支持复用或非复用模式的8.16或32位的局部总线;6、串行EEPROM提供PCI总线和局部总线的部分重要配置信息;7、4个局部设备片选信号,各设备的基址和地址范围及其映射可由串行EEPROM或主机编程实现;8、4个局部地址空间,基址和地址范围及其映射可由串行 EEPROM或主机编程实现。3. 2结构组成如图2-1所示,PCI9054的接口是由PCI总线接口、局部总线接口和串行总线接口组成。器件功能:PCI9054作为总线目标接口芯片,为非PCI设备与PCI总线提供数据通道,其功能如下:(1)复位及初始化上电时,PCI9054的内部寄存器由PCI总线的RST#信号复位,在局部总线上输出LRESET#信号。PCI总线上的主控设备也可设置寄存器CNTRL 30=1,使PCI9054的寄存器复位,但是主设备只能访问配置寄存器,而不能访问局部总线。当CNTRL30-0时,清除PCI9054的复位状态。图2-1 PCI9054结构图(2)串行 EEPROM复位后,PCI9054总线上的主机可以对串行EEPROM进行读写,寄存器CNTRL129:24控制着PCI9054的管脚,对EEPROM的位进行读写。将重载配置寄存器位 CNTRL129置1可以用串行EEPROM重新配置PCI9054。串行EEPROM是按重要性顺序先后配置信息的。(3)内部寄存器PCI9054的内部寄存器为总线接口的设计与实现提供了最大的灵活性,这些寄存器可以分为两类:PCI配置寄存器和局部配置寄存器。直接从(目标)操作:是指PCI总线上的主设备通过PCI9054来直接访问局部总线上的从设备。PCI接口的内存空间和I/O 空间由计算机的BIOS自动设置。而且,局部总线寄存器允许将PCI地址空间转换为局部总线地址空间。 PCI9054含有C, J, M模式,M模式主要为MOTOLA芯片提供无缝连接。PLX9054支持8位,16位,32位的设备,可以是内存映射或I/。映射。J接口模式中主要将 PCI9054配置为非复用模式。局部片选:PCI9054没有为设备提供片选信号,对这些片选信号需在外部加上地址解码逻辑都可以用来对局部地址空间进行分配。PCI/LOCAL中断与用户I/0:PCI9054提供了一个局部中断输入,几个内部中断和一个中断控制/状态寄存器位(INTCSR).2.3 PCI9054主要寄存器的设置要使用好PCI9054就必须了解配置EEPROM中的各个寄存器的设置。在EEPROM中PCI寄存器是计算机自动配置的,用户无需干预。局部总线寄存器可由用户根据个人的需要来自定义,在编辑EEPROM时要注意各寄存器的设置不可前后矛盾,不然计算机将频繁死机。下面介绍本次实验的几个主要的寄存器:2.4 DJ-598PCI实验机与PCI接口卡的连接通过一根62芯的长扁平电缆将实验机与DJ-598PCI板相连。2.5驱动程序的安装DJ-598PCI在使用之前,无论操作汇编实验程序还是VC 实验程序,都必须安装好DJ-598PCI板卡的驱动程序。DJ-598PCI驱动程序位于附带光盘的 DJ-598PCI目录下,WIN98/ME驱动位于DJ-598PCIWINME 目录下,WINXP/WIN2000驱动位于 DJ-598PCIWINXP 目录下。二、WINME/WIN98系统驱动的安装。在PC机PCI槽中插入PCI9054卡,开机进入WINME/WIN98系统,系统会提示发现新的设备,自动进入添加新硬件向导,查找驱动程序,如下图2-5-1所示。图2-5-1发现新硬件向导(1)选择“指定驱动程序的位置”,点击下一步,然后选“指定位置”,图2-5-2。(2)按“下一步”。显示选择驱动程序位置对话框,浏览找到驱动程序所在的路径,单击“下一步”。(3)图2-5-3显示搜索到的设备和驱动器位置,确定无误后,单击“下一步”。(4)系统提示已经安装好设备驱动程序,单击“完成”。如图2-5-4所示。(5)系统提示重新启动计算机,单击“是(Y)”。(6)重新启动计算机后,用鼠标右键单击桌面上“我的电脑”图标,点击“属性”,在弹出的窗口点击“设备管理器”标签,可以看到硬件列表中出现“东疆计算机PCI卡”一项,如图2-5-5所示。图2-5-4驱动程序安装完成(7)单击“属性”,可以查看设备驱动程序的状态和设备所申请的资源。如图2-5-6所示。(8)关闭系统属性窗口,在任务栏的“开始”菜单中单击“运行”,在输入框中键入“regedit”,单击“确定”,在打开的注册表编辑器中,可以找到已添加的PCI设备节点。至此,设备驱动程序的安装及查看完毕。图2-5-3搜索到的设备和驱动器位置图2-5-4驱动程序安装完成二、WINXP系统驱动的安装。在PC机PCI槽中插入PCI9054卡,开机进入WinXP系统,系统会提示发现新的设备,自动进入“找到新的硬件向导”,如图2-5-7所示。(1)在图2-5-7中单击“下一步”,进入图2-5-8,选择“从列表或指定位置安装(高级)”,然后单击“下_x I H ”/J/ o(2)在图2-5-9中单击“在搜索中包括这个位置”,然后单击“浏览”,在弹出的对话框(图2-5-10)中选择驱动程序所在位置。(光盘中“WinXP DRIVER"文件夹下的“P9054L inf ”),单击“确定”。(3)在图2-5-10中确认驱动程序位置正确后,单击“确小,At o(4)系统开始进行驱动程序的安装,如图2-5-11所示。(5)安装完成后,在图2-5-12中单击“完成”。图2-5-11正在安装驱动程序2-5-12驱动程序安装完成2. 6使用PLXMON软件PLXMON是PLX公司针对PCI90XX系列芯片的读写而开发的软件(运行DJ-598PCIPLX目录下的setup. exe 来安装此程序,安装完成后需重新启动计算机才生效)o W PLXMON用户可方便的修改EEPROM中的各个寄存器来实现用户的各种自定义功能。运行PLXMON 后,点击”EEPROM”按钮,可观察到当前DJ-598PCI板卡的PCI资源配置(如图2-6-1)。你可根据需要修改PCI资源配置。片选信号选择范围信号名称 OOH ,08H,10H,18H相对偏移0007H,080FH ,10H17H ,18H1FH第三章基本接口技术实验32位汇编实验中,请用光盘中提供的P9054.dll和p9054. lib现个文件,方便用户使用函数说明如下:1)用10方式向指定地址输出指定数据0utp8 PROTO : DWORD,: DWORD,: DWORD 8位方式写0utp32 PROTO : DWORD,: DWORD,: DWORD32位方式写以下同参数1为设备句柄,用OpenByName或OpenByGuid打开时返回的句柄参数2为输出的地址,参数3为要输出的数据,函数成功返回TRUE2)用10方式从指定地址读出数据Inp8 PROTO :DWORD,:DWORD,:DWORDInp32 PROTO :DWORD,:DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGuid打开时返回的句柄参数2为要读出的地址,参数3为读出的数据,函数成功返回TRUE3)用内存方式向指定的地址写入指定数据MemWr8 PROTO :DWORD,:DWORD,:DWORDMemWr32 PROTO :DWORD,:DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGuid打开时返回的句柄参数2为输出的地址,参数3为要输出的数据,函数成功返回TRUE4)用内存方式从指定地址读出数据MemRd8 PROTO :DWORD,:DWORD,:DWORDMemRd32 PROTO :DWORD,:DWORD,:DWORD参数1为设备句柄,用。penByName或OpenByGuid打开时返回的句柄参数2为要读出的地址,参数3为读出的数据,函数成功返回TRUE5)打开中断IntOpen PROTO :DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGuid打开时返回的句柄参数2为注册的中断信号事件,函数成功返回TRUE6)关闭中断IntClose PROTO ,:DWORD参数1为设备句柄,用。penByName或OpenByGuid打开时返回的句柄参数2为要关闭的已注册的中断信号事件,函数成功返回 TRUE7)打开本实验仪指定的GUID值的设备OpenByName PROTO函数成功返回设备句柄8)打开指定GUID值的设备OpenByGuid proto:DWORD参数为指定的GUD值,函数成功返回设备句柄9)从指定的设备中取得配置信息PciConfig proto :DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄参数2为传入的本实验仪指定的数据结构,函数成功返回 TRUE10) Write9054Register proto DWORD,:DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄参数2为要写入的9054寄存器地址,参数3为要写入的数据(32位)11) Read9054Register proto DWORD,:DWORD,:DWORD参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄参数2为要读出的9054寄存器地址,参数3为被读出的数据(32位)12) BlckDmaPciToLocalproto :DWORD,:BYTE,:BYTE,:DWORD,:DWORD,:DWORD ,:DWORD参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄,传送方向PCI玲LOCAL参数2为要DMA传送通道号,参数3为DMA传送的数据宽度参数4为传送的起始地址参数5为传送缓冲区地址参数6为传送的字节数参数7为传送时休眠时间13) BlckDmaLocalToPciproto :DWORD,:BYTE,:BYTE,:DWORD,:DWORD,:DWORD ,:DWORD参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄,传送方向L0CAL9PCI参数2为要DMA传送通道号,参数3为DMA传送的数据宽度参数4为传送的起始地址参数5为传送缓冲区地址参数6为传送的字节数参数7为传送时休眠时间14) SetPciBusWidth proto DWORD,:BYTE,:BYTE参数1为设备句柄,用OpenByName或OpenByGu i d打开时返回的句柄参数2当前总线宽度,可忽略参数3为要设置的总线宽度,参数0:8位,1:16位,2:32位15) HexStrToInt proto DWORD,:DWORD函数将十六进制字符串转换成十进制数参数1为要转换的十六进制字符串参数2为转换后的十进制数据实验一获得PCI设备配置空间3.1.1实验要求使用32位汇编语言,使用I。端口查询和中断方式查找 PCI板卡或者列出当前系统中所拥有的PCI设备的配置空间3. 1.2实验目的根据配置空间的原理使用中断方式编写一个PCI配置空间的程序,此程序可获得PC机上的DJ-598PCI卡的硬件信息,如10的起始地址,MEMORY的起始地址,当前DJ-598PCI卡所占用的系统中断号。根据配置空间的原理使用10端口查询方式编写一个PCI 配置空间的程序,此程序可获得PC机上的DJ-598PCI 卡的硬件信息,如I。的起始地址,MEMORY的起始地址,当前DJ-598PCI卡所占用的系统中断号。3. 1.3实验原理计算机有4种资源,即I。空间,MEM空间,中断、DMA,用户可通过WINDOWS中的设备管理器来查看它们的分配情况。现在的计算机都支持PNP(即插即用技术),它的原理就是在每块支持PNP的板卡上都有一组称为配置空间的寄存器,在其中保存有自己对系统资源的需求的参数。当WINDOWS启动时,其BIOS引导程序首先读出这些参数,然后综合每块的资源需求,统一对整个系统的资源进行分配,从而避免用户对其干预。为了BIOS引导程序能够正确的对板卡所需的资源进行动态分配,其配置空间寄存器中存储的是物理空间大小等相对的信息,而不是绝对的物理地址。PCI配置空间是长度256个字节的一段内存空间,其前64个字节包括PCI接口的信息,我们可以通过它来访问 PCI 接口。这64个字节中,第一个32位的双字包含了 DevicelD和Vendor ID。 DevicelD是一个16位的数,如果这个单元没有安装,在启动时,计算机就会显示FFFFH;如果安装了,在0000H和FFFFH之间就会有一个确定的数代表它。类代码用来区分PCI接口类别,VendorlD 由PCISIG来分配。头标区中比较重要的有Base Address, Interrupt Pin, Interrupt Line它们主要用来指明设备所需的资源。BaseAddress:即基址寄存器,是32位寄存器,可以是I。Base Address 和Mem Base Address。这是由第。位决定的,第0位由硬件强制置。或1。加电后,引导程序通过向基址寄存器中写入全1,并且读返回值以获得设备所需的地址空间大小,然后操作系统给它分配一块I/O内存空间,并把基地址写回到基址寄存器,然后驱动程序可以通过读这个基址寄存器就可以得基地址,再加上设备寄存器的偏移就可以访问这个寄存器了。Interrupt Line:中断线寄存器,它是一个8位寄存器,用来报告中断的连接情况,它是一个可读可写的寄存器,并且凡是使用中断引脚的设备必须实现它,系统引导程序在进行初始化和配置时要将中断连线的信息写入该寄存器。这个寄存器的值表示设备的中断引脚与系统中断控制器的哪个输入端相连。设备驱动程序和操作系统可以利用这个信息来确定中断优先级和向量。该寄存器的值要受系统体系的支配。对于X 86体系结构,该寄存器的值和标准8259配置中的IRQ编号(0T5)相对应。255表示没有连到任何中断控制器。15-255之间的值为保留值。Interrupt Pin ,中断引脚寄存器。该寄存器是一个只读寄存器,用来表示设备使用了那一根中断线。其值的1,2,3,4分别对应INTA #, INTB#, INTC#, INTD#O 0表示没有使用任何中断。PCI配置机构采用两个32位10端口,位于地址0xCF8和OxCFC。这两个端口是:(1)32位配置地址端口,占用计算机10地址的0xCF8至ijOxCFB(2)32位配置数据端口,占用计算机10地址的OxCfC至iJOxCFF 访问配置寄存器的步骤为:(1)将目标总线编号,设备编号,功能编号和双字编号写配置地址端口,并设置使能位为1(2)读或写配置数据寄存器,北桥将指定的目标总线与PCI总线范围做比较,如果目标总线在此范围内,则启动PCI配置读或写操作。在不同的操作系统下,对配置空间有不同的存取方法,在DOS下我们只需要使用简单的汇编指令in、out命令就可了。读写配置数据寄存器还可以调用PCI BIOS函数的中断INT 1AH来实现。中断调用参数:PCI BIOS功能调用返回值列表3.1.4 实验内容及说明编写一实验程序,应用PCI BIOS提供的调用接口,显示实验装置获得的系统资源,显示内容主要包括:所有的基地址寄存器及中断请求线内容。在DOS下获取PCI配置空间的程序框图如下图3TT:3.1.5 实验步骤(1)按实验内容中的要求,实验流程及参考实验程序片断编写实验程序;(2)确认无误后编译、连接;(3)运行程序,观察屏幕显示,是否与“我的电脑”属性中分配的硬件资源相同。(4)参考程序清单请看PciConf文件夹.实验中用如下的函数打开设备句柄HANDLE OpenByName()HANDLE hDev;DWORD pError;DWORD instance=O;CDeviceInterfaceClass DevClass(&pClassGuid,&pError);if (pError != ERROR SUCCESS)return INVALID_HANDLE_VALUE;CDevicelnterface Devlnterface(&DevClass, instance,&pError);if (pError != ERROR_SUCCESS)return INVALID HANDLEVALUE;hDev = CreateFile(Devlnterface. DevicePath(),GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);if (hDev 二二 INVALID_HANDLE_VALUE)MessageBox(NULL,“请检查板卡和驱动程序”,“出错信息",MBCONQUESTION);)return hDev;)打开句柄后就可以获取相关资源配置 hDevice = OpenByName();if(INVALID_HANDLE_VALUE二二hDev ice)AfxMessageBox (无法打开设备);this->OnOK();pci=(pcicfg*)malloc(sizeof(pcicfg); BOOL status = DeviceloControl( hDevice, I0CTL_PDC4000_PCICFG, pci,sizeof(pci_cfg),pci,sizeof(pcicfg),&nRet,NULL);if(!status)AfxMessageBox (无法取得设备配置!); this->0n0K();)m_IRQ=pci->IRQ;lOBasel. Format pci->IOBase 0); lOLengthl. Format(%X,pci->IOPortLength0);I0Base2. Format(X,pci->IOBase1); I0Length2. Format(X,pci->IOPortLengthl);MemBaseO. Format("%X,pci->MemBase0);MemLengthO. Format(%X,pci->MemLengthO);MemBasel. Format pci->MemBase 1);MemLengthl. Format (,%X,/, pci->MemLengthl);UpdateData(FALSE);free (pci);其中pci_cfg是一个结构体,定义如下:struct pci_cfg(ULONG MemBase2;/memory baseaddressULONG MemLength2;/memory lengthULONG I0Base2;/IO base addressULONG IOPortLength2;/IO base lengthULONG IRQ;/InterruptnumberULONG DMA;/DMA number.*pci;实验二基本io 扩展实验3.2.1实验目的了解TTL芯片扩展简单I/O 的方法,掌握数据输入输出程序编制的方法。3.2.2实验内容说明74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。74LS273是一种8D触发器,当CLR为高电平且CLK端电平正跳变时,DOD7端数据被锁存到8D触发器中。本实验利用74LS244作为输入口,读取开关状态,并将此状态通过74LS273驱动发光二极管显示出来。原理图如下:3. 2.4实验步骤(1)实验连线:1 )244的CS译码单元模块的I00H, Y7Y0开关 KIK8o2 )273的CS译码单元模块的I08H, Q7Q0发光二极管 L1L8o3)该模块的WR、RD分别连到总线接口模块的IOWR、IORD。(系统已连接好)4)该模块的数据(AD0-AD7)连到JXO.地址线(LAO LA7)系统已连接好。(2)运行程序:SimplelO. exe(3)拨动开关,观察发光二极管的变化。(4)程序片段说明如下接线图如下:在程序初始化时创建一个线程,线程要执行的程序如下:UINT Comd(LPVOID pParam)while(ISSTART)for(int i=0;i<10000;i+)inp8(hDevice,(ULONG)LS244, prd. Data);outp8(hDevice,(ULONG) LS273, prd. Data);Sleep (50);return 0;)用到的两个函数分别为:BOOL outp8(HANDLE hDevice, ULONG addrs, ULONG mdata)(prd.Address=addrs;prd. Data=m data;DWORD nRet;BOOLstatus=DeviceloControl(hDevice, I0CTL_PDC4000_WRITE_IO_U8,&prd, sizeof(Buffers), NULL,0,&nRet ,NULL);if (!status)AfxMessageBox(无法写入!);return 0;return 1;BOOL inp8(HANDLE hDevice, ULONG addrs, ULONG &data)(prd. Address=addrs;DWORD nRet;BOOLstatus=DeviceloControl(hDevice, I0CTL_PDC4000_ READ IOU8,&prd, sizeof(Buffers),&prd, sizeof(B uffers),&nRet, NULL);if (!status)AfxMessageBox (无法读出!);return 0;data二(BYTE)prd. Data;return data;实验三PCI中断实验3.3.1了解PCI9054中断的工作方式在EEPROM中0x68地址就存放着中断控制、状态寄存器。PCI9054提供了多个中断源(local interrupt DMAO, DMA1等),通过读写此寄存器来实现中断。PCI接口卡已经设置了,中断处理过程:(1)设置bit811=1开中断;(2)进入中断服务程序后,设置bit811=0关闭中断,(3)处理数据;(4)清除标志位,设置bit811=1开中断来响应下一次中断;3.3.2实验目的掌握PCI中断控制器工作原理,熟悉PCI9054中断寄存器、学会启动中断、停止中断及中断处理程序的编写。3.3.3实验内容及说明编写一实验程序,使用实验装置提供的中断源,完成按键中断的响应。每产生一次按键中断,向显示器输出中断的提示信息。在中断处理中完成中断提示显示。这需要操作DJ-598PCI 总线扩展卡上的“INTCSR寄存器。通过操作上述寄存器,才可以实现实验中断的初始化、清除等。(1)初始化实验用中断的具体步骤:初始化INTCSR (偏移68H