历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2021年03月30日 | 基于WINCE的多串口扩展系统的设计

2021-03-30 来源:21ic

随着当今科学技术的发展,智能化及自动化设备越来越多,其中以计算机网络设备及现场总线的发展最为典型。在大型集中控制现场如停车场主控制系统、多点温度采集系统等,要进行采集和测试的通信点数和通信终端较多,多个串口通讯系统应运而生。普通设备的主控制器通常采用简单的单片机,其往往只有一到三个串口,不能满足多采集点的系统要求。为了完成主控制器对多点的通信及控制,需要进行串口扩展,TL16C554是最为常见的4 串口扩展芯片,有很强的灵活性和实用性。基于ARM9 内核的S3C2440 处理器在嵌入式系统的应用相当广泛,可以运行WINCE 操作系统,此处理器的强大功能及外围接口芯片的丰富性,使得系统的开发相对容易,同时也方便扩展16C554。嵌入式多串口扩展系统功能强、应用场所广泛,具有广泛的市场前景。


1 方案分析


为了使多串口扩展系统的应用场合更加广泛,应选择驱动程序及应用程序开发周期短的方案,因此本设计的方案采用ARM9+CPLD+TL16C554 的硬件框架,软件平台基于WINCE 操作系统,其应用程序和驱动程序的开发周期较短。系统框图如图1 所示。


10.jpg?imageView2/2/w/550


系统的设计包括硬件设计以及 16C554 的WINCE 驱动程序的开发和应用程序的开发。


硬件设计中ARM9 主处理器采用三星公司的S3C2440:其主频最高可以达到533MHz,本系统使用400MHz;总线速度使用100MHz;具有SD 卡接口,支持USB 下载相关内核及镜像;支持多种分辨率的TFT液晶屏;无需围电路的触摸屏接口;外扩64M 的SDRAM,64M 的NAND FLASH;三路UART 通用异步串行口;支持总线方式扩展外设,本系统的另外8 路串口就是通过总线方式扩展两片16C554 实现的。


CPLD 采用ALTERA 公司推出的MAX3000 系列的EPM3128ATC100:具有128 个宏单元;先进高速的I/O接口;具有80 个可用的I/O 口。其高速的硬件运行速度满足本系统的100MHz 的总线扩展速度,I/O 口也满足本系统扩展16C554 的需求。


16C554 采用TI 公司生产的TL16C554AI , 其内部有四个增强型的ACE(AsynchronousConun unicationsElement)异步收发的并/串转换组件TL16C550,波特率通过寄存器的编程可改变,最高可达1Mbps,具有16 字节FIFO 收发深度,可大大减少收发中断次数,提高处理器的效率;具有可独立控制的发送、接收、线路状态和MODEM 状态中断,方便主控制器控制16C554 的收发状态;具有断线产生和检测以及内部故障诊断功能,提高了通信的稳定及可靠性;完善的系统分级中断控制。本系统处理器WINCE 驱动产用中断方式检测16C554 的收发情况。


软件设计中,系统WINCE 应用程序存放在SD 卡中,可针对不同的应用场合编写不同的应用程序。主处理器S3C2440 根据SD 卡内的应用程序控制CPLD+16C554 的串口扩展板,向八路串口收发数据。系统实物完成图如下图2 所示。



11.jpg?imageView2/2/w/550


2 硬件设计


本系统具体硬件设计采用的方式是S3C2440 的地址线、控制线直接进入CPLD 芯片EPM3128,然后经过CPLD的逻辑运算输出16C554 的片选信号线,16C554 根据片选信号对内部的相应模块进行串口数据处理,处理的数据直接与主控制芯片S3C2440 进行传输。其中一片TL16C554 的外围电路连接如下图3 所示。


