首页 > 文章中心 > 驱动程序设计

驱动程序设计

开篇:润墨网以专业的文秘视角,为您筛选了八篇驱动程序设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

驱动程序设计范文第1篇

关键词:CPCI 422;驱动设计;模块互换;IVI规范

中图分类号:TP311.11

0 引 言

可互换虚拟仪器(Interchangeable Virtual Instrument,IVI)驱动程序规范是由IVI基金会在VPP\[1\]基础上为仪器驱动制定的编程接口规范。它扩展了VPP仪器驱动程序的标准,并增加了仪器的可互换性、仿真和状态缓存等特点,从而实现不同型号仪器之间的互换,在测试系统硬件组成发生变化时,测试程序代码可以重用。RS 422总线通常用于串行数据通信,采用平衡的差分数据传输方式,最大传输速率能达到10 Mb/s,最大传输距离为300 m。目前有关422的接口模块种类很多,为了实现各种型号422模块的互换,使用IVI标准进行驱动设计是很必要的。

1 IVI驱动程序的结构

IVI驱动程序体系结构主要包括IVI类驱动库、IVI专用驱动库、IVI引擎、IVI配置实用程序、IVI配置信息文件。其中,IVI 类驱动器是仪器的功能和属性集,通过这些功能和属性集实现对一种仪器类进行控制。它是一组接口函数,并不直接控制仪器工作。目前,已经了示波器、数字万用表等8类仪器规范\[2\]。IVI专用驱动库封装了用于控制某一种仪器所需要的信息,能够直接与仪器硬件通信。IVI 引擎主要完成状态缓存、仪器属性跟踪、类驱动器到专用驱动器的映像功能,是实现 IVI 仪器驱动程序完成状态缓存和其他增强性能的关键支持库。IVI 配置实用程序用于配置仪器无关测试系统,创建和配置 IVI逻辑名称,在测试程序中通过传送逻辑名称将操作映像到具体仪器驱动程序。具体IVI体系层次结构如图1所示\[3\]。

[HT5”K][JZ]图1 IVI体系结构[HT5]

目前,国内外只有NI公司,比较系统地提出了实现仪器互换的体系结构。该公司已经实现了8类仪器的IVI驱动开发,而且也提供一个名为“MAX”的IVI配置程序,用于配置仪器无关测试系统。同时也提供了一个专用驱动库开发向导,用以开发专用驱动\[4\]。但该向导不能对已有驱动程序进行升级和IVI标准封装,NI公司也没有提供类驱动库的开发向导,加上类驱动库数量的局限性,导致部分模块无法用NI公司提供的开发向导进行IVI驱动设计,比如文中所涉及的CPCI 422基于IVI标准的驱动开发\[5\]。

2 CPCI 422驱动开发

在此,以自研CPCI 422模块为例,介绍422驱动程序开发过程。CPCI 422模块具有CPCI总线接口,能通过422总线发送数据,并且能接收被测设备通过422总线传来的数据,并把数据传送给上位机进行处理。该模块具有8个通道,每个通道均能实现接收或者发送功能,通道能够单独工作也可一起工作,并且能对数据传输参数进行设置。

针对IVI体系结构,首先设计422类驱动函数库。然后在类驱动函数库基础上开发专用驱动函数库,驱动函数最后以.dll形式存在,采用 LabWindows/CVI,Visual Basic和 Visual C++等开发环境均可以开发。同时设计具备IVI引擎功能函数或者程序。对于IVI 配置信息文件可以通过专门的IVI配置实用软件(如NI公司提供的MAX)或者其他文本编辑器进行编辑。

基于IVI标准的驱动程序配置引擎是整个IVI体系中的核心支柱。其主要功能就是实现类驱动库到专用驱动库的映射,使应用程序在调用类驱动库时能自动加载相应配置的专用驱动库。

该设计中,IVI配置引擎设计的主要思路是通过读取配置信息文件,由配置文件中所设置的模块逻辑名找到对应的专用驱动库信息字段。此字段主要包括专用驱动库路径文件名、专用驱动库函数前缀等,然后通过这些一一对应的映射关系,自动加载专用驱动库。其工作流程如图2所示。

该设计运用函数ivi422Class_SpecificDriver实现自动加载功能。下面为具体的函数设计:

该函数核心是以代表专用驱动库文件名称为形式参数,调用LoadLibrary( )函数加载专用驱动库。应用程序只需通过类驱动库及模块的配置信息作为参数,调用ivi422Class_SpecificDrive()函数,即可实现专用驱动库的自动加载。根据上面介绍可知,读取配置文件以及根据配置文件自动加载专用驱动库,即可实现配置引擎的功能。

类驱动库是IVI体系的外观框架,用来控制一个特定类型仪器的一系列功能和属性。它是一组编程接口,而不对仪器进行直接操作。该设计中,为了实现422模块的正常通信,作为连接虚拟仪器硬件和应用测试程序的纽带,将422类驱动函数规划如表1所示。序号函数功能描述

1Init打开并初始化仪器

2Close关闭仪器

3SerialRead开始接收数据

4SetClock设置每个通道波特率模式

5SetUART通道工作参数设置

6SetDivisor通道具体波特率设置

7ChannelControl设置每个通道的工作状态

8SerialWriteData开始发送数据

9SpecificDriver动态加载专用驱动库[HJ0][HJ][HT5SS]

根据IVI规范,类驱动函数由函数名前缀加具体函数名构成。在参数设置上均采用VISA数据类型。在该设计中,类驱动函数均采用ivi422Class作为函数前缀名。现举例如下:

该函数的功能是提供仪器初始化函数接口,其中返回值定义为ViStatus型,具体表示形式,参照IVI标准,如IVI_SUCCESS。参数为ViSession型指针,用来返回仪器资源句柄。

根据前面介绍可知,类驱动函数只提供接口功能,不涉及具体仪器操作,现仍以初始化函数为例,介绍类驱动函数如何实现接口功能。其具体实现如下:

该函数的核心部分就是调用GetProcAddress(hDLL,FuncName)函数,获取专用驱动库函数对应函数地址。其中,hDLL为在配置引擎功能中调用ivi422Class_SpecificDriver()函数获取的专用驱动库句柄,FuncName为对应函数名称。

对于专用驱动动态链接库的开发,该设计未借助Labwindows/CVI中的专用驱动开发向导,而是直接在VC中进行编制。专用驱动库函数的主体函数名和参数类型与类驱动是完全一致的,否则类驱动和专用驱动之间的参数传递会出错\[8\]。为了与类驱动前缀名相区别,在该设计中,专用驱动函数前缀名一律为ivi422。举例如下:

函数则具体针对仪器操作,完成模块初始化功能。

对于上层应用程序,专用驱动函数隐藏了具体硬件工作细节,只以函数的形式提供了完成一项具体功能的接口。上层应用程序只需要通过类驱动库间接调用专用驱动库提供的函数,即可完成对硬件的操作控制。规划表中已经列出了422操控的基本函数,如果需要再增加函数,只需要在类驱动的专用驱动中同时增加,便能实现功能扩展。

[BT3]2.3 CPCI 422模块IVI驱动程序中配置文件编辑

