微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于WINCE&S3C2410的多串口移植技术

基于WINCE&S3C2410的多串口移植技术

时间:11-13 来源:互联网 点击:

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

  为添加串口2和串口3的驱动,首先在Oalintr.h中添加串口中断的宏定义:

#define SYSINTR_SERIAL3 (SYSINTR_FIRMWARE+9)

#define SYSINTR_SERIAL2 (SYSINTR_FIRMWARE+19)

然后在注册表中添加中串口2、3的注册项:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\UART1]

"DeviceArrayIndex"=dword:1

"Irq"=dword:13 //中断号

"IoBase"=dword:50004000 //串口2地址

"IoLen"=dword:2C

"Prefix"="COM" //设备文件前缀

"Dll"="SER2410.Dll" //串口驱动动态连接库

"Index"=dword:2

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\UART2]

"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].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.
[2].ARM920Tdatasheethttp://www.dzsc.com/datasheet/ARM920T_139814.html.
[3].COMdatasheethttp://www.dzsc.com/datasheet/COM_1118194.html.
[4].DCBdatasheethttp://www.dzsc.com/datasheet/DCB_1870018.html.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top