图3 中,TL16C554 的并行数据线D0~D7 与ARM9 控制器S3C2440 的数据总线DATA0~DATA7 经过总线驱动芯片LVTH162245 输出相连的;TL16C554 的八个片内寄存器地址线A0~A2 与S3C2440 的地址总ADDR0~ADDR2 经过总线驱动芯片LVTH162245 输出相连的;而总线驱动芯片的方向则由S3C2440 的控制总线经过EPM3218 的逻辑运算输出控制;每片TL16C554 的内部有四个串口模块的片选信号nGCSA~nGCSD,本系统使用两片TL16C554,因此需要8 个片选信号,第一片挂在S3C2440 总线的BANK1 上,第二片挂在总线的BANK2 上,每片都用到S3C2440的高位地址线ADDR23、ADDR24 做为片选线,这四根总线ADDR23、ADDR24、nGCS1、nGCS2 连到EPM3218,然后经过CPLD 译码之后的八根片选信号UART_nCSA1~nCSD1、UART_nCSA2~D2 分别连接到TL16C554 的八个片选上。TL16C554 的读写信号线nIOW、nIOR 也是与S3C2440 的读写总线LnOE、LnWE 及总线片选nGCS1、nGCS2 经过EPM3218 的译码之后相连的;TL16C554 的复位及上电启动需要一定宽度的低电平来完成,本系统直接与S3C2440系统的复位信号相连;本系统TL16C554 采用的是中断方式的收发模式,因此nINTN 直接连接到高电平,使芯片中断使能;TL16C554内部四个模块都有一个中断信号INTA~D,两片总共八个中断信号线分别直接连接到SDC2440 的八个外部中断引脚上,因此任何一个串口通信事件产生中断都全直接使S3C2440 进入中断服务状态,并做相应的中断数据处理。



12.jpg?imageView2/2/w/550


3 软件设计


本系统的软件设计主要包括 EPM3218 的VHDL 硬件语言程序;TL16C554 的WINCE 驱动程序,多路异步串口

通信系统的WINCE 应用程序,以下将分别简单介绍。


3.1 EPM3218 的VHDL 语言程序


CPLD 程序的开发采用的环境是Quartus II V4.1,它是由Altera 公司推出的一个多平台综合性设计环境,包括各种形式的设计输入、功能仿真和时序仿真等功能。其中设计输入分为图形设计文件、VHDL 程序文件,Verilog HDL 程序文件等。VHDL 的逻辑综合比VerilogHDL 更加严谨,对于大型系统来说VHDL 的设计输入是首选。


本系统CPLD 的程序设计就是采用VHDL 硬件描述语言,它与常规的顺序执行的计算机程序不同,从根本上讲它是并发执行的。

系统中的CPLD 程序主要实现的是对S3C2440 的相关总线片选信号进行译码,从而对TL16C554 进行片选及

读写操作。部分程序代码如下所示:


B_DIR_1 <= (NOT LnOE); -- S3C2440 总线驱动芯片LVTH162245 的方向控制信号

UART_nCSA1 <= nGCS1 OR (NOT ADDR24) OR (NOT ADDR23); --TL16C554 的片选A

UART_nCSB1 <= nGCS1 OR ADDR24 OR (NOT ADDR23); --TL16C554 的片选B

UART_nCSC1 <= nGCS1 OR (NOT ADDR24) OR ADDR23; --TL16C554 的片选C

UART_nCSD1 <= nGCS1 OR ADDR24 OR ADDR23 ; --TL16C554 的片选D

UART_nIOW1 <= LnWE; -- TL16C554 的写信号线

UART_nIOR1 <= LnOE; -- TL16C554 的读信号线


3.2 TL16C554 的WINCE 驱动程序的实现编写 WINCE 驱动首先要确定它是属于哪种驱动,WINCE 驱动程序分本机设备驱动和流设备驱动。本机设备驱动程序是被静态地链接到GWES,它们不作为一个单独的DLL 存在。有一些类型的设备,如键盘、显示器等对操作系统都有一定的接口,是专门用于WINCE 的。所以它们都属本机设备驱动。流接口驱动程序是以动态链接库形式存在的,由设备管理器统一加载、管理和卸载。若是按照结构分,又可分为分层的驱动程序和不分层的驱动程序。分层的驱动程序由两层组成:上层是模型设备驱动程序(MDD),下层是依赖平台的驱动程序(PDD)。其驱动模型见图3。


13.jpg?imageView2/2/w/550


本系统采用流式驱动程序来完成TL16C554 的WINCE 驱动。


流接口驱动程序要实现的DLL 接口包括:

◆ EUT_Init:设备管理器初始化一个驱动程序;

◆ EUT_Deinit:设备管理器卸载一个驱动程序;