对于IVI 配置信息文件,可以通过专门的IVI配置实用软件(如NI公司提供的MAX)进行编辑。在该设计中,利用图形化编程软件自己设计以对话框为基础的配置实用程序,通过此程序对配置文件进行编辑。图3为此程序的主界面。

通过此程序,修改配置文件中的逻辑名字段、描述字段、驱动库加载路径字段,以及驱动函数前缀字段、仿真调试字段。然后通过配置引擎对于配置文件的读操作,建立类驱动库和专用驱动库的正确映射。当改变模块时,只需要改变模块的逻辑名,以及模块专用驱动库的加载路径和前缀,而不需要修改类驱动库,也不会影响上层应用程序,从而实现了仪器的互换特性。

2.4 应用程序调用驱动工作流程

首先,应用程序通过一个逻辑名调用 IVI 类驱动库,配置引擎,将该逻辑名与配置文件中的所有逻辑名进行匹配,得到实际的 IVI专用驱动库指针,并实现该驱动器的动态加载;然后将 IVI 类驱动器中的函数和属性与IVI 类专用驱动器的对应函数和属性进行链接,使应用程序可以间接地访问这些函数和属性。在编制应用程序时,应同时包含类驱动库的动态链接库和头文件,编制过程中,对开发人员只需调用类驱动函数。┩4为应用IVI体系基于422模块的应用程序调用驱动工作流程。

驱动程序设计范文第2篇

关键词:PCI总线PCI2040DSPDDKWDM

TI公司专门推出了PCI2040桥芯片是专门针对PCI总线和DSP接口用的,本文利用它和DSP来处理视频信号,并用双端口RAM实现DSP之间的数据传输。

1硬件设计

1.1PCI总线控制芯片PCI2040

PCI总线是一种不依附于某个具体处理器的局部总线,它支持32位或64位的总线宽度,频率通常是33MHz,目前最快的PCI2.0总线工作频率是66MHz。工作在33MHz、32位时,理论上最大数据传输速率能达到133MB/s。它支持猝发工作方式,提高了传输速度,支持即插即用,PCI部件和驱动程序可以在各种不同的平台上运行[1]。

实现PCI总线协议一般有两种方法,一是用FPGA设计实现,但PCI协议比较复杂,因此难度较大;二是采用PCI总线控制芯片,如AMCC公司的S5933、PLX公司的PCI9080等通用的PCI接口芯片。TI公司专门推出了针对PCI总线和DSP接口的芯片PCI2040[2],它不但实现了PCI总线控制的功能,而且提供了和DSP芯片无缝的接口,因而大大简化了系统设计的复杂度并缩短了开发时间。

PCI2040是一个PCI-DSP桥接器件,它提供了PCI局部总线和TMS320C54X8位主机接口(HPI)与TMS320C6X16位主机接口的无缝连接。一片PCI2040最多能同时挂接4片DSP芯片。同时,它还提供了一个串行EEPROM接口,一个通用输入输出接口(GPIO)和一个16位通用总线接口(为TIJTAG测试总线控制器提供接口)[2]。PCI2040只能作为PCI目标设备使用,不能作为PCI主设备使用;它只支持单字的读写,不能提供DMA操作。PCI2040能够兼容3.3V和5V信号环境系统中的3.3V和5V信号可以直接从PCI插槽中获得。

PCI2040和TMS320C6201的接口如图1所示。

1.2PCI2040寄存器说明

PCI2040桥256字节的配置头如图2所示,HPICSR基地址、控制空间基地址(ControlSpaceBaseAddress)值都是系统自动分配的。所有的PNP器件都是如此它将控制空间映射到主机内存,映射的空间大小为32KB。4片DSP芯片的选择是通过解码PCI_AD14、PCI_AD13来实现的,其对应关系如表1所示。而DSPHPI寄存器的地址则是由PCI_AD12和PCI_AD11来决定的,其对应关系如表2所示。

图1PCI2040和TMS320C6201的接口

表1DSP选择

AD[14:13]

TMS320C6xDSP

00

HCS0(选择第一块DSP)

01

HCS1(选择第二块DSP)

10

HCS2(选择第三块DSP)

11

HCS3(选择第四块DSP)

表1HPI寄存器映射

AD[12:11]

TMS320C6xHPIRegister

00

HPI控制寄存器

01

HPI地址寄存器

10

HPI自增数据寄存器

11

HPI数据寄存器

因此,DSP与主机交换数据的过程,也就是读写HPI寄存器的过程。也就是说,通过主机访问DSP板上资源,只需要将相应地址赋予HPIA寄存器中,然后读写数据就可以通过HPID寄存器。具体描述如下:

(1)初始化PCI2040内部配置寄存器,指向特定的DSP(因为本系统有两块DSP和PCI2040相连),指定数据传输宽度为16位。

(2)分配HPICSR基地址和控制空间基地址,允许PCI2040进行内存映射或I/O端口映射。值得注意的是,PCI2040控制空间只能映射在主机的内存空间里,不能映射在I/O空间。以上两步都由驱动程序完成。

(3)脱离复位状态后,PCI2040解码从PCI总线来的地址,以此来做出响应。若落入32KB的控制空间中,则根据PCI_AD12、PCI_AD11及PCI_AD14、PCI_AD13片选情况访问相应HPI寄存器。

(4)设定HPI控制寄存器中的BOB位,选择正确的高低16位排列方式。

(5)主机开始对HPI寄存器进行读写。

1.3双DSP系统硬件设计

本文所采用的双DSP系统主要用来处理视频信号及高速数据采集,该系统是基于TMS320C6201DSP和PCI2040而设计的。此卡的主要功能是:(1)采集视频信号或其他模拟信号经A/D转换后,交给DSP进行相应处理,然后将处理后的数据通过PCI2040经PCI总线存放在计算机硬盘上或者直接存储到板上RAM中,然后通过PCI总线将视频数据传送到主机后显示。(2)两块DSP之间的通信可以通过McBSP或双端口RAM。

该系统的特点有:两块TMS320C6201DSP,处理能力可达3200MIPS;每片C6201带512KSBSRAM,256KBFLASH;16KB高速双口RAM用于两块C6201之间进行数据交换;12位ADC;32位高速FIFO。系统硬件框图如图3所示。

2基于WDM的PCI驱动程序设计

WDM是新一代的驱动程序构架,它是一个跨平台的驱动程序模型,在WINDOWS98以上的操作系统中都实现了全面兼容。不仅如此,WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台上运行,因而为驱动程序开发人员提供了极大的方便。

WDM驱动程序是分层的,即不同层上的驱动程序有着不同的优先级,而Windows9x下的VxD则没有此结构。另外,WDM还引入了功能设备对象FDO(FunctionalDeviceObject)与物理设备对象PDO(PhysicalDeviceObject)两个新概念来描述硬件。PDO代表实际存在的硬件设备,它是在总线驱动程序(BUSDRIVER)下枚举并建立的,负责与真实硬件进行I/O操作。FDO是由用户驱动程序建立的,一般来说,它是用户与真实硬件进行I/O操作的一个窗口,是Win32赖以沟通内核的一个桥梁。对于驱动程序开发者,真正需要做的就是开发FDO。至于PDO,则由BUSDRIVER建立,并在需要的时候作为参数由I/OManager或其它系统组件传给你的FDO。

