基于WINCE&S3C2410的多串口移植技术
由于嵌入式系统的硬件平台种类繁多,WindowsCE.net支持的处理器种类就有ARM,POWER PC, MPS、X86等几大类,各个大类之内又包含多种CPU。各硬件厂商提供的 WindowsCE.net 的硬件驱动并不全,因此开发人员经常需要根据自己特定的硬件平台进行驱动开发。WindowsCE.net的标准BSP一般只为我们开通了一个串口,很难满足使用要求。本文就是在这样的背景下介绍在WindowsCE.net下是如何开发S3C2410的另外两个串口驱动的。
一、S3C2410及其串口简介
该芯片是三星公司生产的32位RISC嵌入式处理器。它专为手持设备和一般应用而设计,能满足嵌入式系统对低成本、低功耗、高性能、小体积的要求。为了尽可能减少系统的整体成本,S3C2410包括了以下组件:16KB的指令和数据CACHE,处理虚拟存储器管理的MMU,支持STN和TFT的LCD控制器,NAND FLASH的系统引导器,SDRAM控制器,触摸屏接口,USB接口,PLL时钟产生器,一个通道的USB从接口,4通道的PWM定时器和一个通道的内部定时器,带有看门狗定时器,117个通用IO口,包括24个外部中断源,内部集成8通道ADC。该芯片提供4种电源模式:一般模式、低速模式、休眠模式和掉电模式;支持WINCE、LINUX等嵌入式操作系统。S3C2410是利用ARM的ARM920T内核,采用0.18 微米的标准CMOS技术制造的。它的小巧低功耗全静态设计,特别适合于对功耗敏感的系统设计。
S3C2410的串口提供了3组独立的异步串行I/O,每个UART通道都包含了16字节的FIFO,用于数据发送和接收,并且都可以在中断方式和DMA方式下进行操作。用来控制串口1、2的寄存器如下:列控寄存器(ULCON)、控制寄存器(UCON)、FIFO控制寄存器(UFCON)、MODEM控制寄存器(UMCON)、TX/RX状态寄存器(UTRSTA)、错误状态寄存器(UERSTA)、FIFO状态寄存器(UFSTAT)、MODEM状态寄存器(UMSTAT)、传输缓冲区寄存器(UTXH)、发送缓冲区寄存器(URXH)、波特率寄存器(UBRdiv)。串口3与串口1、2相比缺少MODEM控制寄存[1]器和状态寄存器。
二、Windows CE系统设备驱动程序特点
设备驱动程序是将操作系统和设备连接起来,使得操作系统能够识别设备并为应用程序提供应用服务的程序。
在Windows CE下的驱动程序有两种模型:内建驱动程序(Built in Driver)和可安装驱动程序(Installable Driver)。内建驱动程序适用于集成到基于Windows CE的设备,这些设备驱动程序是系统所必须的,如键盘驱动和显示驱动等。当系统加载时,它们被静态联结到图形窗口事件子系统(GWES)。可安装驱动程序由设备管理器(device.exe)动态加载到用户模式的动态连接库,它使用流接口驱动架构并借助于文件系统调用从设备管理器应用程序获得的指令。串口驱动即为可安装驱动。
Windows CE下驱动程序结构如图1 所示。在Windows CE下的驱动程序按其结构的不同可分为分层驱动程序和不分层驱动程序两类。在分层驱动程序中,程序代码被分为两层,模型驱动层(MDD)和平台相关驱动层(PDD)。MDD层由顶层所有驱动程序都使用的公用代码组成,而PDD层由与特定硬件设备相关的代码组成。MDD层通过调用PDD层函数来访问硬件。通常,MDD层由微软提供,不用改动,驱动开发人员只须改动针对特定硬件平台的PDD层即可。系统通过设备驱动程序接口(DDI,是由MDD层或不分层驱动程序导出的一组函数)调用MDD层的功能,而MDD层通过设备驱动程序服务提供者接口(DDSI,是由PDD层导出的接口函数)调用PDD层的功能。分层和不分层并不是绝对的,任何分层的驱动程序都可以用不分层的驱动程序来代替。如果时间和效能是最关键的要素时,最好选择不分层驱动程序。
图1 Windows CE下驱动程序的结构
三、S3C2410串口驱动移植
在WINCE中,串口驱动模型遵循ISO/OSI网络通讯模型,就是说串口属于WINCE网络模块的一部分,其中硬件实现网络的物理层,驱动和serialAPI共同组成数据的链路层。WINCE提供的串口驱动是采用分层结构设计的,MDD提供框架性的实现,负责提供OS所需的基本实现,并使代码设计与具体的硬件设计无关,而PDD提供了对硬件操作的相应代码,而这些代码则通过结构体PHWOBJ相互联系起来。PHWOBJ结构体包含该驱动对应的中断识别号以及该驱动在PDD层所使用的所有其它接口函数的接口
- 如何使WINCE启动时自动运行应用程序(04-11)
- 基于WinCE操作系统的通用USB数控键盘设计(08-05)
- 基于WinCE的ARM视频监控系统(11-14)
- WinCE系统下BootLoader的开发(04-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- WindowsCE.Net下CAN卡的驱动程序设计(04-12)