◆ EUT_Open:打开一个设备驱动程序时应用程序通过CreateFile()函数调用此函数;

◆ EUT_Close:在驱动程序关闭时应用程序通过C1oseHandle()函数调用;

◆ EUT_Read:设备驱动程序处于打开状态时应用程序通过ReadFile()调用此函数;

◆ EUT_Write:设备驱动程序处于打开状态时应用程序通过WriteFile()调用此函数;

◆ EUT_Seek:对设备的数据指针进行操作,由应用程序通过SetFilePointer()函数调用;

◆ EUT_IOContorl:上层的软件通过DeviceIoControl()函数调用此函数;


其中 EUT 代表串口扩展芯片设备驱动的设备文件名。

然后添加一个注册表文件,命名为extenduart.reg:


[HKEY_LOCAL_MACHINEDriversBuiltInextenduart]

"DeviceArrayIndex"=dword:0

"Irq"=dword:17 //逻辑中断号

"IoBase"=dword:08000000 //为TL16C554 片内A 路寄存器在S3C2440 总线的起始地址

"IoLen"=dword:2C

"Prefix"="EUT"

"Dll"="extenduart.Dll"

"Order"=dword:0

"Priority"=dword:0

"Port"="EUT1:" //串口号为EUT1

"FriendlyName"="S2440 EUT1"其中: "Irq"=dword:17 , 是第一片TL16C554 的A 路串口在WINCE 驱动中的逻辑中断号;"IoBase"=dword:08000000,是TL16C554 串口芯片A 路串口寄存器的起始地址,对于其他B、C、D 路串口的注册表信息与A 路串口类拟,限于篇幅在此处省略。


3.3 多路异步串口通信的WINCE 应用程序


在本系统中我们用 CSerialPort 类对TL16C554 驱动进行了串口应用程序的封装,该类基于多线程,其工作流程如下:首先设置好串口参数,如波特率等;然后开启串口监视工作线程监测串口接收到的数据(S3C2440以中断方式接收数据)或其他串口事件,再以消息方式通知主线程,从而激发消息处理函数来进行数据处理,这是对接收数据而言的;发送数据可以直接向串口发送。下面是对CSerialPort 类使用方法的简单描述:


CSerialPort m_SerialPort; /* 定义扩展串口对象 */

m_SerialPort.OpenPort(_T("EUT1:"), 19200); /* 以19200 的波特率打开扩展串口EUT1*/

m_SerialPort.m_pReceiveCallback = (ReceiveCallback*) (receiveByte);

/* 监听串口接收数据的回调函数 */

m_SerialPort.WriteChar(&byte, 1); /* 从扩展串口发送一个字节数据 */


结 语


本文利用ARM9 处理器+CPLD+16C554 的方案设计基于WINCE 的多路串口扩展系统的软硬件,并成功应用于多终端采集系统中,表明系统方案的正确性。同样利用此方案可以扩展更多的串口芯片从而提高系统串口通道数,另外系统中SD 卡内的应用程序可以灵活配置,从而适应更多的应用场合。系统具有广泛的应用前景。


参考文献


[1] Volnei A. Pedroni. Circuit Design with VHDL[M]. Beijing: Publishing House of Electronics Industry.2007.

[2] Douglas Boling. Programming Windows Embedded CE 6.0 Developer Reference[M]. Washington,USA:arrangement with the original publisher.2008.

[1] 邓川云,樊庆文等.基于嵌入式WinCE的远程数据采集系统[J].微计算机信息.2009,6-1:94-95.

[3] 周建设.Windows CE 设备驱动及BSP开发指南[M].北京:中国电力出版社,2009.

[4] 薛大龙,陈世帝,王韵.Windows CE 嵌入式系统开发从基到实践[M].北京:电了工业出版社,2008.

[5] 赵建领.Protel 电路设计与制版宝典[M].北京:电了工业出版社,2007.

[6] 王海祥,陈美君.基于ARM9的串口扩展设计[J].计算机与现代化,2008,12:84-87.

[7] 周建芳,黄凤辰.基于TL16C554的水情中心站多路数据接收[J].中国科技信息,2005,18:10.


本文作者创新点:使用嵌入式 ARM9 处理器与CPLD 处理器带串口扩展芯片进行多串口扩展系统设计,系统稳定可靠,可广泛用于多终端采集系统。


