您的当前位置:首页正文

Windows CE.net的AD7854驱动程序开发

2021-02-04 来源:爱go旅游网
维普资讯 http://www.cqvip.com 学习园地 W 的 ■东南大学 周怡君 金振兴 介绍基于Windows CE.net的AD7854流接口驱动程序的开发。以AD7854与嵌入式处理器¥3C2410接 .. 口电路为依据,详细阐述Windows CE.net的中断处理过程,给出驱动开发的具体实现过程、涉及的内核 文件以及部分源代码。该驱动程序的实现为基于Windows CE.net的嵌入式系统引进AD7854提供了 方便。 关键词 Windows CE.net AD7854 中断处理 设备驱动 引 言 AD7854是一款高速、低功耗的12位并行接口模数 2 Windows CE.net设备驱动简介 Windows CE.net设备驱动模型主要有两种:本机设 备驱动与流接口设备驱动。不同的驱动模型只能通过它 们的软件接VI来区别,而不是它们适用的设备。驱动程序 模型决定其输出的软件接VIl_1]。 本机设备驱动程序适于集成到基于Windows CE.net 平台的设备,如通用I.ED驱动和电源驱动等。每种本机 设备驱动程序都有精确的要求和特殊的目的,微软提供了 定制接口的方式来支持内部设备驱动程序 ]。一般来说, 只有OEM开发商对本机设备驱动程序感兴趣,而独立硬 件销售商只开发附加的硬件驱动程序。Windows CE.net 平台生成器(platform builder)提供本机设备驱动程序的 样本,可考虑把本机设备驱动程序样本应用到自己的平台 上,而无需再从头开发自己的本机驱动程序。 流接口设备驱动程序是一般类型的设备驱动程序。 转换芯片,其工作电压范围是3~5 V,采样频率最高为 200 kHz。由于AD7854在正常的工作模式下功耗为5.4 mw,在节电模式下功耗为3.6 w,因此在便携式设备中 得到广泛的应用。AD7854具有自校准和系统校准功能, 可确保其精确地工作。AD7854含有片上采样保持电路 和片上参考电压(2.5 V),从而使外围电路设计得以简化。 当前,在先进的便携设备中,大量引进嵌入式操作系 统对系统资源进行管理,因此开发硬件设备的驱动成为构 建便携式系统的一个重要工作。本文以¥3C2410为处理 器,开发了基于Windows CE.net的AD7854驱动程序,详 细阐述Windows CE.net下AD7854流接口驱动程序的实 现过程及相关内容。 1 AD7854与¥302410的扩展设计 为确保AD7854在¥3C2410的控制下完成采样和模 数转换,必须合理地设计接口电路。AD7854为12位并 行模数转换芯片,¥3C2410是32位微处理器,因此,一次 读操作即可完成AD7854转换结果的读取。但是,对于 AD7854校准寄存器的读操作以及对各寄存器的写操作 它表现为用户一级的动态DLL,用来导出一组固定的函 数,称为“流接口函数”。应用程序可以通过文件系统接口 函数(API)'访问这些接口函数,从而调用驱动程序,驱动 硬件设备进行工作。在流接VI驱动程序中,驱动程序负责 D0 1A0 1A15 1B0 。 D7 LnWE LnOE LnGCS2 WE A <== D15 Ln'WE LnWE LLn0E nOE LLnGCS2 nGCS2 LADDR0 LADDRD EⅡ r0 EINT0 < ==> 1B? 都需要2个读或写操作,因此,统一使用2个读/写操作完 成对AD7854的操作,即仅选用AD7854的低8位数据线 作为数据传送通道。 RD 为了提高¥3C2410的驱动能力,在¥3C2410与外设 之间加入了一个双向数据缓冲器74LVC16245。设计的 A/D转换接口电路原理如图1所示。 7R 《聋I;;札 入主:禾 刍椭 CS LADDR0 HBEN EINT0 BUSY ADCLK 图1 AD7854与¥302410的接口电路 ,, ……… , &:p-m、 维普资讯 http://www.cqvip.com 把外设抽象成一个文件,而应用程序则使用操作系统提供 的API对外设进行访问。流接口驱动程序几乎支持任何 类型的、可以连接到基于Windows CE.net平台的外部设 备,例如打印机、调制解调器等。本文介绍的AD7854驱 动也是采用流接口驱动模型,属于流接口驱动的范畴。流 接口设备驱动的体系结构如图2所示。 码进行修改。主要修改的内核文件如下: ①修改 WlNCEROOT \PLATFORM\SMDK2410\ INC\oalintr.h文件; ②修改 WINCEROOT \PLATFORM\smdk2410 \kernel\hal\arm\armint.e文件中的OEMInterrupt Han— dler()函数; ③在中断服务线程(IST)中调用InterruptEnable()、 InterruptDisable()、InterruptDone()等函数对中断进行操 作时,系统内核调用OEMInterruptEnable()、OEMInter— ruptDisable()、OEMInterruptDone(),对中断寄存器进行 设置,完成中断允许、中断禁止和中断完成操作。对这3 个OEM函数的修改,是通过修改 WINCEROOT \ PLATFORM\smdk2410\kernel\hal\efw.e文件完成的。 l 堡 I 图2流接口驱动程序的体系结构 内核文件的修改可以参照内核文件函数的具体实现 来完成。经过对Windows CE.net内核文件的修改,完成 了物理中断EINTO到逻辑中断号SYSINTR—ADC的映 3 AD7854驱动设计与实现 由图1所示的硬件电路可知,AD7854被直接映射到 系统的内存,它的物理地址是0xl0000000,因此,该设备 射。至此,就可以利用Windows CE.net提供的API函 数,通过对逻辑中断SYSINTR—ADC的处理来完成物理 中断零的操作。 的驱动程序可以选用单片式流接口设备驱动模型。同时 ¥3C241O采用中断的方式对AD7854的转换结果进行读 取并启动下一次的转换。因此,开发A/D驱动主要由两 个部分组成:内核部分和流接口函数部分。内核部分主要 完成中断的处理,包括物理中断到逻辑中断的转换,中断 3.2 AD7854流接口函数的实现 流接口驱动程序实质上就是一个动态链接库,在 Windows CE.net中,流接口函数一共有1O个。这些流接 的使能、禁止,唤醒中断服务线程等工作;流接口函数部分 主要通过实现Windows CE.net提供的接口函数完成对 AD7854的读、写操作。 口函数并不需要每个都要有具体的实现代码,关键是要根 据设备的具体工作流程来完成相应的接口函数。本设计 中开发的AD7854的驱动程序主要实现的接口函数为: XXXDeinit、XXX—Init、XXX——3.1 AD7854中断在Windows CE中的处理 内核部分主要是修改Windows CE.net中与中断相 关的内核文件,完成物理中断到逻辑中断的映射。由图1 可知,AD7854占用外部中断0(EINT0)。为了让操作系 Open、XXX—Close、XXX —Read、XXX—Write。XXX为设备文件名的前缀,由于开 发的是模数转换芯片的驱动,故在此将该前缀命名为 “ADC”。以下具体介绍在Platform Builder开发环境下 AD7854驱动的开发过程。 统能够处理外部中断0,必须对其关于中断处理的内核代 paper@mesnet.conr.cn(投稿专用) Micr。∞ntr。11ers&Embedded 8ystems 7 7 维普资讯 http://www.cqvip.com 首先,在Platform Builder4.2开发环境下为AD7854 的驱动建立一个WCE Dynamic—Link Library工程,随后 就可以在该工程下完成各流接口函数。流接口函数的实 数,本文结合硬件具体介绍其实现过程: ①PADC—CONTEXT ADC—Init(I CTSTR pCon— text,LPCVOID lpvBusContext)。该接口函数在驱动程序 现需要完成两个主要方面的工作:AD7854数据结构的建 立和各接口函数代码的实现。 (1)AD7854的数据结构 加载时,由设备管理器调用。在该函数中主要完成硬件初 始化工作,如映射设备的物理内存、配置相关寄存器、创建 中断事件、中断服务线程等。 ADC_在编写流接口函数之前,应该定义设备的数据结构, 这是对现实设备的抽象。根据AD7854在操作中所涉及 的CPU相关存储器以及AD7854内部操作的需要,现将 AD7854抽象成以下结构类型: typede f struct ADCCONTEXT {一 _Init函数需按照一定的顺序完成驱动的初始化 工作,其内部函数的调用顺序如图3所示。ADC—Init调 用成功以后,将返回AD7854结构体的首地址——pADC, 同时表明该驱动加载成功。 ②DwORD ADC—Read(PADC—CONTEXT pADC, PUCHAR pBuffer,DWORD Count)。该接口函数主要完 .volatile MEMreg vpMEMregs; //ARM核的存储器配置寄存器,主要 //用于设置Bank2的数据位数 volatile IOPreg vpIOPregs; 成对AD7854的读操作,代码是对操作的抽象。为了更好 地体现开发过程,首先介绍一下AD7854的读操作过程。 AD7854一次输出16位数据,分成2次输出(高8位、 低8位)。在读写时序中,除了通过对CPU的存储寄存器 //ARM核的I/O口配置寄存器 volatile PBYTE vpADAddress; //AD7854的虚拟基地址 的相关配置以满足时间上的要求外,另一个重要的地方就 是注意满足高字节使能输出引脚(HBEN)的需要。具体 是在输出高字节时,该引脚应输入高电平。AD7854输出 一volatile BYTE bDataBuffer[2]; //AD7854数据输出/写入的缓冲区 volatile unsigned int*iReady; 次16位数据时有两种输出方式:其一就是高8位先输 BOOL bReadOutput; DWORD OpenCount; 出,然后是低8位输出(与此相对应,HBEN引脚在 AD7854读时序中第1个字节为高电平,第2个字节为低 电平);其二刚好相反。 由图3可知,HBEN的电平由¥3C2410的地址线0确 定,因此在一个AD7854的读时序中地址线0应改变一次 自己的状态。同时AD7854的片选与LnGCS2相连,这也 HANDL ADCEvent;//中断事件句柄 HANDLE hMap; DWORD IntAIX;; HANDLE hIst;//中断服务线程句柄 CRITICALSECT10N RegCS; 就构成了AD7854的两个读物理地址:0xl000 0000和 0xl000 0001。在本设计中,规定先读低8位数据然后为 高8位,因此地址线应先送出0xl000 0000然后送出 0xl000 0001。AD7854的读周期时序如图4所示。  }ADC—CONTEXT,*PADCCONTEXT;#define PHADBase 0xl0000000 //AD7854的物理基地址 AD7854的数据结构可以看作是与 AD7854相关的逻辑体。通过Windows CE.net提供的内存映射函数VirtualA1一 loc()和VirtualCopy(),可以将逻辑体与 具体的物理地址关联起来,完成对物理存 储器的设置。 (2)流接口函数的开发 流接口函数为应用程序操作硬件提 供统一的接口,完成对硬件的抽象工作。 一个流接口函数实质上就是提供某一特 函数实现的内容千差万别。有的接口函 定功能的模块,根据硬件的不同,各接口 数需要很多的代码,有的就是一个空的函 数体。在AD7854驱动的接口函数中,初 始化函数以及读写函数是主要的接口函 图3设备初始化接口函数工作时序图 义 78 《茸‘;札 入工:蠢0.刍佣 J. , …一… ,r b 4-月 、 维普资讯 http://www.cqvip.com HBEN 释放内存空间等工作。虽然必不可少,但是对AD7854的 操作不是主要的,在此不再详细介绍。 CS 编写导出函数和注册表文件,编译生成dIl文件,通过 RD PB将其制作成CEC文件n],在定制操作系统时可以将驱 动程序加入操作系统中。这样就完成了驱动程序的编写, 有效》-_————_《有效 D 实现了操作系统与硬件之间的连接。 图4 AD7854读周期时序(低8位先输出) 4 结 论 Windows CE.net是多任务实时嵌入式操作系统,具 有良好的图形界面,实时性良好、功能强大,适用于工业控 制领域。本文以AD7854的驱动开发为例,阐述了win— dows CE.net对外部中断的处理过程和流接口驱动的开 由此可开发AD7854读接口函数,具体代码如下: DWORD ADC—Read(PADC—CONTEXT pADC,PUCHAR pBuffer,DWORD Count){ DW0RD dwRet=0: RETAILMSG(1,(TEXT(”ADG_Read\n”))); BYTE bReadBuffer[2]; 发方法。该驱动程序已成功应用在所开发的作业环境监 测与评价系统中,在微气候各指标的监测方面应用效果良 好。l墨 //存储AD7854转换的输出结果缓冲区,2字节大小; bReadBuffer[O]一 pADC_>v_pADAddress; //读出AD7854的低8位结果,此时HBEN为低电平 pADC_>vpADAddress++; _参考文献 Eli周毓林,宁杨,等.Windows CE.NET内核定制及应用开发 [M].第2版.北京:电子工业出版社,2006. [2]ARMSYS2410一B开发板硬件用户手册. ‘//地址加1,是HBEN为高电平, //为输出高8位做准备 bReadBuffer[1]一 pADC_>v_pADAddress; //读出AD7854的高8位结果 pADC_>vpADAddress一一: _[3]3V tO 5V Single Supply,200 kSPS 12一Bit Sampling ADCs AD7854. //恢复AD7854的地址,为下一次读做准备 dwRet=min(2,Count); strncpy((PCHAR)pBuffer,(PCHAR)bReadBuffer, dwRet); [4]张冬泉,谭南林,等.Windows CE实用开发技术[M].北京: 电子工业出版社,2006. Es]吴刚.基于ARM便携振动监测仪的WinCE移植和驱动开 发[D].北京:华北电力大学,2005. [6]赖乙宗,李迪,张春华.Windows CE.NET中断架构分析和 高速AD驱动程序的开发[J].计算机应用,2005,25(12): 456—458. //将缓冲区的数据读出,即送出 //AD7854的转换结果 return dwRet; ) //返回实际读取的字节数 [7]吴凡,赖乙宗,李迪.基于Windows CE.net嵌入式数据采集 卡的驱动程序设计[J].计算机应用,2005,25(12):424— 425。428. 写接口函数DWORD ADC—write(PADC—CON— TEXT pADC,PUCHAR pBuffer,DWoRD Count),主要 完成对AD7854的写操作。AD7854的写操作过程和读操 作很相似,代码的实现过程也基本相同,在此就不再赘述。 其余的接口函数主要完成返回AD7854的结构句柄, paper( ̄mesnet.corn.en(投稿专/1I) Micr0c。ntr。Uers&Embedded Systems 7 9 

因篇幅问题不能全部显示,请点此查看更多更全内容