历史上的今天
返回首页

历史上的今天

今天是:2025年05月26日(星期一)

正在发生

2021年05月26日 | 基于S3C2410的嵌入式串口通信设计

2021-05-26 来源:eefocus

1S3C2410硬件平台简介


S3C2410是韩国三星公司生产的新一代高性能微处理器,它是基于ARM920T内核的16/32位RISC处理器.主要应用于嵌入式系统中。


S3C2410拥有强大的数据处理能力.又有着低成本.低功耗等优点.在各种手持及移动设备上的应用越来越广泛,基于其平台的程序功能也越来越复杂。于是,在其平台上架构多线程的操作系统已成为越来越多系统设计者的诉求,本文介绍多线程在S3C2410上的具体实现过程。


2 系统结构分析


串行端口的本质功能足作为CPU和串行设备问的编码转换器,一般微机内都配有通信适配器,使计算机能够与其他具有RS232C串口的计算机或设备进行通信。本系统主要目的是实现宿主机与目标机之间的近距离串行通信,采用的宿主机是Intel X86架构的Red HatLinux9.03环境PC机,而目标机是ARM架构的开发板。


本系统中目标机开发板的内核采用的是三星的S3C2410,该开发板采用核心板加底板的模式.核心板接口采用DIMM200标准连接器.工作非常可靠,可稳定运行在203 MHz的时钟频率下。其外设非常丰富.功能强大.完全可以满足设计需要。串口线采用常用的RS 232C型接口模式。能实现计算机与开发板间的数据传输与控制。


3 系统硬件结构原理


串行通信可以在DOS或Windows环境下进行。可以用汇编或高级语言编写通信程序,本文介绍如何在Linux操作系统下来实现串口间的通信。


在串口通信的实现过程中。要保证数据传输的可靠性和稳定性.其硬件设计是必不可少的,本文中选用S3C2410芯片作为核心器件。S3C2410芯片是SAMSUNG公司16/32位的RISC处理器。采用ARM920T内核,内部具有2个独立的UART控制器以及分开的16 kB的指令Cache和16 kB数据Cache,每个控制器支持的最高波特率可达到230.4 kb/s。S3C2410芯片的这些特点,为实现在“nux操作系统下计算机与开发板问的串口通信提供了可靠的保证。基于S3C2410的嵌入式串口通信的硬件结构原理如图1所示。


宿主机计算机系统中,在Linux操作系统下编写好串口通信的程序.通过JTAG接口模块下载至目标机即开发板中,在相应的软件控制命令下.通过串行接口线即町实现宿主机与目标机问数据的发送和接收。目标机中电源模块提供了开发板系统工作所需的正常电压。各种数据信息町以通过液晶显示模块及时显示出来.还可以通过键盘控制模块来实现对日标机操作的控制,外扩存储器模块町以由FLASH或SDRAM构成,当然作为一个完整的系统.还必须配有其他外围电路,以保证系统的正常工作。


4 软件实现


串口通信软件的设计是系统成功运行的关键,如何保证通信的效率、可靠性、实时性以及节约系统的资源足设计者关心的问题,因此通信协议的定义、软件外发的结构设计、程序开发工具的选择在系统设计中极其重要。PC端串口通信程序的开发是基于Windows环境面向对象的设计方法,开发环境选用vc++,实现的方法有多种,对此作介绍的文献也较多。在此不详述。对于单片机端的串口通信程序,有文献介绍基于汇编语言的程序框架,但基于分层结构的C语苦实现却少有介绍。下面将具体介绍在KeilC51中,分层结构框架下串口全双工通信程序的设计与实现。


4.1 通信协议口波特率


基于串I=1的通信模式有间步通信和异步通信两种,这取采用的是异步串行通信。在通信过程中,单片机应处理以下问题: (1)识别命令。PC机将命令传送给单片机,单片机能够识别不同的命令而且根据不同的命令内容完成不同的操作。(2)识别数据。单片机能识别附加在命令后的数据。传送数据的最大位数由设置的缓冲区大小决定。(3)出错处理。包括识别无效命令和处理通信错误。当啦片机接收到系统没有定义过的命令.或者收到的命令不符合预先定义的格式时。它应该做出响应.向系统报错并能进行错误处理,错误类型编号应事先定义。(4)正确应答。当单片机系统接收到一条没有通信错误且符合通信协议的信息时,应根据所接收的命令进行相应操作,并把操作结果返回PC机.如发一个“OK”信息以示确认。


PC机应处理的问题:(1)采集单片机发送的数据,如某设备模块的状态信息;(2)接收单片机的正常响应和错误响应信息,若足错误响应信息,应根据错误类型,以处理。由于控制的设备模块可能有多个,通过对设备模块统一编址,给不同的设备设置唯一的16位地址加以区分。这样在PC机和单片机进行数据传送时,双方能够识别数据的来源及需控制的对象。如表1所乐为通信协议格式示例.由PC机传输命令协议和单片机响应协议组成。