推荐阅读

史海拾趣

高创科技(gotrend)公司的发展小趣事

聚辰(Giantec)公司电子行业发展的五个故事

故事一:技术传承与独立运营

聚辰半导体股份有限公司(Giantec Semiconductor Corporation)的故事始于2009年,由美国ISSI公司与其高管共同出资成立。这家公司继承了ISSI在EEPROM和智能卡芯片技术上的专利和研发团队,为后续的快速发展奠定了坚实基础。随着ISSI公司股权的变动,聚辰半导体逐渐由国资企业接手并开始独立运营。这一转变不仅让聚辰获得了更大的自主权,也为其在存储芯片领域的深耕细作提供了有力支持。

故事二:全球布局与市场拓展

自成立以来,聚辰半导体便致力于全球化布局,不仅在上海设立总部,还在美国硅谷、韩国、中国香港、中国台湾、深圳、南京、苏州等地设立了子公司、办事处或销售机构。这一战略布局使得聚辰能够更好地服务全球客户,迅速响应市场需求。同时,聚辰的产品线不断扩展,从最初的EEPROM存储芯片,逐步延伸到NOR Flash、音圈马达驱动芯片和智能卡芯片等多个领域,广泛应用于智能手机、汽车电子、工业控制等多个行业。

故事三:技术突破与产品创新

在技术创新方面,聚辰半导体始终走在行业前列。2012年,聚辰推出的EEPROM存储芯片成功进入三星、OPPO等手机品牌的摄像头模组供应链,标志着公司在全球EEPROM存储芯片市场的地位逐渐稳固。此后,聚辰不断推出新产品,如音圈马达驱动芯片与EEPROM二合一产品,进一步提升了其在手机摄像头模组中的竞争力。同时,聚辰还积极布局汽车电子市场,多款车规级存储芯片获得市场认可,为公司带来了新的增长点。

故事四:资本市场助力与品牌提升

2019年,聚辰半导体在上海证券交易所科创板成功上市,为公司的发展注入了强劲动力。资本市场的助力不仅让聚辰获得了更多的资金支持,还显著提升了公司的品牌影响力和市场认知度。上市以来,聚辰持续加大研发投入,优化产品结构,提升产品性能,进一步巩固了其在存储芯片领域的市场地位。

故事五:荣誉加身与行业认可

近年来,聚辰半导体凭借其出色的业绩和技术实力赢得了多项荣誉和行业认可。公司多次入选中国物联网企业百强榜单、上海硬核科技企业TOP100榜单等权威榜单,彰显了其在行业内的领先地位。同时,聚辰还积极履行社会责任,参与公益事业,如向中国科学技术大学捐赠资金用于支持人工智能创新中心建设等,进一步提升了公司的社会形象和品牌价值。这些荣誉和认可不仅是对聚辰过去努力的肯定,也是对其未来发展的期待和鼓舞。

爱浦电子(AIPULNION)公司的发展小趣事

随着公司业务的不断扩展,爱浦电子于XXXX年成立了广州优联电气科技有限公司作为其分支机构。这一举措不仅进一步扩大了公司的业务范围和市场影响力,还为公司提供了更多的发展机遇和合作伙伴。广州优联电气科技有限公司在爱浦电子的业务开拓、经营及配套服务方面发挥了重要作用,推动了公司整体业务的快速发展。

这五个故事只是爱浦电子发展起来的一部分缩影,它们展现了公司在技术创新、市场拓展、服务升级、创新引领以及分支机构成立等方面的努力和成就。正是这些不懈的努力和持续的进步,使得爱浦电子在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

Cal-Chip Electronics公司的发展小趣事

随着公司实力的不断增强,Cal-Chip Electronics公司开始将目光投向国际市场。在XXXX年,公司成功开拓了欧洲市场,并在当地设立了分支机构。随后,公司又陆续进入北美、亚洲等多个国家和地区,实现了业务的全球化布局。在国际市场的拓展过程中,公司不仅提升了品牌知名度,也积累了丰富的国际运营经验。

APEM公司的发展小趣事

