新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于WindowsCE下S3C2410的多串口移植技术

基于WindowsCE下S3C2410的多串口移植技术

作者:时间:2012-04-12来源:网络收藏

嵌入式系统已经渗入到国民经济的各个领域,而嵌入式操作系统是嵌入式系统的灵魂。目前国际上常用的操作系统有 VxWorks、Windows CE、Linux等。其中,微软公司开发的 Windows CE 以其快速的开发流程、灵活的软硬件选择和健壮的最终产品已成为越来越多嵌入式产品开发的首选。

本文引用地址:http://www.amcfsurvey.com/article/171637.htm

由于嵌入式系统的硬件平台种类繁多,.net支持的处理器种类就有ARM,POWER PC, MPS、X86等几大类,各个大类之内又包含多种CPU。各硬件厂商提供的 .net 的硬件驱动并不全,因此开发人员经常需要根据自己特定的硬件平台进行驱动开发。.net的标准BSP一般只为我们开通了一个,很难满足使用要求。本文就是在这样的背景下介绍在WindowsCE.net下是如何开发的另外两个驱动的。

一、及其简介

该芯片是三星公司生产的32位RISC嵌入式处理器。它专为手持设备和一般应用而设计,能满足嵌入式系统对低成本、低功耗、高性能、小体积的要求。为了尽可能减少系统的整体成本,包括了以下组件: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层的功能。分层和不分层并不是绝对的,任何分层的驱动程序都可以用不分层的驱动程序来代替。如果时间和效能是最关键的要素时,最好选择不分层驱动程序。

20.jpg
图1 Windows CE下驱动程序的结构 三、S3C2410串口驱动

在WINCE中,串口驱动模型遵循ISO/OSI网络通讯模型,就是说串口属于WINCE网络模块的一部分,其中硬件实现网络的物理层,驱动和 serialAPI共同组成数据的链路层。WINCE提供的串口驱动是采用分层结构设计的,MDD提供框架性的实现,负责提供OS所需的基本实现,并使代码设计与具体的硬件设计无关,而PDD提供了对硬件操作的相应代码,而这些代码则通过结构体PHWOBJ相互联系起来。PHWOBJ结构体包含该驱动对应的中断识别号以及该驱动在PDD层所使用的所有其它接口函数的接口。从整体来看,串口驱动属于可安装驱动。在针对一种特定硬件实现串口驱动的时候,首先,我们需要了解硬件的物理特性和控制逻辑,然后,根据DDSI的约束来进行实现,即实现与结构体PHWOBJ相关的一系列函数即可。串口驱动模型定义了串口的全部功能。也就是说,在这种模型中,除定义了常用的TX和RX外,还对DTR、RTS等引脚进行了定义,使得该串口模型具有支持流控制和Modem驱动的能力。

为添加串口2和串口3的驱动,首先在Oalintr.h中添加串口中断的宏定义:
#define SYSINTR_SERIAL3 (SYSINTR_FIRMWARE+9)
#define SYSINTR_SERIAL2 (SYSINTR_FIRMWARE+19)


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