4.2 单片机通信软件的分层设计


单片机系统的软件开发环境为Keil C51。与汇编语言相比.C语言在结构性、可读性、可维护性上有明显的优势.更利于程序移植和扩展。串口通信程序采用分层结构。即将程序按层次分为物理层、驱动层,应用层,分层设计有以下优点:(1)与主机通信的串口程序支持接收和发送并发处理(主动发送和被动查询设备并存),利于提高通信效率及数据处珲的实时性。(2)当单片


机只有一个串口而以串口通信方式控制的设备模块有多个时。必需对串口扩展,为了简化硬件则需用软件实现模拟的串口。因此系统内部应有支持I/O口模拟串口操作的软件实现。标准串I/O和模拟串口在物理实现上有区别,但采用统一的对外封装,以提高程序的封装性和模块化祥度。(3)防止由于串口操作向在流程中独占CPU资源.避免漏检状态信息等现象发生。


三层程序的主要功能及C语言实现如下所述:


(1)驱动层:也称抽象层,在该层定义串口基本操作结构。基于此结构实现不同方式下的串口设计,包括中断方式下的串口实现和I/O口模拟方式下的串口实现。虽然两种方式的底层实现有所区别。但足驱动层屏蔽不同串口操作的物理细节,简化应用层对串口的操作。串口的结构定义如下:


typedef struct Serial


{ void (* pfSetBaudRate)(unsigned long baud_rate);//设置串口波特率


void (*pfOpen)(void); //串口打开


void (*pfClose)(void); //串口关闭


unsigned (*pfGetChar)(unsigned char *c); //从接收缓存中取一个数


void (*pfPutChar)(unsigned char c); //发送一个字节


void (*pfPutStr)(unsigned char *tmp_str, unsigned char tmp_len); //发送一串数


}Cserial;


(2)物理层:在该层针对不同的串口实体.完成不同的物理操作.如单片机串口初始化、I/O模拟串口方式下的定时器初始化、I/O中断初始化等。其作用是给不同的串口操作模式提供支撑。针对标准全双工串口和模拟串口两类不同的物理实现方式.设计不同的串口实体(包含内部执行每类串口的底层操作及相关基本的外部初始化等操作),不同的实现方式,绑定不同的操作函数指针.指针指向不同的操作。两种串口实体封装成统一的串口基础类,使程序具有更强的通用性和扩展性。在物理层采用循环FIFO双缓冲队列对接收和发送的数据进行缓存、读取,缓冲区循环FIFO操作方式与中断方式下接收和发送数据的结合使用,保证了数据处理的可靠性、实时性。,由于篇幅所限.下面只给出了缓冲区结构和相关指针的声明程序示例代码:


typedef struct Fifo


{ unsigned char *m_buf;//定义缓冲区首地址


unsigned int m_bufsize;//定义缓冲区大小


unsigned int m_wp; //写入数据


unsigned int m_rp; //读出数据


)CFifo;


unsigned char(fFifoPush)(CFifo *me, unsigned char c);//数据入队


unsigned char(fFifoPop)(CFifo *me);//数据出队


void fFifolnit(CFifo *me, unsigned char * tmp_buf,unsigned int tmp_size);//初始化


(3)应用层:完成对单片机系统初始化。包括串口驱动结构实体的初始化。然后按统一的串口驱动层接口对串口操作而不关心其物理实现方式,如波特率设置、串口开关、收发数据等,循环接收、处理串口的命令和数据.处理单片机的I/O 口操作等。以下为主应用程序基本架构.本尔例为系统接收串口数据后。直接返回主机。


extern CSerial xdata mSerial; //在物理层,已声明该串口实体


void main(void)


{ EA=0;//禁止中断


Uart_Init(); //串口初始化


mSerial.pfSetBaudRate(9600);//设置波特率为9600bps


mSerial.pfOpen(); //打开串口


//⋯其它初始化程序,


EA=l: //开放中断


while(1){


if(mSefial.pfGetchar(&i))mSerial.pfPutchar(i)


}


//⋯其它循环检测、处理程序


}


5 小结


本文作者创新点足详细地说明了基于S3C2410的嵌入式系统串口全双工通信软件分层设计的实现,描述了单片机与PC机仝双工串口通信的通信协议,以及存keil C51下的程序实现。应用征明.该方法可以极大地提高程序的封装性和模块化程度.增强了串口传送数据时系统收发、处理数据的并发性和实时性.同时也提高了编程效率。该方法已成功应用于安防监控系统、I/O检测模块、安全模块等系统.运行结果良好。对于其它基于串口通信的智能设备控制.具有参考意义。

推荐阅读

史海拾趣

