WindowsCE下GPIO驱动程序的设计与应用

技术创新
《微计算机信息》(嵌入式与SOC)2009年第25卷第6-2期嵌入式软件应用
Windows CE下GPIO驱动程序的设计与应用The Design and application of GPIO drive for Windows CE
(河北工业大学机械工程学院)胡秀凤丁承君张明路马玉震
HU Xiu-feng DING Cheng-jun ZHANG Ming-lu MA Yu-zhen
摘要:Windows CE流接口设备驱动程序是一种基本的设备驱动程序。本文以S3C2410开发板中的GPIO流接口驱动为例,说明了驱动程序所包含的函数以及如何在应用程序中调用驱动程序的开发过程,并解决了控制4个LED工作的问题。
关键词:Windows CE;GPIO驱动;LED
中图分类号:TP31文献标识码:A
Abstract:Stream interace driver for Windows CE is a simple and basic device driver model。This paper exemplifies the GPIO drive of S3C2410,indicates some functions should be in-cluded in its drive and how to be called in application.Then,this paper settles the problems of controlling four leds.
Key words:Windows CE;GPIO drive;LED
文章编号:1008-0570(2009)06-2-0140-02
引言
嵌入式操作系统Windows CE下的设备驱动程序将操作系
统与硬件联系起来,使得操作系统可以管理硬件设备,向应用程
序提供访问硬件的调用。编写驱动程序的目的一般是为了把设
备的功能呈现给应用程序,方便使用。最常见的情况是应用程序
用一个已有的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平台上,Windows CE系统将GPIO的实地址
(2410的GPIO的基地址为0x56000000)映射到虚拟地址空间
(GPIO对应为0xB1600000),这样通过对这段虚拟地址空间的
操作,就能够完成对GPIO或者其他片内资源的控制、输入输出
工作。GPIO口一是个比较重要的概念,用户可以通过GPIO口
和硬件进行数据交互,控制硬件工作(如LED、蜂鸣器等),读取
硬件的工作状态信号等。S3C2410一共有GPA到GPH8个
GPIO口、117个pins。这些I/O Ports大部分是复用的,通常可以
用作为输入口(input)、输出口(output)以及特殊功能口(如中断信
号)。通过相应口的配置寄存器(GPxCON)可以选择配置为不同
的功能。配置好GPIO口的功能后就可以在相应数据寄存器
GPxDAT读/写数据,GPxUP用于确定是否使用内部上拉电阻。
表1WINCE流驱动函数集
Tab.1The function set of WINCE stream driver
当引脚设为输入时,读此寄存器可知相应引脚的状态是高
是低;当引脚设为输出时,写此寄存器相应位可令此引脚输出
低电平或高电平。GpxUP:某位为0时,相应引脚无内部上拉;为
1时,相应引脚使用内部上拉。
(1)定义一个寄存器结构体变量,给这个变量分配空间并
且映射到寄存器的空间上
微计算机信息
PRIVATE volatile S3C2410X_IOPORT_REG*v_pIOPregs;
/*GPIO寄存器对应的虚拟地址*/
PRIVATE BOOL PIO_InitializeAddresses(void)
{
BOOL RetValue=TRUE;
胡秀凤:硕士研究生
基金项目:基金申请人:丁承君;项目名称:基于全方位视
觉的移动机器人动态目标探测与导航;基金颁发部门:国
家高技术研究发展计划(863项目)(2007AA04Z229)
术创新
嵌入式软件应用
您的论文得到两院院士关注//IO Register Allocation
v_pIOPregs =(volatile S3C2410X_IOPORT_REG *)Virtu -
alAlloc (0,sizeof (S3C2410X_IOPORT_REG),MEM_RESERVE,
PAGE_NOACCESS);
……else {
if (!VirtualCopy ((PVOID)v_pIOPregs,(PVOID)(S3C2410X_BASE_REG_PA_IOPORT>>8),sizeof(S3C2410X_IOPORT_REG),PAGE_PHYSICAL |PAGE_READWRITE |PAGE_NOCACHE))
……}
在Windows CE 中,程序访问的地址都是虚拟地址,因此,要访问硬件物理地址,必须将硬件物理地址空间映射到虚拟空间。VirtualAlloc()函数的功能是申请一块虚拟内存空间,
该空间的大小为sizeof(S3C2410X_IOPORT_REG)字节;VirtualCopy ()函数的功能是将VirtualAlloc()函数申请到的虚拟空间映射到GPIO 寄存器的物理地址(PVOID)(S3C2410X_BASE_REG_PA_IOPORT >>8)。经映射后,通过全局结构体变量指针v_pIOPregs 就可以访问GPIO 寄存器了。
(2)驱动程序配置
在platform.bib 文件中添加项目
gpio.dll $(_FLATRELEASEDIR)\gpio.dll NK SH
加入这一行,指明在生成windows ce 内核映像时自动将gpio.dll 加入到内核映像。
在 文件中添加如下内容
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PIO]"Prefix"="PIO""Dll"="gpio.dll"
"FriendlyName"="gpio Driver""Index"=dword:0"Order"=dword:0
当Windows CE 启动时,就会自动加载该驱动了。编译成功之后,则会得到一个NK.bin 的文件,此文件即为按照硬件平台定制的内核镜像。
2驱动程序与应用程序的通信
WinCE.NET 中设备可以是指任何需要控制的资源的物理或者逻辑的系统实体(包括软件和硬件),驱动程序则是一个管理设备、服务或者协议的软件模块,它将操作系统和设备连接起来,使操作系统能够识别设备,并为应用程序提供设备服务。驱动信息可以通过访问注册表记录得到,而驱动程序也是通过设备管理的几个部分协作得以正常工作。当用户访问一个设备时,通过查询注册表中的相关项目就可得到驱动程序可以提供的接口。
WinCE 的流式接口驱动程序以动态链接库的形式存在,由设备管理器(通常是 或者 )统一加载、管理和卸载。与具有单独目的的内部设备驱动程序相比,所有流式接口驱动程序都是用同一接口并调用同一个函数集。
流接口驱动程序与操作系统和硬件的关系如图所示:图1流接口驱动程序的工作结构图
The structure Of Stream interace
应用程序使用windows CE 操作系统的文件API 函数和流接口进行通信,从而达到应用程序访问驱动程序及操作硬件的目的。流接口驱动程序具有固定的入口点函数。windows CE 的文件系统通过这些入口点函数与流接口驱动进行通信。应用程序在利用指定设备标识通过CreateFile 打开设备后,调用Re
adFile 、WriteFile 、DeviceIoControl 等函数即可读取数据,与硬件设备进行通讯。设备标识是由3个字母、1个数字和冒号组成。一般地说,应用程序调用ReadFile 读取数据,调用WriteFile 写出数据,调用DeviceIoControl 进行设备的控制和状态的读取,DeviceIoControl 是应用程序和驱动程序通信的重要函数。
3控制Led 程序的实现开发板2410电路图中LED1—LED4分别对应I/O 口
GPG2,GPE13,GPE12,GPE11。
根田鼠那如何控制LED 灯亮灭呢?同样可以在电路图中看出:LED 二极管左边为高电压
(VDD33V ),因此只要在LED 右边对应的I/O 口引脚输入低电平,导通电路,LED 就可以亮了。即要使某个灯亮,
就使对应引脚输出一个低电平;要使某个灯灭,就使对应引脚输出一个高电平。
利用EVC 开发一个可运行于S3C2410开发板windows CE 操作系统上的应用程序。该应用程序通过调用GPIO 驱动来控制开发板上的4个led 。由于GPIO 驱动为流接口驱动,所以使用CreateFile ()函数以文件的方式打开驱动,获取本驱动文件的句柄,然后就可以使用该句柄调用DeviceIoControl ()函数,以实现以上提到的功能。
1)打开GPIO 驱动HANDLE hFile
hFile =CreateFile (TEXT ("PIO1:"),GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
打开成功,将返回一个不为INVALID_HANDLE_VALUE 的句柄。
2)设置led 对应的I/O 口为输出口BYTE pinnum =2;
DWORD IOMask =(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);
hFile 为驱动文件句柄,由CreateFile()获得;IOCTL_GPE_
SET_MULTI_PIN_OUT 设置多个引脚为输出引脚;&IOMask GPIO 引脚编号掩码;IOCTL_GPG_SET_PIN_OUT ()设置单个引脚为输出引脚;&pinnum GPIO 口编号。
3
设置led 对应的I/O 口为低电平(下转第283页)
技术创新
电子设计
您的论文得到两院院士关注point ++;else point =0;
return point ;
}以下为串口转发报文部分程序。int i ,k ;
if (Serial_Location<>UDP_Location)/*指针不重合则启动串口转发*/
{Point_Refresh(Serial_Location);
k=UDP_ReceiveBuffer[Serial_Location];
/*读取转数据长度*/
for(i=0;i<k;i++)
{Point_Refresh(Serial_Location);
SerAputc (UDP_ReceiveBuffer [Serial_Location]);}}/*转发报文*/
串口接收缓冲区设计类似。由于数据通过固定的端口和IP 地址转发,存储数据中不再包含类似于Zigbee 地址的数据项。
3结束语
本文设计适当调整可以用于更多场合。如,动态管理地址
绑定数组,可以适应动态组网;数组中增加IP 地址、
端口号等可适应其他类型报文;调整缓冲区大小可以适应不同尺寸报文收发等。
经过多年的重点扶持,我国工业以太网研究已经取得大量
成果并广泛应用。目前,
工业无线通信技术也列为我国“十一五”863重点研究项目,ZigBee 等技术也将逐步广泛应用于工业自动化领域。本系统开发基于市场现有的通用技术,对中小型控制系统开发和改造有借鉴意义。
文章创新点:提出了一种简洁方便的Zigbee/以太网接入方案,应用地址映射、环形缓冲队列等解决了Zigbee 通信与以太网通信速度协调技术。参考文献
[1]涂煊.基于Modbus 通讯协议的ZigBee 无线分布式IO 模板研制.华东理工大学.2007,1
[2]周宇,景博张,张劼.基于ARM7的嵌入式Web Server 的实现.微计算机信息[J].2008,2:147-149
[3]许洪华.基于以太网和嵌入式Web Server 的控制系统设计研究.清华大学.2005,7助动词
小松930e
[4]张于峰.ZigBee 与局域网通信的网关设计.成都理工大学.2007.7
[5]许洪华,
刘科.基于嵌入式Web Server 的控制器开发与应用.工业控制计算机[J].2004,4:15-16作者简介:许洪华(1968-):男,副教授,工学硕士。苏州科技学院电子信息实验中心(江苏省示范实验中心)主任。研究方向:工业数据通信与控制网络;刘科(1968-):女,副教授,工学硕士。苏州市职业大学教师,研究方向:现场总线与控制网络。Biography:XU Hong -hua (1968-),male (the Han nationality),born in dehui,Jilin Province,associate professor,master,De -partment of Electronics and Information Engineering ,University of Science and Technology of Suzhou ,main research contents:a field bus,Industrial Ethernet ;
(215011江苏省苏州市苏州科技大学电子与信息工程学院)
许洪华
(215104江苏省苏州市苏州市职业大学电子信息工程系)刘科
(College of Electronics and Information Engineering ,Univer -sity of Science and Technology of Suzhou,Suzhou,215011)XU Hong-hua
(Department of Electronic Informational Engineering ,Suzhou Vocational College,Suzhou 215104)LIU Ke
通讯地址:(215011苏州市高新区滨河路1701号苏州科技大学电子学院)许洪华
(收稿日期:2009.05.03)(修稿日期:2009.06.05)
(上接第141页)
BYTE pinnum =2;
DWORD IOMask =(0X01<<11)+(0x01<<12)+(0X01<<13);ret =::DeviceIoControl(hFile,IOCTL_GPE_
CLR_MULTI_PIN,&IOMask,1,NULL,0,NULL,NULL);
ret =::DeviceIoControl (hFile,IOCTL_GPG_CLR_PIN,&pin -num,1,NULL,0,NULL,NULL);
应用程序编制完成后,用usb 线将S3C2410开发板和PC 机通过ActiveSync 连接起来。将应用程序下载到目标开发板上,我们就可以利用定制的控制界面来控制4个led 的开关。
4总结
本文中GPIO 驱动可在ARM9嵌入式系统上正常加载。设计开发的LED 控制程序可完成控制命令的正常传输。实验证明,驱动程序把文件I/O 函数输出到应用函数,
并且通过访问它的外围设备来把设备的性能映射到文件I/O 函数的语义实现这些函数。
本文的创新点在于提出了一种实现GPIO 驱动程序的方法和控制4个LED 的思路,经大量试验证明此种思路很有效。在嵌入式Windows CE 操作系统应用程序调用GPIO 驱动程序的
开发,对其它Windows CE 驱动程序的开发及调用有一定的启示作用。参考文献
[1]周毓林,
宁杨,付林林.Windows CE 内核定制及应用开发[M].北京:
电子工业出版社.2005.[2]林涛.嵌入式操作系统Windows CE 的研究[J].微计算机信息,
2006,6-2:91-93.
[3]微软公司.Microsoft Windows CE Device Driver Kit 设备驱动程序开发指南[M].北京:北京希望电子出版社,1999.
[4]汪兵,
李存斌,陈鹏等EVC 高级编程及其应用开发中国水利水电出版社2005
作者简介:胡秀凤(1982-),女,汉族,河北工业大学硕士研究生,机械电子工程专业,主要研究方向:智能机器人技术及应用;丁承君(1973-),男,汉族,教授,硕士生导师,主要研究方向:移动机器人智能控制、嵌入式计算机系统。
Biography :HU Xiu-feng,born in 1982,female,han,studying in Hebei University of Technology for Master Degree,profession is Mechanical Electronic Engineering,main research direction is the technology and application of intelligent robot.
(300130天津河北工业大学机械工程学院)胡秀凤丁承君
张明路马玉震
通讯地址:(300130天津市红桥区河北工业大学北院中心实验楼501室)胡秀凤
(收稿日期:2009.05.03)(修稿日期:2009.06.05)

本文发布于:2024-09-20 17:54:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/697980.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:驱动程序   设备   控制
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议