admin 管理员组文章数量: 887021
2024年2月24日发(作者:html设置textarea内容为空)
嵌入式软件应用文章编号:1008-0570(2009)06-2-0140-02《微计算机信息》(嵌入式与SOC)2009年第25卷第6-2期WindowsCE下GPIO驱动程序的设计与应用TheDesignandapplicationofGPIOdriveforWindowsCE(河北工业大学机械工程学院)胡秀凤丁承君张明路马玉震HUXiu-fengDINGCheng-junZHANGMing-luMAYu-zhen摘要:WindowsCE流接口设备驱动程序是一种基本的设备驱动程序。本文以S3C2410开发板中的GPIO流接口驱动为例,说明了驱动程序所包含的函数以及如何在应用程序中调用驱动程序的开发过程,并解决了控制4个LED工作的问题。关键词:WindowsCE;GPIO驱动;LED中图分类号:TP31文献标识码:A技术创新Abstract:StreaminteracedriverforWindowsCEisasimpleandbasicdevicedrivermodel。ThispaperexemplifiestheGPIOdriveofS3C2410,indicatessomefu,ds:WindowsCE;GPIOdrive;LED引言嵌入式操作系统WindowsCE下的设备驱动程序将操作系统与硬件联系起来,使得操作系统可以管理硬件设备,向应用程序提供访问硬件的调用。编写驱动程序的目的一般是为了把设备的功能呈现给应用程序,方便使用。最常见的情况是应用程序用一个已有的Win32API和设备进行通信。1GPIO流接口驱动程序的实现流接口驱动是最基本的一种驱动结构,它的接口是一组固定的流接口函数,具有很高的通用性,WinCE的所有驱动程序从应用程序到具体硬件间有如下都可以通过这种方式来实现。这些环节起作用:应用程序—调用OS函数—操作系统—驱动接口—驱动程序—硬件操作函数—硬件。在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。共有三类系统进程用来加载:,,.绝大多数设备驱动都是通过加载的。每个流式接口驱动程序必须实现一组标准的函数,用来完成标准的文件I/O函数和电源管理函数,这些函数提供给WinCE操作系统的内核使用。这些函数通常叫做流式接口驱动程序的DLL接口,如表1所示。在实际开发中接口名称中的XXX三个字母由设备驱动的设备名前缀代替,例如,GPIO流式接口驱动程序的设备文件名前缀为“PIO”,那么它相应要实现的DLL接口为PIO_Close,PI-O_Deinit,PIO_Init,PIO_Read等。在ARM9平台上,WindowsCE系统将GPIO的实地址(2410的GPIO的基地址为0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),这样通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出胡秀凤:硕士研究生基金项目:基金申请人:丁承君;项目名称:基于全方位视觉的移动机器人动态目标探测与导航;基金颁发部门:国家高技术研究发展计划(863项目)(2007AA04Z229)-140-360元/年邮局订阅号:82-946工作。GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互,控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号等。S3C2410一共有GPA到GPH8个这些I/OPorts大部分是复用的,通常可以GPIO口、117个pins。用作为输入口(input)、输出口(output)以及特殊功能口(如中断信号)。通过相应口的配置寄存器(GPxCON)可以选择配置为不同的功能。配置好GPIO口的功能后就可以在相应数据寄存器GPxDAT读/写数据,GPxUP用于确定是否使用内部上拉电阻。表1WINCE流驱动函数集Tab.1ThefunctionsetofWINCEstreamdriver当引脚设为输入时,读此寄存器可知相应引脚的状态是高是低;当引脚设为输出时,写此寄存器相应位可令此引脚输出低电平或高电平。某位为0时,相应引脚无内部上拉;为GpxUP:相应引脚使用内部上拉。1时,(1)定义一个寄存器结构体变量,给这个变量分配空间并且映射到寄存器的空间上PRIVATEvolatileS3C2410X_IOPORT_REG*v_pIOPregs;/*GPIO寄存器对应的虚拟地址*/PRIVATEBOOLPIO_InitializeAddresses(void){BOOLRetValue=TRUE;《现场总线技术应用200例》
您的论文得到两院院士关注嵌入式软件应用//IORegisterAllocation(volatileS3C2410X_IOPORT_REG*)Virtu-v_pIOPregs=PAGE_NOACCESS);……else{alAlloc(0,sizeof(S3C2410X_IOPORT_REG),MEM_RESERVE,if(!VirtualCopy((PVOID)v_pIOPregs,(PVOID)(S3C2410X_BASE_REG_PA_IOPORT>>8),sizeof(S3C2410X_IOPORT_REG),PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE))……}在WindowsCE中,程序访问的地址都是虚拟地址,因此,要访问硬件物理地址,必须将硬件物理地址空间映射到虚拟空间。该空间的大VirtualAlloc()函数的功能是申请一块虚拟内存空间,小为sizeof(S3C2410X_IOPORT_REG)字节;()函数的VirtualCopy功能是将VirtualAlloc()函数申请到的虚拟空间映射到GPIO寄存器的物理地址(PVOID)(S3C2410X_BASE_REG_PA_IOPORT>>通过全局结构体变量指针v_pIOPregs就可以访问8)。经映射后,GPIO寄存器了。(2)驱动程序配置在文件中添加项目$(_FLATRELEASEDIR)H加入这一行,指明在生成windowsce内核映像时自动将加入到内核映像。在文件中添加如下内容[HKEY_LOCAL_MACHINEDriversBuiltInPIO]"Prefix"="PIO""Dll"="""FriendlyName"="gpioDriver""Index"=dword:0"Order"=dword:0当WindowsCE启动时,就会自动加载该驱动了。编译成功之后,则会得到一个的文件,此文件即为按照硬件平台定制的内核镜像。图1流接口驱动程序的工作结构图ThestructureOfStreaminterace应用程序使用windowsCE操作系统的文件API函数和流接口进行通信,从而达到应用程序访问驱动程序及操作硬件的目的。流接口驱动程序具有固定的入口点函数。windowsCE的文件系统通过这些入口点函数与流接口驱动进行通信。应用程序在利用指定设备标识通过CreateFile打开设备后,调用ReadFile、WriteFile、DeviceIoControl等函数即可读取数据,与硬件设备进行通讯。设备标识是由3个字母、1个数字和冒号组成。一般地说,应用程序调用ReadFile读取数据,调用WriteFile写出数据,调用DeviceIoControl进行设备的控制和状态的读取,DeviceIoControl是应用程序和驱动程序通信的重要函数。技3控制Led程序的实现术开发板2410电路图中LED1—LED4分别对应I/O口那如何控制LED灯亮灭呢?同样创GPG2,GPE13,GPE12,GPE11。可以在电路图中看出:(VDD33V),因LED二极管左边为高电压此只要在LED右边对应的I/O口引脚输入低电平,导通电路,新就使对应引脚输出一个低LED就可以亮了。即要使某个灯亮,电平;要使某个灯灭,就使对应引脚输出一个高电平。利用EVC开发一个可运行于S3C2410开发板windowsCE操作系统上的应用程序。该应用程序通过调用GPIO驱动来控制开发板上的4个led。由于GPIO驱动为流接口驱动,所以使用CreateFile()函数以文件的方式打开驱动,获取本驱动文件的句柄,然后就可以使用该句柄调用DeviceIoControl()函数,以实现以上提到的功能。)打开GPIO驱动1HANDLEhFilehFile=CreateFile(TEXT("PIO1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);打开成功,将返回一个不为INVALID_HANDLE_VALUE的句柄。)设置led对应的I/O口为输出口2BYTEpinnum=2;DWORDIOMask=(0X01<<11)+(0x01<<12)+(0X01<<13);ret=::DeviceIoControl(hFile,IOCTL_GPE_SET_MUL-TI_PIN_OUT,&IOMask,1,NULL,0,NULL,NULL);ret=::DeviceIoControl(hFile,IOCTL_GPG_SET_PIN_OUT,&pinnum,1,NULL,0,NULL,NULL);由CreateFile()获得;hFile为驱动文件句柄,IOCTL_GPE_SET_MULTI_PIN_OUT设置多个引脚为输出引脚;&IOMaskGPIO引脚编号掩码;()设置单个引脚为IOCTL_GPG_SET_PIN_OUT输出引脚;&pinnumGPIO口编号。)设置led对应的I/O口为低电平(下转第283页)3邮局订阅号:82-946360元/年-141-2驱动程序与应用程序的通信中设备可以是指任何需要控制的资源的物理或者逻辑的系统实体(包括软件和硬件),驱动程序则是一个管理设备、服务或者协议的软件模块,它将操作系统和设备连接起来,使操作系统能够识别设备,并为应用程序提供设备服务。驱动信息可以通过访问注册表记录得到,而驱动程序也是通过设备管理的几个部分协作得以正常工作。当用户访问一个设备时,通过查询注册表中的相关项目就可得到驱动程序可以提供的接口。由WinCE的流式接口驱动程序以动态链接库的形式存在,设备管理器(通常是或者)统一加载、管理和卸载。与具有单独目的的内部设备驱动程序相比,所有流式接口驱动程序都是用同一接口并调用同一个函数集。流接口驱动程序与操作系统和硬件的关系如图所示:《PLC技术应用200例》
您的论文得到两院院士关注电子设计sityofScienceandTechnologyofSuzhou,Suzhou,215011)XUHong-hua(DepartmentofElectronicInformationalEngineering,SuzhouVocationalCollege,Suzhou215104)LIUKe通讯地址:(215011苏州市高新区滨河路1701号苏州科技大学电子学院)许洪华(收稿日期:2009.05.03)(修稿日期:2009.06.05)point++;elsepoint=0;}returnpoint;以下为串口转发报文部分程序。inti,k;if(Serial_Location<>UDP_Location)/*指针不重合则启动串口转发*/{Point_Refresh(Serial_Location);/*读取转数据长k=UDP_ReceiveBuffer[Serial_Location];度*/for(i=0;i
版权声明:本文标题:WindowsCE下GPIO驱动程序的设计与应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1708768529h530801.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论