在应用层与底层进行通讯时,操作系统为每一个用户请求打包成一个IRP(IORequestPacket)结构,将其发送至驱动程序,并通过识别IRP中的PDO来识别是发送给哪一个设备的。另外,WDM不是通过驱动程序名称,而是通过一个128位的全局惟一标识符(GUID)来识别驱动程序的[3]。

WDM驱动程序都有一个初始化入口点,即DriverEntry,它相当于C语言中的main函数。当WDM驱动程序被装入时,内核调用DriverEntry例程。另外WDM设备驱动程序还需要一个即插即用模块,即AddDevice。AddDevice例程就是PnP管理器在用户插入新设备时调用它来创建WDM设备对象的。

本文主要采用Windows2000DDK来设计该驱动程序。调试工具为SOFTICE。驱动程序的主要工作集中在:

(1)DriverEntry(),这是驱动程序的入口点,驱动程序被装入时首先执行DriverEntry例程。主要工作是建立驱动程序这所需的函数。

(2)dspPciAddDevice(),在这个例程里驱动程序主要是创建设备。

(3)dspPciPnp(),在这个例程中驱动程序主要是启动设备和停止设备等,并且从PnP管理器读出为双DSP所分配的硬件资源,包括HPICSR基地址和HPI控制空间基地址,对PCI配置空间进行初始化。初始化中断等。需要注意的是,在初始化中断之前禁止卡向主机发中断,因此应有屏蔽中断的操作。

(4)dspPciDeviceControl(),在这个例程中可以定制自己的函数来达到Ring3层和Ring0层相互通讯的目的。通过IOCTL_CODE可以区分不同的请求。

(5)Isr_Irq(),这个例程是用来处理中断的。Windows2000的中断处理机制是假定多个设备可以共享一个硬件中断。因此,Isr的首要工作就是找出哪一个设备发生了中断。如果没有,则应该立刻返回FALSE,以便HAL能把中断送往其它设备驱动程序。中断服务例程Isr执行在提升的IRQL上,在DIRQL级别上运行的代码需要尽可能快地运行。通常情况下,若判断中断是由自己的设备产生的,则调用一个在DISPATCH_LEVEL级别上运行的延迟过程调用(DpcFor_Irq)。

注意:当确定是自己卡的中断时,要马上屏蔽中断位防止中断再进来,等到DpcFor_Irq的结尾处再开中断。

驱动程序设计范文第3篇

【关键词】嵌入式通信设备;驱动程序设计;标准化

嵌入式系统的组成一般有硬件设备、应用程序、嵌入式微处理器和嵌入式操作系统四个框架。随着嵌入式技术的不断发展,在移动通信、工业控制和信息家电等诸多领域都得到了良好的运用。为了满足嵌入式系统发展和运用的需要,必须对嵌入式系统软件的开发提出更高程度上的要求。

一、不同环境下嵌入式通信系统的设计标准

(一)在Linux操作系统环境下的驱动程序

在Linux操作系统环境下的驱动程序要求无论是什么样的设备都要提供相同的接口,通常情况下是把一个设备映射成为一个设备文件。Linux驱动程序支持硬件设备下的两个标准接口:

字符特别设备文件和块特别设备文件。字符设备接口支持面向对象是字符的输入/输出端口的操作,规定输入/输出端口请求的长度一定是设备要求的基本块长度的倍数。块设备接口仅支持输入/输出上的操作,而能支持任意位置和长度上的输入/输出请求,能满足随机存取的要求。其中,Linux设备驱动程序能分成三个最主要的部分:中断服务子程序、自动配置和初始化的子程序;服务于输入/输出请求的子程序。在Linux系统的内部,输入/输出数据的存取需通过一组特定的入口进行操作,这组入口就是由每个设备的驱动程序来提供的。

(二)在Windows操作系统环境下的驱动程序

微软公司中的WindowsXP操作系统和Windows2000系列均采取了WDM技术设备的驱动程序模型,由原来的Window3.0到现在的WindowsXP和Windows2000,都依据其特定环境下的驱动程序制定了具有标准化的体系结构,同时为了满足驱动程序开发时所要调用的程序,程序员提供了完全的系统数据结构和函数封装。

在驱动程序中,每个硬件设备在WDM模型下都至少存在两个驱动程序:总栈驱动程序和功能驱动程序。而设备还可能在过滤驱动程序下通过其选择的特性来改变标准的设备驱动程序,其中驱动程序服务于同一个设备的被组成了一个链表,叫做设备栈。

例如:在一个驱动设备程序结构栈中,处于数据结构栈最底层的是物理设备对象的物理驱动程序,被用来描述物理总栈和设备之间的关系,在物理驱动程序上是功能设备对象的功能驱动程序,被用来描述设备中的逻辑功能。在功能驱动程序周围,存在很多过滤设备对象中的过滤驱动程序。因而数据结构栈中的每一个对象都有其特定的驱动程序,其中物理设备对象属于功能驱动程序,过滤驱动设备对象属于过滤驱动程序。

(三)嵌入式通信设备下的驱动程序

不同于上述两种操作环境下的驱动设备程序。

第一,嵌入式系统拥有高效的实时性,在应对外部突发事件时要求要以微秒级的速度相应,这就需要嵌入式操作系统不能有过于繁琐的上下文切换和频率过高的堆栈操作来响应事件操作,故一般嵌入式系统都没有十分复杂的分层构造。

第二,通信设备下的嵌入式系统还具有可配置性和高可靠性以及可裁剪性。这些特性就要求整个系统要有微内核结构,才能保证模块间具有很高的独立性。上述的这些特性共同决定了嵌入式系统不具有供驱动程序调用的函数封装和定义的设备驱动模型。但因在标准化的输入/输出设备中,只分为块设备和字符设备,具有局限性,而嵌入式系统所使用的芯片大都为HDLC、TSI等,大部分属于控制型的芯片,不属于块设备和字符设备,无法纳入标准的输入/输出体系结构中。

第三,嵌入式的设备驱动程序直接面向的对象是硬件,任何对硬件的不正当操作都可能导致驱动系统发生崩溃。所以,在嵌入式系统的开发过程中,需要制定一套完善的驱动程序的规范指导工作人员的开发工作。

二、关于通信系统下嵌入式驱动程序设计的标准化探讨

(一)嵌入式系统标准化设计的分层结构

制定关于通信系统下嵌入式驱动程序的标准,最终的目的是要制定出一套清晰的驱动程序的构造,用来统一上层应用以及用来管理程序接口,在一定程度上提高驱动程序的健壮性和可移植性,从而减少重复开发的可能。设备驱动程序在结构上可大致分为两层:接口封装层和硬件控制层。

接口封装层是负责把硬件控制层封装变为标准的应用接口,对其上层的管理软件提供一致的接口。在接口封装层,硬件设备中的差异大部分会被屏蔽掉,仅仅体现在应用程序接口的函数数据在结构上的解析;

