当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于WindowsCE下S3C2410的多串口移植技术

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

由于嵌入式系统的硬件平台种类繁多,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层所使用的所有其它接口函数的接口。从整体来看,串口驱动属于可安装驱动。在针对一种特定硬件实现串口驱动的时候,首先,我们需要了解硬件的物理特性和控制逻辑,然后,根据DDSI的约束来进行实现,即实现与结构体PHWOBJ相关的一系列函数即可。串口驱动模型定义了串口的全部功能。也就是说,在这种模型中,除定义了常用的TX和RX外,还对DTR、RTS等引脚进行了定义,使得该串口模型具有支持流控制和Modem驱动的能力。

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

[!--empirenews.page--]

然后在注册表中添加中串口2、3的注册项:
[HKEY_LOCAL_MACHINEDriversBuiltInUART1]
"DeviceArrayIndex"=dword:1
"Irq"=dword:13          //中断号
"IoBase"=dword:50004000 //串口2地址
"IoLen"=dword:2C
"Prefix"="COM"       //设备文件前缀
"Dll"="SER2410.Dll" //串口驱动动态连接库
"Index"=dword:2
[HKEY_LOCAL_MACHINEDriversBuiltInUART2]
"DeviceArrayIndex"=dword:2
"Irq"=dword:09     //中断号
"IoBase"=dword:50008000 //串口3地址
"IoLen"=dword:2C
"Prefix"="COM"    //设备文件名前缀
"Dll"="SER2410.Dll" //串口驱动动态连接库
"Order"=dword:0
"Index"=dword:3

其次,修改文件 ser2410_ser.c。

在此文件中增加串口2、3的初始化函数,并添加两个函数表:
SerInitSerial2( ULONG Identifier,PVOID pMddHead,PHWOBJ pHWObj);
SerInitSerial3( ULONG Identifier,PVOID pMddHead,PHWOBJ pHWObj);
const HW_VTBL IoVTbl2{ };
const HW_VTBL IoVTbl3{ };

在函数GetSerialObject(DWORD DeviceArrayIndex)中添加对串口2、3的处理程序。GetSerialObject函数是PDD层唯一不能改变函数名的函数,它最先被 MDD层的COM-Init函数调用,通过搜索注册表中DeviceArrayIndex项的值,返回给MDD层一个PHWOBJ结构体。相关代码如下:
if ( DeviceArrayIndex == 0 )
pSerObj = (PHWOBJ)(&IoObj);
else if (DeviceArrayIndex == 1)
pSerObj = (PHWOBJ)(&IoObj2);
else if(DeviceArrayIndex == 2)
pSerObj = (PHWOBJ)(&IoObj3);
else
pSerObj = (PHWOBJ)(&IoObj);

最后,修改文件 ser2410_hw.c 中的函数 SL_Init( PVOID pHead, PUCHAR  pRegBase, UINT8 RegStride, EVENT_FUNC EventCallback, PVOID pMddHead,        PLOOKUP_TBL ),根据不同的pHead -〉dwIOBase处理不同的端口内容,串口1的dwIOBase为0X50000000,串口2的dwIOBase为0X50004000,串口3的 dwIOBase为0X50008000。

至此,驱动更改完毕。重新编译,生成新的SDK,安装后即可在新平台下使用串口2和串口3。

在EVC中通过函数CreateFile(szPort,GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING,0,NULL)即可打开所需的串口,然后通过COMMTIMEOUTS结构设置通讯超时设置,通过DCB结构设置奇偶校验、波特率、停止位个数等。成功打开端口后,就可以通过WriteFile发送数据,通过ReadFile接收数据。

四、结束语

本文作者的创新点在于充分利用S3C2410硬件资源,开发OEM层串口驱动程序,由于可以同时使用三个串口,提高了稳定性,精简硬件设计,具有较好的推广价值。

参考文献:
[1]江俊辉,基于ARM的嵌入式系统硬件设计,微计算机信息,2005年,7-2
[2]田东风,Windows CE应用程序设计,机械工业出版社,2005年
[3]陈向群等,Windows CE.NET系统分析及试验教程,机械工业出版社,2003年
[4]于明等,ARM9嵌入式系统设计与开发教程,电子工业出版社,2006年
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