新闻中心

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

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

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

然后在注册表中添加中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接收数据。

四、结束语

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

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


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