接口硬件控制层就是把硬件中的各个模块按功能分给各个控制的接口,处于驱动程序结构中的最底层,以此来完成对所有硬件设备的配置和控制工作。因硬件控制层是直接面向硬件的,因而与硬件的相关性最大,也是在所有结构中最为灵活的一层。硬件控制层将所有的硬件设备的作用体现在控制接口上,并由接口封装层进行了调用。在考虑了硬件设备的多样性之后,控制接口的设计并没有明确的规范定义接口,但控制接口一般情况下可分为四类:硬件设备的属性控制、硬件设备初始化、时钟中断和设备的输入/输出操作。

(二)嵌入式设备驱动程序标准化设计的要求

接口封装层对上层软件提供的所有操作都被叫做元语操作,要特别注意的是接口的重入问题。首先,对控制层的接口来说,均为同步非阻塞函数的调用,对输入/输出型设备在得到用户允许的情况下可以提供阻塞的同步接口。嵌入式设备驱动程序一定要求能够进行单独编译,设计时要优先引用操作系统下的抽象层的函数;其次,接口封装层要尽可能对封装操作系统库函数做出调用;然后,驱动程序设计时要充分考虑硬件的特点,不考虑任何状态下的同步。

三、结语

综上所述,要想实现通信系统下嵌入式驱动程序的设计,需要一套驱动程序的标准来规范,因此提出基于嵌入式通信设备驱动程序设计标准化的构想,定义了较为清晰的分层结构,在一定程度上使得通信系统下的嵌入式驱动程序的设计变得愈加标准化和规范化。

参考文献

[1]陈鑫旺,姜秀杰.基于嵌入式Linux和FPGA的数据通信系统设计[J].微计算机信息,2013(06).

[2]孙新贺,王晓辉,于月森.一种嵌入式Linux操作系统的构建方法[J].工业控制计算机,2011(01).

驱动程序设计范文第4篇

关键词:ACM竞赛;程序设计;课程;教学改革

中图分类号:TP3-4 文献标识码:A 文章编号:1007-9599 (2012) 19-0000-02

1 引言

计算机软件技术的发展日新月异,给高等院校相关专业的教学带来了很大的挑战,为了更好地适应不断变化的社会就业需求,就必须在传统的计算机专业教学模式的基础上开辟出一条新路。

在这样的背景下,乐山师范学院计算机科学学院早在2005年就开始开展校企合作办学,与企业联合培养校企合作方向的学生,至今已是第八届。相比普通班,校企合作教改班所开设的专业课程更符合于当前计算机人才市场的需求,典型的特点就是注重对学生的专业技能尤其是程序设计和软件开发能力的系统性培养,严格按照软件工程师的培养模式来开展相关的理论和实践教学环节,这在很大程度上改变了以往只注重专业理论教学的局限性。

在对近几年教改学生的就业情况进行分析以后,明确肯定了校企合作教学模式为我院本科人才培养体系的改革起到了决定性的促进作用,学生的专业技能有了明显的增强,也大大提高了毕业生的就业率。

但与此同时也认识到存在的一些问题:首先,传统的以程序设计语言语法描述为主线的教学方式,以及模式化的实验内容,使教师在教学过程中容易将重点偏向理论,降低了对学生实践能力的锻炼和考核;其次,我们的软件工程师主要是在教室和机房这样的环境下培养出来的,缺乏真刀真枪的实践锻炼机会;最后,虽然校企合作人才培养方案的整体实施效果不错,但也很难培养出高层次的计算机专业人才。

如果以上几点不能有效地解决,那么校企合作办学的成效和前景将受到限制,因此迫切地需要一种途径去驱动程序设计类专业课程的教学模式改革,经过长期、反复的思考和摸索,我们认为通过开展学科专业竞赛活动来推动课程教学改革是比较可行的。而在种类繁多的计算机学科专业竞赛中,最权威、级别最高的就是《ACM/ICPC国际大学生程序设计竞赛》。

本教改项目结合ACM竞赛来促进计算机专业教学体系特别是程序设计类课程的教学改革,教改实施对象主要为计算机科学学院软件工程专业方向的学生。首先针对程序设计类课程教学存在的问题以及问题产生的原因进行分析,然后在ACM竞赛模式和特点的基础上,尝试通过结合ACM竞赛来改革课程开设体系和课程教学模式,最后提出了解决问题的具体措施,并在实际教学应用中取得了一定的成效。

2 当前程序设计类课程教学存在的问题

2.1 人才培养模式陈旧,实践教学比例不足

在传统的被动教学模式中,学生缺乏学习主动性、创新性和行业竞争力。而计算机专业课程大多属于实践型课程,强调动手能力。为了加深对理论知识的理解,必须提高实践教学质量,理论和实践教学的学时分配要作适当调整。

2.2 实践内容模板化,缺乏创新能力的培养

首先,设计性、综合性实验偏少,很难培养学生的创造性思维;其次,实验内容严重脱离了现代软件工程过程,更谈不上对综合型应用问题的解决;最后,在实践教学过程中,教师干预太多,学生处于被动完成实验任务的角色。

2.3 缺乏互助学习能力,团队协作意识较差

当前软件项目的开发都是以团队形式实施的,团队成员之间需要合理分工和无障碍沟通。但在传统教学模式中,以项目组为单位来开展教学活动的机会非常少,更谈不上互助学习和团队协作了。

2.4 课程考核模式单一,缺乏激励机制

课程考核主要采用传统考核模式,考核内容受限于教材知识点,缺乏对学生知识结构与实践技能的综合考察,不利于学生综合实践能力和创新能力的培养,最终形成“高分低能”的现象。

3 改革措施

本教改项目主要通过以下几个方面来实施以ACM竞赛促进程序设计类课程教学改革的方案。

3.1 改革课程开设计划

全面分析了目前程序设计类专业课程教学中存在的一些问题(比如教法和学法等方面),结合ACM的竞赛大纲和竞赛模式来调整开课计划,把原计划一学期的《程序设计基础》课程的教学时间调整为一学年,第一学期是程序设计的入门教学,主要介绍高级程序设计语言编程基础;第二学期是程序设计的进阶教学,主要介绍算法设计与分析。

3.2 改革课程实践教学模式[1]

(1)实验内容分级化:

将实验内容分成知识型(单一算法)、应用型(算法和实际问题结合)和综合型(若干小算法的综合,用于解决一个较大规模的问题)。不同级别题型的权值不同,每一级别中又包含若干个相同权值的题目,学生可以根据自身情况选择不同级别的题型和题目数量,这样既考虑到了不同层次学生的学习需求,又达到了统一的实验目的。

(2)实验题目趣味化:

传统的程序设计类实验题目普遍比较枯燥,难以调动学生的学习兴趣和设计思路。参考ACM的海量题集,由任课教师将实验题目生活化和趣味化,使学生自主选择合理的数据结构和算法来解题,这样可以充分激发学生的学习主动性和积极性,将被动学习转化为主动学习,更好地达到了实践教学的目的。

(3)实验时间分散化:

考虑到实验课时非常有限,可参照ACM竞赛平台来构建“程序设计在线评测系统”,功能包括用户管理、题库管理、在线提交、在线排名、在线讨论等。学生注册后可在任何时间登陆该系统进行选题、提交、评测和讨论等自主学习环节,将有限的课内练习时间延续到课外。

