400-123-4567

新闻资讯 分类
‘manbext,manbext·(中国区)官方网站’嵌入式开发:WinCE6.0LPC3250串口驱动程序
本文摘要:章节  WindowsCE是一个对外开放的、可升级、可削减的32位动态嵌入式操作系统,具备可靠性好、实时性低、内核体积小的特点,普遍应用于工业掌控、信息家电、移动通信、汽车电子、个人电子消费品等领域。

章节  WindowsCE是一个对外开放的、可升级、可削减的32位动态嵌入式操作系统,具备可靠性好、实时性低、内核体积小的特点,普遍应用于工业掌控、信息家电、移动通信、汽车电子、个人电子消费品等领域。近期版本WindowsEm-beddedCE6.0于2006年11月公布,其特点有:仅次于进程数量到32K,且每个进程有仅次于2GB的虚拟内存空间;将关键的驱动程序、文件系统和图形界面管理器移至了内核中,大大减少了CPU在内核态和用户态间转换导致的性能损失等。

LPC3250是NXP半导体公司(由Philips公司正式成立)发售的具有矢量浮点协处理器的ARM926EJ-SCPU内核的微控制器。它具备非常丰富的外围模块,还包括7个UART,其中4个是标准UART,另外3个是高速UART,都具有64字节的接管和发送到FIFO,最低可反对的速率约921600b/s。为了构建低功耗,LPC3250使用NXP半导体先进设备的开发技术来优化内在功率,并用于增强型的软件控制结构使基于功率管理的应用于获得优化。

在同时拒绝高性能和低功耗的嵌入式应用中,运营Win-dowsCE的LPC3250平台将不会有很好的市场前景,对于最常用到的串口的驱动研发变得尤为重要。  1WindOWSCE的串口驱动模型  基于WindowsCE有两种驱动程序模型:本机设备驱动程序和流模块驱动程序。串口驱动就归属于分层的流模块驱动程序。

分层驱动程序将设备的驱动程序分成两层:平台相关驱动PDD(PlatformDependenceDriver)层和模型设备驱动MDD(ModelDeviceDriver)层。PDD层由特定于等价硬件设备或平台的代码构成,很多时候用户必须根据明确平台改动;MDD层包括平台牵涉到的代码,它通过构建一些操作系统预先定义的模块来构建某一类设备的标准化功能,一般来说由微软公司获取。操作系统与MDD层之间通过DDI(设备驱动模块)展开交互。

MDD层也构建了中断处置线程IST,并定义一些与PDD层的接口函数,这些接口函数称作DDSI(设备驱动服务模块)。  用%_WinCEROOT%来回应WindowsCE的加装根目录,合乎lsquo;550工业规范的串口驱动源码主要坐落于\%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\SERIAL下,主要看表1所列的一些重要文件。  如图1右图,串口应用程序通过设备管理器调用mdd.c中MDD层的标准流设备驱动模块COM_XXX,在COM_XXX中通过结构体HW_INDEP_INFO中HWOBJ结构体调用串口硬件操作者函数HWxxx;然后在cserpdd.cpp中GetSeri-alObject函数通过HW_VTBL类型数组IoVTb1将HWxxx同构为Serxxx系列函数,Serxxx系列函数则调用CSerialPDD类中的成员函数(其中的纯虚函数由CserialP-DD的承继类CP-dd16550构建,确实与物理底层操作者的是CPdd16550的数据成员CReg16550中的Write_XXX、Read_XXX函数);最后通过调用WRITE_PORT_UCHAR和READ_PORT_UCHAR系统函数来构建。

  2WinCE6.0下的LPC3250串口驱动程序研发  WindowsCE的串口驱动程序研发中最重要的是两点:配备串口涉及的寄存器和处置中断。配备寄存器,还包括构建与物理底层操作者的函数,将寄存器地址映射到内核进程的虚拟地址,在串口操作者的有所不同阶段配备好各种寄存器;处置中断,还包括将物理中断同构为系统中断,将中断与事件初始化,中断再次发生时展开适当的中断处置。  LPC3250串口与lsquo;550工业规范的串口有差异,为了确保程序的通用性和尽量减少代码量,在构建LPC3250串口驱动程序时,必须承继CPdd16550和CReg16550类,根据实际的硬件特性构建它们的纯虚函数并拓展其元神函数的功能,配备硬件涉及的寄存器和改动涉及代码。首先构建CReg16550的承继类CRegLPC32xx,主要构建与物理底层操作者的函数Write_xxx和Read_xxx,对串口寄存器展开读写操作。

这里要留意的是LPC3250串口寄存器地址间隔是32位,而不是标准的8位;CPdd16550的承继类Clpc32xxPdd16550UART本质还是个抽象类,同时为标准串口和高速串口服务,要新的构建Init、GetDivisorO-{Rate、GetWaterMark、MapHardware、CreateHardwareAc-cess、CreateSerialObject、DeleteSerialObject等函数,其他的函数可以必要调用CPdd16550的成员函数,只必须改动涉及串口寄存器的宏定义。  在Clpc32xxPdd16550UART的Init函数中,GetIsrInfo以串口的Active注册表键为依据追查物理中断号,并留存在DDKISRINFO结构体的dwlrq成员中。KernelloCon-trol函数将物理中断号切换为逻辑中断号,符合条件就将逻辑中断号回写到注册表中。

涉及代码如下:  接着调用父类CPdd16550的Init函数,创立中断服务线程(IST)事件,并通过InterruptInitialize函数将事件与逻辑中断号关联一起,最后调用CreateHardwareAccess和MapHardware函数将串口恩地址及涉及寄存器片内地址映射到内核进程的虚拟地址。


本文关键词:万博app|官方网站IOS/安卓通用版/手机APP,官网,manbext,manbext·(中国区)官方网站

本文来源:万博app|官方网站IOS/安卓通用版/手机APP,官网-www.wingcoo.com

官方微信 关闭