APEM公司的创始人基恩·罗杰罗,在20世纪50年代初,看到了美国产品主导法国市场的商机。为了解决产品维修和备件订购的难题,他决定自己生产开关。罗杰罗的开关产品在尺寸和操作方式上与美国产品相似,但价格更亲民,交货时间更短。这一创新举措使APEM迅速在市场上站稳脚跟,为后续的发展奠定了坚实基础。

Analogix Semiconductor公司的发展小趣事

在20世纪末和21世纪初,APEM通过一系列收购和技术合作,不断增强自身的技术实力和市场竞争力。例如,APEM收购了丹麦的高性能PCB轻触开关制造商MEC,以及美国的开关面板制造商UNIFAB。这些收购不仅使APEM获得了先进的技术和知识产权,也为其在全球市场的竞争中赢得了先机。

通过以上五个故事,我们可以看到APEM公司在电子行业的发展历程中,始终坚持创新、扩张和合作的战略,不断壮大自身实力,成为行业内的佼佼者。

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

在20世纪末和21世纪初,APEM通过一系列收购和技术合作,不断增强自身的技术实力和市场竞争力。例如,APEM收购了丹麦的高性能PCB轻触开关制造商MEC,以及美国的开关面板制造商UNIFAB。这些收购不仅使APEM获得了先进的技术和知识产权,也为其在全球市场的竞争中赢得了先机。

通过以上五个故事,我们可以看到APEM公司在电子行业的发展历程中,始终坚持创新、扩张和合作的战略,不断壮大自身实力,成为行业内的佼佼者。

问答坊 | AI 解惑

关于题C的问题

本帖最后由 paulhyde 于 2014-9-15 09:30 编辑 AD603产生的自激现象严重,当用两级放大时候,第二级放大严重失真,这个是什么原因啊?我们现在在AD603前面加了OPA658做前级跟随器,希望可以减小自激  …

查看全部问答>

发个我用的元件库

这是我平常所用到的元件库…

查看全部问答>

wince 的cab 安装包问题(vs2005)

想做一个cab安装包,安装今日插件,按照网上的说明写了个安装程序setupdll.dll, 但是在模拟器上(pocket pc se 2003 Emulator)安装发现setupdll没有被调用(在函数Install_Exit中加了MessageBox,没有弹出,注册表也没写) cab安装包使用vs2005做的 ...…

查看全部问答>

GPRS连接问题

我用OPEN AT 已经建立完成了GPRS激活部分,但是为什么数据流中什么都收不到,在超级终端里使用ATD*99***1#,可以收到PPP包,如何使用OPEN AT ADL也能收到这些PPP包?请指教一二!我在软件里已经加入了AT命令,但是没有任何反应,到底是什么地方出了 ...…

查看全部问答>

用KernelIoControl获取逻辑中断号失败

我想使用EINTT4作按键中断输入.定义如下: UINT32  g_EINTIrq = IRQ_EINT4; UINT32  g_EINTSysIntr = SYSINTR_UNDEFINED; PUBLIC DWORD CPK_Init(DWORD dwContext) {             &n ...…

查看全部问答>

EVC4.0中窗体最小化问题

想要实现一个最小化功能 使用ShowWindow函数没反应~ 请问各位还有什么其他办法不?…

查看全部问答>

dshow CreateMediaType FreeMediaType 无法解析的外部符号

我在wince6.0上做dshow开发,已经包含的头文件和库 #include #include #include #include #include                                     &n ...…

查看全部问答>

CE6及BSP安装求救!!!!紧急啊

我之前安装开发环境的时候,发现PB中Device Driver中的SD选项没有,后来把Updates全装上了,就出现了SD选项。 前几天系统崩溃了,重新装上所有东西后发现就是SD选项没有,各位有没有遇到过这种情况啊????急 …

查看全部问答>

请教中断问题

我在做关于MPC8260的工作.目前,我想为DMA加入中断处理程序.MPC8260的参考手册中 说,IDMA1的中断号是6,我使用如下函数: intConnect(INUM_TO_IVEC(6),dma_isr,0); 连接中断处理程序与中断源.但是一旦DMA结束,BC中断到来之后,整个EP8260板子就死掉 ...…

查看全部问答>

MCS-51单片机定时器问题

MCS-51单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,p1.0的输出频率 ? MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP…

查看全部问答>