3.3 开发资源网站

在全面搜集ACM竞赛相关资源的前提下,以程序员协会的学生会员为主力设计并开发了“ACM资源网站”,并挂靠在学院的Web服务器上,以该资源网为平台来开展竞赛的宣传、组织、培训等活动,同时也为相关课程的理论实践教学和学生自主学习提供了一个优质的信息化平台。

3.4 建设学生梯队

依托于乐山师范学院第二课堂课程《ACM程序设计》的开设,以乐山师范学院三星级社团“程序员协会”为活动主体,在全校范围内吸纳对计算机编程和竞赛感兴趣的学生,成立“ACM竞赛兴趣小组”,通过举办专业讲座、学生科研、协会内部竞赛、协会沙龙等活动,为本专业学生提供一个进一步增强职业技能的交流和学习平台,同时也要在兴趣小组中发现适合参加ACM竞赛的后备人才,面向各年级构建ACM竞赛梯队。

3.5 建立激励机制

增设创新学分,设置创新环节,搭建创新实践的平台,让学生有更多的机会展示自己的专业特长。将参加ACM等学科竞赛纳入学生的综合测评,通过设立竞赛奖学金制度来引导学生积极参加课外科技活动、不断提高自身的创新素质。

3.6 组织参赛

在本教改项目的实施过程中,还要积极组织学生参加各个级别的ACM赛事。对于每一次竞赛,首先成立竞赛领导小组,分析官方公布的竞赛大纲,及时、准确地改革专业教学体系目标和课程开设计划;其次根据往届参赛经验,结合本次竞赛的具体情况制定出竞赛活动方案,将竞赛的宣传、组织、选拔、培训、参赛、奖励等环节制度化;然后选拔ACM参赛队伍,指派经验丰富且取得过优异成绩的教练对参赛队员进行长期、深入、全方位的强化培训和指导;最后通过对竞赛成绩的分析再次调整专业课程开设计划和教学模式。[2]

3.7 改革考核手段

ACM模式的重要特色之一是完善而严谨的考核机制,所以我们大胆尝试将ACM的考核方式借鉴到程序设计类课程的考核环节中,采用ACM模式的黑箱测试,将学生在“程序设计在线评测系统”中获得的成绩以50%的权重加入到课程考核指标当中。这一方面减少了教师的工作量,降低了考核错误率,另一方面做到了客观、公正,更好地发掘了学生的创新能力,提高其对知识点的掌握程度。

4 要解决的关键问题

4.1 课程教学形式的改革,特别是如何处理实践教学和理论教学的比重关系,以及如何让学生能够真正地解决问题,而不是按照设定好的思路去模仿着解决问题。

4.2 课程评价体系的改革,尤其是目前的实践环节评价机制弊端明显,严重束缚了学生的创新能力,错误地引导学生把自己改造为一个受制于理论教材的傀儡。

4.3 差异化教学,考虑到ACM竞赛的难度较大,所以必须考虑到在将ACM融入到专业课程教学过程之后,如何确保整体教学质量并解决好部分学生学习能力较差的问题。

4.4 在ACM竞赛中取得更好的成绩,必须建立有效的组织、选拔、培训、参赛、总结等相关机制。

5 结语

ACM竞赛对程序设计类专业课程的教学改革起到了积极的推动作用,从教学队伍建设的角度来看,它在提高教师的教学水平、科研能力、促进专业的对外交流等方面都起到了重要的作用;从学生培养的角度来看,它在提高学生的学习兴趣、自学能力、创新能力、求真务实的科学态度上有很大的帮助。

总之,通过合理的应用ACM竞赛这个平台,可以使我们的计算机专业教学更趋科学化、规范化,可以让我们的学生开拓视野,促进实践型、创新型人才的培养,提高学生的就业竞争力。

参考文献:

[1]常子楠.基于ACM模式的程序设计类课程实践教学探索[J].计算机教育,2010(16):144-146.

[2]项炜.以学科竞赛促进计算机专业教学改革的探索[J].改革与开放,2009(12):207.

[作者简介]

驱动程序设计范文第5篇

现场总线作为二十世纪80年展起来的新兴技术,在工业现场已有了广泛的应用。在比较有影响力的几种现场总线中,CAN总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。

现场总线网络技术的实现需要与计算机相结合。以往CAN总线网络与计算机的连接采用RS232、ISA或PCI接口。但是随着计算机接口技术的发展,ISA接口已经逐渐被淘汰;RS232接口数据传输率太低;PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。随着USB1.1、USB2.0规范的相继制定,为外设与计算机的接口提出了新的发展方向。USB的主要特点有:外设安装简单,可实现热插拨;通讯速率高,USB1.1全速传送速率为12Mbps,与标准串行端口相比,大约快100倍;支持多设备连接;提供内置电源。

本文给出一种在Windows2000下使用USB1.1协议实现CAN总线适配器的设计方法。整个设计主要开发适配器的固件及计算机的驱动程序、应用程序,以达到用USB接口连接现场CAN总线网络的目的。

图1

1 适配器硬件接口设计

适配器硬件电路由微控制器、CAN总线接口、USB总线接口和DC-DC隔离电源模块等组成。原理框图如图1所示。

微控制器P89C51RD2是Philips公司生产的增强型MCS-51兼容单片机,片内集成64KB闪存和1KB扩展RAM,双数据指针,4级中断优先级,7个中断源,内置看门狗,可编程时钟输出,在6时钟模式下工作,速度是标准51单片机的两倍。此时外部最高频率可达20MHz。在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。

CAN总线接口使用Philips公司的独立CAN总线控制器SJA1000,并由光耦6N136进行总线隔离。SJA1000是一种独立控制器,用于移动目标和一般工业环境中的区域网络控制,符合CAN2.0A和2.0B规范,最高速率可在达1Mbps。CAN总线收发器采用PCA82C250。

PDIUSBD12是Philips公司推出的全速USB接口器件,完全兼容USB1.1规范。图1中D+引脚信号电平通过器件SoftConnect命令内部上拉,从而向主机表示为一个全速设备。EOT引脚自动检测USB接口的VBUS电压以确定USB电缆是否连接到了主机。SUSPEND是双向引脚,用以向微控制器指示器件是否挂起。当有USB总线事件发生时,引脚向微控制器发出中断信号。PDIUSBD12支持总线复用和非复用两种并行接口模式,以方便连接不同类型的微控制器。图1中采用总线复用方式,当用奇数地址访问PDIUSBD12时被认为是命令,偶数地址访问则被认为是数据读写。

各器件都需要外部时钟信号,而且它们自身也都有可编程的时钟输出功能,这就给系统的时钟设计带来了便利。图1中微控制器6时钟运行模式下,外部为12MHz晶振。P89C51RD2的P1.1引脚产生6MHz方波作为PDIUSBD12的输入时钟;通过PDIUSBD12的SetMode寄存器编程使CLKOUT输出时钟频率为24MHz,作为SJA1000的外部输入时钟。

2 软件设计

软件设计包括微控制器的固件设计和计算机端USB驱动程序两部分。

2.1 微控制器固件编程

