0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Linux操作系统和处理器实现串口通信系统的设计

电子设计 来源:微计算机信息 作者:刘智国,张海春 2021-05-19 10:40 次阅读

1 S3C2410硬件平台简介

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

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

2 系统结构分析

串行端口的本质功能足作为CPU和串行设备问的编码转换器,一般微机内都配有通信适配器,使计算机能够与其他具有RS232C串口的计算机或设备进行通信。本系统主要目的是实现宿主机与目标机之间的近距离串行通信,采用的宿主机是Intel X86架构的Red Hat Linux 9.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所示。

图1 系统硬件结构原理图

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

4 软件实现

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

4.1 通信协议口波特率

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

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

表1 通信协议示例

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检测模块、安全模块等系统.运行结果良好。对于其它基于串口通信的智能设备控制.具有参考意义。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18304

    浏览量

    222350
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206772
  • 操作系统
    +关注

    关注

    37

    文章

    6293

    浏览量

    121906
收藏 人收藏

    评论

    相关推荐

    基于Linux等不同操作系统实现异构系统的设计

    通过该设计能够确保装有不同操作系统的各种服务器能够在本系统中正常工作,同时使用消息队列实现系统模块之间的通信便于扩展
    发表于 01-16 09:17 2407次阅读

    Linux与其他操作系统的区别

    上运行Linux和MS-DOS已很普遍,就发挥处理器功能来说,MS-DOS没有完全实现x86处理器的功能,而Linux完全在
    发表于 09-13 10:12

    基于ARM920T平台怎么移植Linux操作系统

    嵌入式Linux的一个热点应用就是将Linux内核移植到一些典型的微控制和微处理器上,提供操作系统层面支持,以
    发表于 09-26 06:36

    汇聚式处理器Blackfin支持什么操作系统

    当今的嵌入式应用已经无处不在,全球每年生产数十亿颗微处理器,其中大部分被广泛应用于各类嵌入式系统,从消费电子、通信终端及系统设备、工业控制、汽车电子
    发表于 10-11 07:12

    MicroBlaze处理器的PetaLinux操作系统怎么移植?

    核,而如何针对特定的微处理器选择合适的嵌入式操作系统是SOPC开发的难点之一。本文针对Xilinx公司的MicroBlaze软核,介绍了PetaLinux嵌入式操作系统及其移植方法,研究了PetaLinux的相关配置和启动方案。
    发表于 03-16 06:37

    VxWorks操作系统基于ARM处理器的中断怎么处理

    本文通过基于S3C44B0X处理器VxWorks嵌入式操作系统的BSP移植,详细分析了VxWorks操作系统基于ARM处理器的中断处理方法。
    发表于 04-27 06:28

    嵌入式Linux操作系统

    ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9)(2)必须掌握一个嵌入式
    发表于 10-27 10:22

    linux操作系统只能在以arm为处理器的pc上运行吗

    linux操作系统只能在以arm为处理器的pc上运行吗?可以在英特尔的各种处理器上运行吗?
    发表于 07-27 15:04

    嵌入式实时操作系统VxWorks中串口通信实现

    嵌入式实时操作系统VxWorks中串口通信实现
    发表于 03-29 12:27 19次下载

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    一个基于Linux操作系统的嵌入式网关的实现

    本文介绍了一种基于Linux 操作系统的嵌入式网关实现方案。具体讲述了基于ARM9的软硬件平台的构建。同时详细阐述了Linux 下的串口编程
    发表于 09-25 16:11 14次下载

    嵌入式VxWorks实时操作系统串口通信实现

    嵌入式VxWorks实时操作系统串口通信实现
    发表于 08-31 16:03 7次下载
    嵌入式VxWorks实时<b class='flag-5'>操作系统</b>中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>实现</b>

    基于QNX操作系统下的Modbus串口通信设计

    基于QNX操作系统下的Modbus串口通信设计
    发表于 10-30 14:51 16次下载
    基于QNX<b class='flag-5'>操作系统</b>下的Modbus<b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    基于Linux操作系统和S3C2410微处理器实现GPS实时导航系统的设计

    Linux操作系统Linux操作系统负责系统的整体调度和控制。通过S3C2410的UART接口连接GPS接收机,用以接收NEMA0183格
    发表于 03-09 10:47 909次阅读
    基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>和S3C2410微<b class='flag-5'>处理器</b><b class='flag-5'>实现</b>GPS实时导航<b class='flag-5'>系统</b>的设计

    嵌入式VxWorks实时操作系统串口通信实现

    嵌入式VxWorks实时操作系统串口通信实现(通信网络基础课后答案第三章)-嵌入式VxWorks实时
    发表于 09-30 11:15 13次下载
    嵌入式VxWorks实时<b class='flag-5'>操作系统</b>中<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>实现</b>