台湾君耀(Brightking)公司的发展小趣事

2018年,君耀正式加入国巨集团,成为其旗下的一员。这一举措使得君耀能够获得国巨集团在资金、技术、市场等多方面的支持,进一步加速了其发展步伐。通过资源整合和优势互补,君耀在半导体器件领域的地位更加稳固,市场竞争力也得到提升。

DEVCON公司的发展小趣事

在1950年代,电子工业正处于蓬勃发展的初期。阿尔·克瑞顿,一位富有创新精神的化学家,在美国马萨诸塞州丹佛斯市的一个实验室里,经过无数次的试验,终于研发出了一种名为Devcon可塑钢修补剂的新型材料。这种材料经济实惠、不易燃,且能够作为焊接的替代品,迅速在电子制造和维修领域引起了广泛关注。这就是DEVCON公司的起点,一个由创新精神和市场需求共同点燃的火花。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

Degson Electronics Co Ltd公司的发展小趣事

为了提高产品的品质和可靠性,Degson积极引进国际先进的管理体系和技术标准。公司通过了ISO9001、ISO14001等国际管理体系认证,并严格按照相关标准进行生产和质量管理。此外,Degson还建立了亚洲首家获得美国UL和德国VDE认可的专业实验室,以确保产品的性能和品质符合国际标准。这些举措使Degson的产品在品质上得到了显著提升,赢得了客户的信任和好评。

FUJIKURA公司的发展小趣事

为了提高产品的品质和可靠性,Degson积极引进国际先进的管理体系和技术标准。公司通过了ISO9001、ISO14001等国际管理体系认证,并严格按照相关标准进行生产和质量管理。此外,Degson还建立了亚洲首家获得美国UL和德国VDE认可的专业实验室,以确保产品的性能和品质符合国际标准。这些举措使Degson的产品在品质上得到了显著提升,赢得了客户的信任和好评。

FIDELIX公司的发展小趣事

在东芯半导体的支持下,FIDELIX开始将其一部分技术团队迁移到国内,加速了存储芯片的国产替代进程。这些技术团队的加入,不仅提升了国内半导体产业的技术水平,也促进了FIDELIX与国内企业的深度融合和协同发展。

问答坊 | AI 解惑

混乱的AVR (转)

混乱的AVR (转) 作者:佚名 文章来源:网络 点击数:462 更新时间:2008-7-9 7:29:40                                  接触A ...…

查看全部问答>

IRF540的使用问题

用IRF540导通一个12V的电路,在PROTEUS上设计了一个非常简单的电路,D端接12V,S端接负载,G端加4-10V电压,仿真时不知为何IRF540皆不导通,想不明白,请各位大侠不吝赐教!…

查看全部问答>

Keil C51 使用帮助

该手册是Keil 软件公司8051 单片机软件开发工具的介绍是为新用户和有兴趣的读者准备的使用 指南只需要阅读本书就可以正确地运行和使用该软件这本用户指南包括以下章节的内容 第一章介绍 对本用户手册的概述 第二章安装 讲述怎样安装软件并设置工 ...…

查看全部问答>

怎样在一开机就运行我的程序,而不进入winCE桌面界面?

如题:   我想在一打开PDA后,就进入我程序,而不显示winCE桌面,PDA系统是winCE5.0,开发工具是EVC4.0,请高手指教!!!…

查看全部问答>

小弟今天开始从ppc 转 wince 开发 需要一些开发环境 sdk 请各位帮忙

小弟今天开始从ppc 转 wince 开发 需要一些开发环境 sdk 请各位帮忙 请问 开发wince程序需要装那些 sdk  开发包   最好能给 链接  谢谢了 ~~ 小弟准备用vs2005 开发 …

查看全部问答>

有什么办法可以得到当前OS所在的分区名称?

请问有什么办法可以知道当前正在运行的wince os所在的分区的名称?不写驱动,不去读bootargs一类的设定。…

查看全部问答>

问一下,有没有处理过即时OS、超时处理、ICE的经验的人呢?

1. 在即时OS上编程序的时候,有哪些需要特别注意的地方? 2. 在处理超时以及时间外挂的时候,有哪些需要特别注意的地方? 3. 在操作ICE或者调试器的时候,有哪些需要特别注意的地方? …

查看全部问答>

建伍对讲机维修手册(含原理图和说明)

建伍对讲机维修手册(含原理图和说明)…

查看全部问答>

STM32明明是32位的CPU,却将定时器设计成16位的!

真不明白,明明是32位的CPU,却将定时器设计成16位的,对有些应用32位的定时器可是很重要的悠!希望下一个版本能有所改进。ST加油!!!!…

查看全部问答>

运放输出加三极管的电路怎么分析?

本帖最后由 paulhyde 于 2014-9-15 09:32 编辑 如图。  …

查看全部问答>