固件编程是USB数据传输系统中终端设备程序设计的一个重要概念。微控制器通过固件是程序与计算机进行数据交换。固件设计的目的是:使PDIUSBD12在USB上达到最大的传输速率;增加系统的可扩展性和硬件无关性。

固件要实现的内容:一是对SJA1000初始化,接收CAN总线送来的数据,收集CAN网络状态信息,并将主机的数据下发到CAN网络;二是对PDIUSBD12初始化,完成USB总线连接过程,并组织CAN网络和主机之间的数据传送。设计中采用KeilC51软件编译环境,C51和ASM混合编程方式。

SJA1000和PDIUSBD12都有完善的中断机制,微控制器可以通过读它们的中断寄存器获得总线事件。为了提高固件的运行效率,主程序对系统进行实始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件。

2.1.1 CAN协议实现

SJA1000支持BasicCAN和PeliCAN两种协议模式。在适配器设计中采用了BasicCAN模式。中断设为电平中断方式,SJA1000中断服务程序框图如图2所示。

2.1.2 USB1.1协议实现

PDIUSBD12支持所有的四种USB数据传输方式。在适配器的设计中使用了控制传输、中断传输和批量传输。控制传输中只用来传递控制信息,固定使用端点0;中断传输使用端点1,用来传送CAN网络状态信息;批量传输用来实现主机和CAN网络节点之间的数据传送,使用端点2。图3是PDIUSBD12中断服务程序框图。

2.2 驱动程序设计

USB驱动程序属于WDM(Windows driver module)类型。WDM驱动程序是分层的,引入了FDO(Function Device Object)和PDO(Physical Device Object)两个新类来描述硬件,每一个物理硬件有一个PDO,但是可以有多个FDO,在驱动程序中直接操作的是PDO和FDO。系统通过全局唯一标识符GUID实现驱动程序的识别。应用程序和WDM驱动程序通信时,系统为每个用户请求打包形成一个I/O请求包发送到驱动程序。

图4是Windows中USB的通信层次结构模型。图4系统软件方块中的底部是Windows系统提供的驱动程序,包括主控制器驱动程序(OPENHCI.SYS或者UHCD.SYS)、HUB驱动程序(USBHUB.SYS)是一个类驱动程序(USBD.SYS)。

Windows2000下驱动程序的设计工具是VC++和Win2000DDK,但是直接使用DDK编程有相当大的难度。目前有第三方软件厂商提供了一些驱动程序开发工具,如Jungo公司的WinDriver、Compuware公司的DriverStudio等。这些工具仍然是基于WindowsDDK的,但是进行了新的封装,提供了驱动程序设计向导。

    适配器设计中采用了DriverStudio作为驱动程序开发工具。利用其中的DriverWorks一步步地作出选择并修改少量参数,即可生成驱动程序框架和测试台应用程序框架,对USB设备的通用性部分支持得很好。在程序框架,对USB设备的通用性部分支持得很好。在VC++中对向导生成的代码作修改,并对设备特殊功能部分添加处理代码,然后用VC++编译为*.SYS文件,就是一个完整的驱动程序。SoftIce是DriverStudio的另一个调试工具,可以对驱动程序进行操作系统内核级的跟踪与调试。

驱动程序设计范文第6篇

关键词:USB数据采集PDIUSBD12

1USB协议和芯片选择

理解好USB协议是USB系统开发的第一步。USB协议版本包括1.0、1.1和2.0,USBOTG是对2.0版本协议的补充。虽然USB协议内容繁多且复杂,然而,对USB开发影响较大的却只是少数部分,以下对协议版本1.1[1]中这些部分进行介绍。

1.1USB协议

一般,每个USB设备由一个或多个配置(Configuration)控制其行为。使用多配置原因是对操作系统的支持;一个配置由接口(Interface)组成;接口则是由管道(Pipe)组成;管道与USB设备的端点(Endpoint)对应,一个端点可以配置为输入输出两个管道。在固件编程中,USB设备、配置、接口和管道都用描述符报告其属性。

图1为USB多层次通信模型。端点0默认配置为控制管道,用来完成所规定的设备请求(USB协议第九章)。其它端点可配置为数据管道。对开发而言,主要的大数据传输都是通过数据管道完成的[2]。

USB传输类型包括批量传输、等时传输、中断传输和控制传输,每种传输类型的传输速度、可靠性以及应用范围都不同[3]。控制传输可靠性是最高的,但速度最慢;等时传输速度快,满足实时性,但可靠性低。在具体应用中,端点传输类型可根据传输速度和可靠性选择。

在USB通信协议中,主机取得绝对主动权利,设备只能是“听命令行事”,通过一定的命令格式(设备请求)完成通信。USB设备请求包括标准请求、厂商请求和设备类请求。设备的枚举是标准请求命令完成的;厂商请求是用户定义的请求;设备类请求是特定的USB设备类发出的请求,例如海量储存类、打印机类和HID(人机接口)类。固件编程中设备请求必须遵循一定的格式,包括请求类型、设备请求、值、索引和长度。

1.2USB接口芯片选择

USB接口芯片的类型有:

(1)按传输速度的高低:低速(1.5Mbps)和全速(12Mbps)可选USB1.1接口芯片,例如Philips公司的PDIUSBD12和Cypress公司的EZ-USB2100系列;高速(480Mbps)可选USB2.0接口芯片,例如Philips公司的ISP1581和Cypress公司的CY7C68013。

(2)是否带MCU(微控制器):一般Philips公司的都不带MCU,Cypress公司大多都带,例如AN2131。

(3)是否带主控器功能:不需要主机参与,主从设备间可进行数据传输,芯片有Philips公司的ISP1301和Cypress公司的SL811HS等。

还有专门用途USB芯片,例如闪存专用芯片IC1114。工程中用户可根据自己的需求选择一款性价比高的芯片。另外可用开发资源也是要考虑的重要方面,例如开发板和芯片厂商提供的网上资源,可大大降低开发的难度。

2基于USB接口的数据采集系统的设计

2.1系统简介

该系统能够实现16路温度数据自动采集,系统的组成框图如图2所示。主要包括8个组成部分:中央处理器选用AT89C52芯片,完成各部分控制功能和USB传输协议;实时时钟记录当前测量温度的时间;温度传感器和接口电路主要完成温度采集,并读入MCU处理;复位电路完成对MCU的上电复位和电源电压监视;看门狗电路用来监视MCU是否工作;存储电路主要存储采集到的温度数据以及采集的实时时间;电源电路主要为各部分提供要求的电源;外设与主机间的通信电路采用USB接口。

2.2接口芯片选择

接口电路采用Philips公司的PDIUSBD12[4](以下简称为D12)芯片。主要因为D12芯片信息、开发资源丰富,具有较高的性价比。

D12芯片的主要特点包括:

·符合USB1.1版本规范;

·可与任何外部微控制器/微处理器实现高速并行接口(2MB/s);

·采用GoodLink技术的连接指示器,在通信时使LED闪烁;

·主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输;

·在批量和等时模式下均可实现1MB/s的数据传输率;

·完全自治的直接内存存取DMA操作。

2.3接口硬件设计

由D12接口组成的通信电路原理如图3所示。关于D12的各引脚说明见参考文献[4]。多路地址/数据总线ALE接单片机的ALE脚,这样使用MOVX指令可以与D12接口,对D12操作就象对RAM操作一样,此时忽略A0(命令口和数据口地址线)的输入。因为没有使用DMA传输方式,所以没有用到DMACK_N、EOT_N和DMREQ_NDMA引脚。INT_N是USB中断请求脚,发出USB中断请求;GL_N是GoodLink指示灯,在调试过程中非常有用,在通信时会不停闪烁。如果一直亮或者一直暗,表示USB接口有问题,如果D12挂起,则LED关闭。CLKOUT是D12的时钟输出,可以通过固件编程改变其频率,在调试固件时,可作为参考。

2.4接口程序设计

USB接口程序设计是USB开发的核心。USB接口程序设计包括三部分:单片机程序开发、USB设备驱动程序开发、主机应用程序开发。三者互相配合,才能完成可靠、快速的数据传输。

2.4.1单片机程序设计

单片机程序(又称固件)采用模块化程序设计,主要模块包括:数据采集模块、数据处理、监控模块和数据通信模块。模块化设计的优点是可靠性高、可读性好、升级简单。

通信模块固件结构如图4所示。主循环和中断服务程序之间的数据交换可通过事件标志和数据缓冲实现。图3中USB中断引脚INT_N发出中断请求,中断服务程序根据中断请求类型操作,设置事件和填充数据缓冲区再传输给主循环;标准设备请求程序是对标准请求进行处理;用户可以根据实际需要编写厂商请求,例如发出启动或停止数据采集命令。

图3USB接口连接示意图

2.4.2驱动程序设计

驱动开发工具有DDK和第三方开发工具。其中DDK开发难度最大,第三方开发工具有DriverStudio和Windriver等。DriverStudio难度适中,而Windriver则属于应用层驱动开发,难度小,但效率低,并存在问题。

DDK驱动程序开发工作包括:开发环境设置(VC编译环境)[5]、驱动程序设计[6]、安装文件(INF文件)设计。

驱动程序设计采用WDM(WindowsDriveMode)。WDM设备驱动程序提供了一个参考框架,大大降低了由DDK书写驱动程序带来的难度。

D12驱动使用的例程包括:DriverEntry、AddDevice、DispatchPnp、DispatchRead、DispatchWrite和DispatchDeviceControl例程,以下是D12的WDM驱动程序函数:

DriverObject->MajorFunction[IRP_MJ_CREATE]=D12_Create;

DriverObject->MajorFunction[IRP_MJ_CLOSE]=D12_Close;

DriverObject->DriverUnload=D12_Unload;

DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL;

=D12_ProcessIOCTL;

DriverObject->MajorFunction[IRP_MJ_WRITE]=D12_Write;

DriverObject->MajorFunction[IRP_MJ_READ]=D12_Read;

DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL;

DriverObject->MajorFunction[IRP_MJ_PNP]=D12_Dispatch;

DriverObject->MajorFunction[IRP_MJ_POWER]=D12_Process-PowerIrp;

DriverObject->DriverExtension->AddDevice=D12_PnPAddDevice;

驱动程序与应用程序和硬件之间通信都是IRP(I/O请求包)完成的。IRP_MJ_PNP主要是实现USB即插即用,例如设备的添加、删除和资源的分配;IRP_MJ_POWER实现电源管理,例如设备的挂起和唤醒;IRP_MJ_CREATE(创建)、IRP_MJ_CLOSE(关闭)、IRP_MJ_

DEVICE_CONTROL(设备控制)、IRP_MJ_WRITE(读)和IRP_MJ_READ?穴写?雪是主要完成数据通信的函数,实现管道的创建、关闭和数据读写。其中设备控制具有输入输出缓冲区,可实现读和写功能;AddDevice和DriverUnload实现设备管理,在设备添加和卸载时,创建和删除设备,以及管理资源分配。

驱动程序通过安装文件(.inf文件)中PID(产品识别号)和VID(厂商识别号)识别USB设备。

2.4.3应用程序设计

主机应用程序的编写使用VC编译环境中的API函数实现。

应用程序的编程方法与串口编程类似。首先必须查找设备,打开设备的句柄;然后进行读写和控制操作;最后是关闭设备句柄。为了提高效率,可使用多线程技术实现读写。

应用程序通过GUID(注册表驱动唯一识别号)查找驱动程序。

2.5调试

首先是固件调试,可用仿真机完成,驱动开发工具Windriver也是很好的固件调试工具,例如测试标准请求、厂商请求和管道读写。其次是驱动调试,这是USB接口开发最困难的部分,调试工具可用DriverStudio中Softice工具和文献[6]中DebugPrint跟踪工具,监视工具BusHound可监视USB的实际数据传输情况。需要注意的是,驱动调试必须在应用程序正确调用的前提下。

2.6USB传输速度

驱动程序设计范文第7篇

【关键词】ARM;数据采集;信令分析;3G通信

0.引言

ARM(Advanced RISC Machines)具有高性能,低功耗的特点,广泛应用于无线设备、消费类电子、工业控制、仪器仪表等领域。本文通过将ARM技术与通信领域的信令分析仪结合,设计了一种能替代传统X86构架的高性能、低功耗、低成本的信令分析仪。

1.信令分析仪功能简介

通信信令分析仪(Signaling Analyser)是一种用于对通信信号采集、分析、故障检测、指标监控等功能的仪器。它广泛应用于2G/3G移动通信领域,能对通信信号智能拆包、解码、分析。对通信信道检测、改善误码率、掉话率、提升容量提供实际的数据依据。下图(图1)是采用ARM的信令分析仪整体框图:

图 1

ARM信令分析仪连接了原始数据和服务器,利用ARM处理器高速处理能力和对多任务的良好支持能够协调数据的接收、处理、发送任务。此种体系结构采用ARM替代传统上位机中介平台,能使数据采集和传输过程一体化,便于控制采集过程和维护采集数据。

2.ARM平台软件设计

采用的平台是SUMSUNG生产的ARM9-2440核心板。ARM体系结构对于LINUX系统支持良好,有开源的bootloader程序,能方便移植LINUX内核、制作文件系统,形成完整的嵌入式LINUX系统。具体的步骤如下:

选用u-boot作为LINUX系统的引导程序,bootloader主要作用是初始化硬件设备,设置数据堆栈段,为操作系统程序提供软硬件环境。

第二步裁剪LINUX系统并编译,可以根据需要保留和添加相应功能模块,注意配置内核时要保留网络和USB驱动接口。

最后yaffs2作为文件系统。应用程序采用QT界面开发平台。主要模块如下图(图2):

图2

用户操作层负责ARM界面的人机交互,发送业务分析层的控制命令对底层操作。数据处理层负责收集采集到的数据并选择性存储有效数据。底层的采集任务交由采集卡执行,使用中断方式发送数据。

3.接口驱动程序设计流程

3.1网卡驱动程序设计

在ARM板上提供网络接口与上位主机的数据通信,应用TCP协议来实现数据的收发,需要在LINUX内核中添加网络模块,并编写相应的驱动程序。根据网卡型号选择注册函数格式如下:platform_driver_register(&devname_driver);修改内核中相对应的结构体:

Static struct platform_driver devname_driver = {

.driver = {

.name = “devname”

.owner = THIS_MODULE,

},

.probe = devname_probe,

.probe = devname_drv_remove,

.probe = devname_suspend,

.probe = devname_resume,

}

3.2 USB驱动程序设计

USB外部接口设备主要用于ARM与数据采集卡的连接。由于LINUX-2.6.32.10内核本身支持USB MassStorage设备,并支持自动挂载。因此在裁剪内核时需要配置内核支持USB驱动,如:scsi disk support设备和USB mass storage support设备驱动必须选择,而scsi medie changer support则根据需要自行选择。然后在驱动程序中加入USB配置代码:

int usb_hcd_s3c2440_probe();

writel(readl(s3c2440_MISCCR), s3c2440_MISCCR);

s3c2440_usb_set_power(dev.platform_data, 1, 1);

以上驱动程序需要在PC机上搭建交叉编译环境,编译为适合ARM体系架构运行的bin文件。最后需在Makefile中修改交叉编译工具为arm-linux-gcc,make生成内核镜像文件。

4.数据传输与分析

数据传输接口作为ARM关键数据传输通道,需要采用有较大传输速率和通用处理接口的网卡芯片,配合ARM核心芯片实现远程数据传输。通信方式与LINUX网络通信原理基本相同,采用C/S架构连接系统的各个部分。下图(图3)是数据传输基本流程示意图:

图3

传输过程中应该确定以下几点:ARM板网卡访问基址为0x20000000(BANK4的基址),此为物理地址。使用CMD引脚来区分网卡数据信号和地址信号,CMD为低电平时发出地址信号,再将CMD置高电平读写数据。

读写接口采用ior/iow访问。定义如下:static unsigned char ior(board_info_t*db, int reg);

static void iow(board_info_t *db, int reg, int value);

两个函数的reg为对相应的寄存器地址写入值,使能IO端口。value为要写入的数据,readdb为读出数据的IO起始地址。

5.结语

实现此应用模型关键在于LINUX平台的搭建和ARM接口驱动程序的编写调试,对于不同的采集数据仍然需要在应用程序中提供支持。以上是我对信令分析仪运行于ARM平台的一点研究,希望对于信令分析仪的多平台实现有一点启发和借鉴作用。

【参考文献】

[1]杜春雷.ARM体系结构与编程.清华大学出版社,2008.

驱动程序设计范文第8篇

关键词:USB;驱动程序;主控制软件

1USB的功能与特点

USB是从传统I/模式中创新而来,在整个PC机外部构建起新型外设连接方式形成的数据接口形态。USB具有以下方面特点。第一,热插拔,即可以在USB连接的任何一台PC机上,运用PC机内部操作系统运用USB数据接口。第二,接口共享。USB数据接口具有多个外设连接方式,可以同时控制连接126个外连设备。第三,方便灵活。USB数据接口在应用过程中具有非常快速的传输速度,可以有效应用鼠标、键盘、游戏外设等工具,并且具有高质量磁盘存储效率[1]。

2USB下数据通信系统设计方式

2.1USB驱动程序

USB驱动程序是由一些例程集合而成,(分发例程、入口例程、卸载例程等)应用电源管理、I/O管理、PnP管理器等充分激活数据通信系统,实现良好应用价值。因此,专业人员需要通过利用DriverStudio向导生成一个高质量USB驱动程序框架,写入必要产品编码和制作商编码,以便于更好开展USB驱动程序加载。在ADDDevice例程中,专业人员创建一个USBDCSDevice符号连接方式,运用IoCreateSymbolicLink函数使USB驱动程序与其他设备有效连接。专业化人员在完成设备初始化之后,需要有效连接应用设备对象,并且通过CreateFile函数打开USB接口。在整个USB驱动程序设计过程中,专业人员采用DebugView软件开展程序调试,进行本机网络驱动程序观察,有效支持Win98/NT/2K/XP运行。

2.2串口和中断电路

(1)串口。在工业控制过程中,外部串行设备、计算机之间主要是应用数据传输通道来实现的。其中,RS232接口连接器主要是应用9针外壳、25针串口、9个20mA电流环信号腿等组成。(2)系统串口设计。在整个WIN32API中,主要应用文件方式开展系统访问,其操作方式与API基本保持一致。而本系统主要应用API函数CreateFile有效打开串口,以异步读写方式打开文件;专业人员配置必要串口形态,改变设备控制块DCB,应用函数SetupComm来接收或者发送缓冲区大小文件。为进一步简化开发程序,本系统在操作中需要有效将API函数在一个CSerial类型异步方式中打开串口,更好进行串口调试,创建一个工作线程序,在后台有效监视串口信息,方便系统调试。(3)中断产生电路实现。中断控制是USB数据通信系统电路一个重要组成部分,主要作用是清除中断信号。中断控制电路主要是合理调整T1S、T100ms、T12ms、T4ms周期中断信号,提升中断控制能力。

2.3设备端通信实现方案

USB数据通信系统主要采用TMS320F2812嵌入式DSP控制模板作为系统设备终端,并且有效应用一个外扩USB2.0标准接口。(1)DSP2812基本系统。DSP2812基本系统主要开展以下的配置方式。第一,时钟。TMS320F2812嵌入式DSP控制模板需要多个时钟。专业人员主要选择应用30MHz外部晶体作为重要时钟形态。第二,存储空间。本系统应用的哈佛结构DSP部件,在逻辑上具有4M×16位数据空间和程序空间,形成良好的映射分布方式。第三,中断。TMS320F2812嵌入式DSP控制模板具有复杂中断方式,一方面需要有关人员开展PIE中断,另一方面需要开展CPU中断,提升整个系统应用质量和水平。(2)USB接口。在整个TMS320F2812嵌入式DSP控制模板上,专业设计人员采用CY7C68001芯片,并且有效集成USB2.0串行接口引擎、USB2.0收发器,实现F2812、CY7C68001芯片之间并行异步存储连接,实现良好应用水平。(3)设备端程序设计。本系统应用CCS2000软件编写DSP程序,最终实现USB设备端程序应用价值。其主要流程为:开始—设备初始化—USB自举—USB初始化—进入主循环程序等待中断信号—结束。

2.4主控制软件设计

在USB数据通信系统中,主控制软件主要是控制中断产生电路、进行主要设备信息数据读取、方便用户提供一个实用与方便的人机交互界面,提升主控制软件应用水平。在设计中应用的主要部件有:1个主菜单、1个控制框、1个信息显示框、1个曲线显示框。用户可以依据自身需求,合理应用其中的数据信息操作平台,开展主要信息数据软件启动、停止、复位中断等操作。

3结束语

综上所述,USB具有热插拔、接口共享、方便灵活特点,有关人员应用电源管理、I/O管理、PnP管理器等充分激活数据通信系统,采用DebugView软件进行系统调试,应用API函数CreateFile有效打开串口以异步读写方式打开文件,并且依据自身需要合理配置主控制软件,提升USB数据通信系统设计与应用水平,更好满足人们需求。

参考文献