欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《微处理器系统结构与嵌入式系统设计》cha.ppt

    • 资源ID:86904825       资源大小:1.26MB        全文页数:36页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《微处理器系统结构与嵌入式系统设计》cha.ppt

    微处理器系统结构与嵌入式系统设计第十一章 基于ARM微处理器的软件系统设计2023/4/152第十一章第十一章 基于基于ARM的软件系统设计的软件系统设计1、嵌入式软件系统结构及工作流程嵌入式软件系统结构及工作流程2、嵌入式软件系统的引导和加载、嵌入式软件系统的引导和加载S3C2440S3C2440启动过程启动过程、BootLoader BootLoader 基本概念基本概念、U-bootU-boot的分析与移植的分析与移植3、嵌入式、嵌入式Linux操作系统操作系统嵌入式操作系统嵌入式操作系统、嵌入式嵌入式LinuxLinux内核内核4、Linux下驱动程序设计示例下驱动程序设计示例打开串口、设置串口打开串口、设置串口、读写串口读写串口、关闭串口关闭串口第 十一 章 结 束2023/4/154嵌入式软件系统结构嵌入式软件系统结构l简单的嵌入式的嵌入式应用用 若嵌入式系若嵌入式系统的功能需求比的功能需求比较简单,嵌入式系,嵌入式系统软件只需完成件只需完成较简单的的监控、控、驱动和和处理功能,理功能,则不不需要嵌入式操作系需要嵌入式操作系统的支持。的支持。如基于如基于8051的的应用:玩具、家用:玩具、家电、汽、汽车等的控制系等的控制系统l复复杂的嵌入式的嵌入式应用用 若嵌入式系若嵌入式系统的功能需求比的功能需求比较复复杂,需要,需要图形用形用户界面、网界面、网络管理、存管理、存储管理、管理、进程程/线程管理或需程管理或需要支持二次开要支持二次开发等,等,则通通过嵌入式操作系嵌入式操作系统的帮助,的帮助,可以加快嵌入式系可以加快嵌入式系统软件的开件的开发进度和可靠性。度和可靠性。如基于如基于ARM的的应用:手机、用:手机、PDA2023/4/155简单嵌入式系统软件结构简单嵌入式系统软件结构不需要使用操作系不需要使用操作系统,基于,基于裸机裸机开开发典型典型单任任务程序架构程序架构(1 1)从)从CPUCPU复位时的指定地址开始执行;复位时的指定地址开始执行;(2 2)跳转至汇编代码)跳转至汇编代码startupstartup处执行;处执行;(3 3)跳转至用户主程序)跳转至用户主程序mainmain执行,在执行,在mainmain中中完成:完成:a.a.初试化各硬件设备;初试化各硬件设备;b.b.初始化各软件模块;初始化各软件模块;c.c.进入死循环(无限循环),调用各模块的处理进入死循环(无限循环),调用各模块的处理函数函数2023/4/156用用户主程序和各模主程序和各模块的的处理函数都以理函数都以C语言完言完成。用成。用户主程序最后都主程序最后都进入了一个死循入了一个死循环,直到系直到系统停停电或者出或者出现重大重大错误。void main(void)/变量、参数等的定量、参数等的定义及及说明明 X_init();/系系统初始化,一般初始化,一般为汇编代代码While(1)X();/超超级循循环2023/4/157复杂嵌入式系统软件的一般结构复杂嵌入式系统软件的一般结构ARM+M+I/OHAL、底层封装、部分由、底层封装、部分由OS提供提供BOOTLOAD2023/4/158复杂嵌入式系统软件工作流程复杂嵌入式系统软件工作流程2023/4/159S3C2440启动方式启动方式 三星公司的三星公司的S3C2440支持支持Nor Flash和和Nand Flash启启动,可以通可以通过硬件跳硬件跳线(引脚引脚OM1:0)设置置启启动方式。具体含方式。具体含义如下如下:OM1:0=00时,处理器从理器从NAND Flash启启动OM1:0=01时,处理器从理器从16位位宽度的度的Nor Flash启启动OM1:0=10时,处理器从理器从32位位宽度的度的Nor Flash启启动OM1:0=11时,处理器从理器从Test Mode启启动2023/4/1510S3C2440 Nand FlashS3C2440 Nand Flash启动过程启动过程在系在系统上上电后后,Nand Flash控制器控制器会自会自动的把的把Nand Flash上的前上的前4K U-BOOT数据搬移到内部数据搬移到内部SRAM的地址最低端的地址最低端(此此SRAM被称被称为Steppingstone);CPU从内部从内部RAM的的0 x00000000位置开始启位置开始启动并在并在uboot启启动代代码的前的前4K里完成里完成S3C2440的核心配的核心配置,然后把置,然后把U-BOOT剩余部分搬剩余部分搬到到RAM中运行;中运行;2023/4/1511引导程序引导程序BootLoader是嵌入式系是嵌入式系统在加在加电启启动后后执行的第一段代行的第一段代码,功,功能能类似似pc机的机的BIOS和和OS Loader,通常需要,通常需要固化固化在目在目标板中;板中;主要主要负责CPU、存、存储器及相关硬件的器及相关硬件的初始化初始化,以及,以及将将装装载操作系操作系统映像到内存中,然后跳映像到内存中,然后跳转到到规定的定的地址地址启启动操作系操作系统运行。运行。Bootloader是是严重依重依赖硬件而硬件而实现的,每一种不同的,每一种不同体系体系结构的构的处理器都有不同的理器都有不同的Bootloader,甚至同,甚至同一种一种处理器的外理器的外围硬件配置不同,其硬件配置不同,其Bootloader也也有差有差别。因此开。因此开发特定的特定的Bootloader是构建嵌入式是构建嵌入式linux系系统之前的一之前的一项必要的基必要的基础工作。工作。2023/4/1512Bootloader的运行步骤的运行步骤Stage1(汇编实现)1.基本硬件基本硬件设备初始化:初始化:CPU时钟频率,寄存器,存率,寄存器,存储器数据器数据宽度、度、访问周期、刷新周期,中断系周期、刷新周期,中断系统,I/O端口端口等;等;2.为第二第二阶段准段准备RAM空空间,设置堆置堆栈;3.复制第二复制第二阶段代段代码到到RAM中,并跳中,并跳转到第二到第二阶段入口点段入口点Stage2(C实现)1.初始化本初始化本阶段要使用的硬件段要使用的硬件设备,实现对板板级驱动的支持;的支持;2.检测系系统内存映射;内存映射;3.将内核将内核镜像和根文件系像和根文件系统镜像从像从flash读到到RAM中;中;4.为内核内核设置启置启动参数;参数;5.将将PC指指针指向内核的入口指向内核的入口处,调用内核。挂用内核。挂载文件系文件系统;2023/4/1513Linux 环境下环境下BootLoader种类种类BootloaderMonitor描描 述述x86ARMPowerPCLILO否否Linux磁盘引导程序磁盘引导程序是是否否否否GRUB否否GNU的的LILO替代程序替代程序是是否否否否Loadlin否否从从DOS引导引导Linux是是否否否否ROLO否否从从ROM引导引导Linux而不需要而不需要BIOS是是否否否否Etherboot否否通过以太网卡启动通过以太网卡启动Linux系系统的固件统的固件是是否否否否LinuxBIOS否否完全替代完全替代BUIS的的Linux引导引导程序程序是是否否否否BLOB否否LART等硬件平台引导程序等硬件平台引导程序否否是是否否U-boot是是通用引导程序通用引导程序是是是是是是RedBoot是是基于基于eCos的引导程序的引导程序是是是是是是2023/4/1514U-boot的分析与移植的分析与移植U-boot全称全称 Universal Boot Loader,支,支持持ARM体系等多种体系等多种处理器,包含常理器,包含常见的外的外设的的驱动,是一个开源的、功能,是一个开源的、功能强大的板极支持包;大的板极支持包;由德国由德国DENX软件工程中心的件工程中心的Wolfgang Denk维护。U-boot启启动时处于正常的于正常的启启动加加载模式,模式,但是它会延但是它会延时指定指定时间(单位秒)等待位秒)等待终端用端用户按下任意按下任意键而切而切换到到下下载模式模式,如果在指定,如果在指定时间内用内用户没有按没有按键,则继续启启动操作系操作系统。2023/4/1515U-boot主要包括以下目录主要包括以下目录lboardboard:该目录该目录存放了存放了U-BootU-Boot支持的一些已有开发板的信息支持的一些已有开发板的信息。每。每一个开发板都以一个子目录出现在当前目录中,如一个开发板都以一个子目录出现在当前目录中,如SMDK2410SMDK2410子子目录中存放与目录中存放与24102410开发板相关的配置文件,但由于自行设计的目开发板相关的配置文件,但由于自行设计的目标板即使与已有开发板使用相同处理器,但其他硬件配置不一定标板即使与已有开发板使用相同处理器,但其他硬件配置不一定相同,所以需要参考该目录下的内容来进行修改,例如根据使用相同,所以需要参考该目录下的内容来进行修改,例如根据使用的的FlashFlash存储器的宽度和容量,可以修改存储器的宽度和容量,可以修改flash.cflash.c中对应的参数。中对应的参数。lcommoncommon:该目录该目录存放的是存放的是U-BootU-Boot命令行界面下支持的各条命令命令行界面下支持的各条命令的实现源码的实现源码。每一条命令都对应一个文件,例如。每一条命令都对应一个文件,例如bootmbootm命令对应命令对应就是就是cmd_bootm.ccmd_bootm.c。通常主要关心与内核引导有关的。通常主要关心与内核引导有关的cmd_boot.ccmd_boot.c和和cmd_bootm.ccmd_bootm.c等代码。等代码。lcpucpu:该目录该目录存放了存放了U-BootU-Boot支持的支持的CPUCPU类型类型。每一款。每一款U-BootU-Boot下支下支持的持的CPUCPU在该目录下对应一个子目录,比如在该目录下对应一个子目录,比如S3C2440AS3C2440A采用的是采用的是ARM920TARM920T内核,则子目录内核,则子目录arm920tarm920t下即是对该处理器核的支持源下即是对该处理器核的支持源码。码。CPUCPU相关的文件主要是初始化一个执行环境,包括中断的初相关的文件主要是初始化一个执行环境,包括中断的初始化。其中有一个重要文件始化。其中有一个重要文件start.sstart.s,该文件是一个汇编源文件,它,该文件是一个汇编源文件,它是整个是整个U-BootU-Boot执行的第一段代码,它的功能是将整个执行的第一段代码,它的功能是将整个U-BootU-Boot目标目标代码重定位,也就是将代码重定位,也就是将U-BootU-Boot转移至内存中去运行。转移至内存中去运行。2023/4/1516U-boot主要包括以下目录主要包括以下目录ldriversdrivers:U-BootU-Boot支持的各种设备驱动程序支持的各种设备驱动程序都放在该目录,比如都放在该目录,比如各种网卡、支持各种网卡、支持CFICFI的的FlashFlash、串口和、串口和USBUSB等。等。lfs:fs:该目录存放该目录存放U-BootU-Boot支持的文件系统,例如支持的文件系统,例如fatfat、fdosfdos、jffs2jffs2、cramfscramfs、ext2ext2和和reiserfsreiserfs等。等。lincludeinclude:U-BootU-Boot使用的使用的头文件头文件,还有对各种硬件平台支持的,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录汇编文件,系统的配置文件和对文件系统支持的文件。该目录下下configsconfigs目录有与开发板相关的配置头文件。该目录下的目录有与开发板相关的配置头文件。该目录下的asmasm目录有与目录有与CPUCPU体系结构相关的头文件,体系结构相关的头文件,ARMARM对应的是对应的是asm-armasm-arm。llib_xxx:lib_xxx:与体系结构相关的与体系结构相关的库文件库文件。与。与ARMARM相关的库放在相关的库放在lib_armlib_arm中。中。lnetnet:与与网络协议栈相关的代码网络协议栈相关的代码,BOOTPBOOTP协议、协议、TFTPTFTP协议、协议、RARPRARP协议和协议和NFSNFS文件系统的实现。文件系统的实现。ltoolstools:生成生成U-BootU-Boot的工具的工具,如:,如:mkimagemkimage,crccrc等等。等等。ldocdoc:文档目录文档目录。U-BootU-Boot有非常完善的文档,推荐参考阅读。有非常完善的文档,推荐参考阅读。2023/4/1517U-boot的运行过程分析的运行过程分析U-Boot的的阶段一段一代代码通常放在通常放在start.s文件中,用文件中,用汇编语言写成,其主要功能是言写成,其主要功能是设置置处理器状理器状态、初始化中断和内存、初始化中断和内存时序、序、对整个整个U-Boot目目标代代码进行重新定位。行重新定位。阶段一刚开始的代码是处理器的阶段一刚开始的代码是处理器的异常处理向量表异常处理向量表:.globl_start;系统复位的位置,由;系统复位的位置,由U-Boot.ld决定决定_start:b reset;0 x00000000,各个异常向量对应的跳转代码,各个异常向量对应的跳转代码 ldr pc,_undefined_instruction;0 x00000004,未定义指令异常,未定义指令异常 ldrpc,_software_interrupt ;0 x00000008,软件中断异常软件中断异常 ldr pc,_prefetch_abort ;0 x0000000c,预取中止异常,预取中止异常 ldrpc,_data_abort ;0 x00000010,数据中止异常,数据中止异常 ldrpc,_not_used ;0 x00000014,未使用,未使用 ldrpc,_irq ;0 x00000018,中断异常,中断异常 ldrpc,_fiq ;0 x0000001c,快速中断异常,快速中断异常当发生各类异常时,当发生各类异常时,CPU将执行将执行interrupts.c中对应定义的中断处理函数中对应定义的中断处理函数。2023/4/1518U-boot的运行过程分析的运行过程分析reset/*set the cpu to SVC32 mode*/mrsr0,cpsrbicr0,r0,#0 x1forrr0,r0,#0 xd3msrcpsr,r0;进入进入SVC管理模式,关闭中断和快速中断管理模式,关闭中断和快速中断;关闭看门狗、禁止中断、配置处理器内部时钟、配置内存区控制寄关闭看门狗、禁止中断、配置处理器内部时钟、配置内存区控制寄;存器存器、代码搬移代码搬移ldrpc,_start_armboot;转转C代码,代码,stage1结束结束的的_start_armboot:.word start_armboot阶段二:阶段二:start_armboot()在在board.c中定义,是中定义,是Bootloader中的中的C语言语言开始的函数,也是整个启动代码中开始的函数,也是整个启动代码中C语言的主函数语言的主函数,它类似于,它类似于Linux内核的内核的start_kernel(),是一种系统初始化的接口函数:调用一系列初始化函数完成,是一种系统初始化的接口函数:调用一系列初始化函数完成CPU的基本的基本设置、开发板初始化、中断向量初始化、环境变量初始化、串口初始化等;设置、开发板初始化、中断向量初始化、环境变量初始化、串口初始化等;配置可用的配置可用的Flash区;内存初始化;区;内存初始化;I2C、LCD、video、音频等外围设备初、音频等外围设备初始化;网络设备初始化等等,最后进入始化;网络设备初始化等等,最后进入U-Boot命令行。命令行。2023/4/1519嵌入式操作系统嵌入式操作系统2023/4/1520l嵌入式嵌入式实时操作系操作系统RTlinux及其他嵌入式及其他嵌入式实时LinuxuC/OS IIeCOSVxworks(wind river systems公司)公司)QNX(QNX software systems公司)公司)pSOSOS/9VRTXThreadXl嵌入式非嵌入式非实时操作系操作系统 一些嵌入一些嵌入inux系系统Windows CE、Embedded windows xp(Microsoft公司)公司)Palm OS(Palm公司)公司)EPOC(Symbian公司公司)2023/4/1521Linux嵌入式操作系统嵌入式操作系统Linux是一个是一个类Unix(Unix-like)的、)的、免免费的、的、源源代代码开放开放的、符合的、符合POSIX(Portable Operating System Interface Standard)标准准规范的操作系范的操作系统;严格来格来说,Linux指由指由Linux Torvalds维护的(及通的(及通过主要主要镜像网站像网站发布的)布的)内核,内核,而整个而整个Linux系系统的的其它大部分都建立在其它大部分都建立在GNU软件之上;件之上;嵌入式嵌入式Linux内核内核为特殊的硬件配置、或为了支持特别的应用而经过特别的裁剪的修改过为特殊的硬件配置、或为了支持特别的应用而经过特别的裁剪的修改过的的Linux内核;内核;通常具有不同于工作站与服务器的内核配置;通常具有不同于工作站与服务器的内核配置;嵌入式嵌入式Linux系系统基于基于Linux内核的嵌入式系统;内核的嵌入式系统;嵌入式嵌入式Linux发行套件行套件开发嵌入式开发嵌入式Linux系统的平台;系统的平台;各种为了在嵌入式系统中使用而剪裁过的应用软件;各种为了在嵌入式系统中使用而剪裁过的应用软件;2023/4/1522Linux内核的发展历史内核的发展历史l1991年年11月,芬月,芬兰赫赫尔辛基大学的学生辛基大学的学生 Linus Torvalds写了个写了个小程序,取名小程序,取名为Linux,放在互,放在互联网上。他表达了一个愿望,希望网上。他表达了一个愿望,希望借此搞出一个操作系借此搞出一个操作系统的的“内核内核”来,来,这完全是一个偶然事件;完全是一个偶然事件;l1993,在一批高水平黑客的参与下,在一批高水平黑客的参与下,诞生了生了Linux 1.0 版版;l1994年,年,Linux 的第一个商的第一个商业发行版行版 Slackware 问世;世;l1996年,美国国家年,美国国家标准技准技术局的局的计算机系算机系统实验室确室确认 Linux 版本版本(由(由 Open Linux 公司打包)符合公司打包)符合 POSIX 标准;准;l2001年,年,Linux2.4版内核版内核发布布;l2003年,年,Linux2.6版内核版内核发布;布;lLinux内核版本号由内核版本号由3位数字位数字组成成第1位数字r为主版本号 第2位数字x为说明版本类型的次版本号,如果x为偶数,则表示为产品化版本,为奇数时表示为实验版本 第3位数字y为修改号,表示错误修补的次数 2023/4/1523几种流行的几种流行的Linux OS发行版本发行版本2023/4/1524嵌入式嵌入式Linux系统结构图系统结构图 嵌入式嵌入式Linux具有分层的体系结构,一般可分为具有分层的体系结构,一般可分为3小层及内核小层及内核空间和用户空间两大块,每一层模块都屏蔽了其以下各层的具体空间和用户空间两大块,每一层模块都屏蔽了其以下各层的具体细节,只对上层提供功能接口或图形界面。上层模块不需要知道细节,只对上层提供功能接口或图形界面。上层模块不需要知道其以下各层模块的实现方式,只需要利用下层提供的接口完成相其以下各层模块的实现方式,只需要利用下层提供的接口完成相应功能即可。这样的层次模型大大增加了嵌入式应功能即可。这样的层次模型大大增加了嵌入式Linux的安全性、的安全性、稳定性、裁减或增添模块的便利性。稳定性、裁减或增添模块的便利性。2023/4/1525Linux内核的各子系统之间的关系内核的各子系统之间的关系 嵌入式嵌入式Linux内核一般可以分为内核一般可以分为4个部分:进程调度管理、内个部分:进程调度管理、内存管理、文件系统和设备驱动程序,它们之间的关系如存管理、文件系统和设备驱动程序,它们之间的关系如上上图所示。图所示。进程调度处于中心位置,其他所有子系统都依赖于它。在嵌入式进程调度处于中心位置,其他所有子系统都依赖于它。在嵌入式系统中,嵌入式系统中,嵌入式Linux的实时性能改造与进程调度有很大的关系,的实时性能改造与进程调度有很大的关系,调度策略的算法直接关系到系统的实时性能。调度策略的算法直接关系到系统的实时性能。2023/4/1526嵌入式嵌入式Linux中的文件系统结构中的文件系统结构 嵌入式嵌入式Linux的文件系统建立在块设备上,不采用驱动器号或的文件系统建立在块设备上,不采用驱动器号或驱动器名称来标识,而是采用了树形结构,每个独立文件系统为驱动器名称来标识,而是采用了树形结构,每个独立文件系统为一个子树,组成树形的层次化的结构。当引入新的文件系统时,一个子树,组成树形的层次化的结构。当引入新的文件系统时,嵌入式嵌入式Linux通过挂载方式将其连接到某个目录,从而使不同的文通过挂载方式将其连接到某个目录,从而使不同的文件系统组合成一个整体成为可能。件系统组合成一个整体成为可能。2023/4/1527嵌入式嵌入式Linux内核移植内核移植l如果一个系如果一个系统是可以在不同的硬件平台上运行,那么是可以在不同的硬件平台上运行,那么这个个系系统就是可移植的。就是可移植的。Linux内核移植指根据自己的硬件平内核移植指根据自己的硬件平台台对内核源代内核源代码进行行修改修改,同,同时对内核内核进行行裁剪裁剪,编译出出适合自己硬件平台的内核适合自己硬件平台的内核镜像文件。像文件。Linux内核源代内核源代码包括多个目包括多个目录:(1)arch:包括硬件特定内核代:包括硬件特定内核代码,如,如arm、mips等;等;(2)drivers:包含硬件:包含硬件驱动代代码;(3)include:通用:通用头文件及文件及针对不同平台的特定不同平台的特定头文件;文件;(4)init:内核初始化代:内核初始化代码;(5)ipc:进程程间通信代通信代码;(6)kernel:内核核心代:内核核心代码;(7)mm:内存管理代:内存管理代码;(8)net:与网:与网络协议栈相关的代相关的代码;(9)fs:文件系:文件系统相关代相关代码,如,如nfs、vfat等;等;(10)lib:库文件,与平台无关的文件,与平台无关的strlen、strcpy等等2023/4/1528Linux下驱动程序设计示例下驱动程序设计示例lLinux操作系操作系统对串口有着很好的支持,其中的串口串口有着很好的支持,其中的串口驱动程序程序对用用户屏蔽了底屏蔽了底层硬件的相关信息,而且硬件的相关信息,而且为用用户提供了一系列的提供了一系列的标准准调用函数,极大的方便用函数,极大的方便了串口通信的操作。用了串口通信的操作。用户编写串口写串口应用程序的用程序的时候候不需要考不需要考虑硬件相关的硬件相关的问题,只需要根据,只需要根据Linux操作操作系系统提供的提供的调用函数来用函数来实现自己需要的功能自己需要的功能。l在在Linux操作系操作系统下,串口是被当做文件来下,串口是被当做文件来对待的,待的,因此因此对它它进行数据收行数据收发等效于等效于对文件文件进行行读写操作。写操作。对串口的操作一般分串口的操作一般分为四个步四个步骤:打开串口、打开串口、设置置串口、串口、读写串口写串口和和关关闭串口。串口。2023/4/1529(1)打开串口打开串口在在ARM平台中平台中Linux操作系操作系统下的串口下的串口设备文件文件为/dev/ttySAC0。int fd;fd=open(/dev/ttySAC0,O_RDWR);/*以以读写方式写方式打开串口打开串口*/if(fd=-1);/*如果打开串口如果打开串口错误则输出提示信息出提示信息*/perror(Cant Open Serial Port);2023/4/1530(2)设置串口设置串口与无操作系与无操作系统的情况下的情况下对串口串口进行初始化行初始化设置置类似,在似,在Linux下最基本的串口下最基本的串口设置工作置工作主要包括主要包括波特率、校波特率、校验位和停止位位和停止位的的设置,置,其其设置方式主要是置方式主要是对struct termios结构体构体各成各成员值进行行设置。置。在不同在不同应用中通常需要用中通常需要设置的波特率及数置的波特率及数据格式等参数都不一据格式等参数都不一样,可以将,可以将结构体成构体成员赋值的功能的功能编写成写成函数函数,通,通过对该函数入口函数入口参数的修改,即可方便的参数的修改,即可方便的实现不同的不同的设置。置。2023/4/1531波特率设置函数波特率设置函数void set_speed(int fd,int speed)int i;int status;struct termiosOpt;tcgetattr(fd,&Opt);/*得到机器原端口的默得到机器原端口的默认设置置*/for(i=0;i sizeof(speed_arr)/sizeof(int);i+)if(speed=name_arri)tcflush(fd,TCIOFLUSH);cfsetispeed(&Opt,speed_arri);cfsetospeed(&Opt,speed_arri);status=tcsetattr(fd,TCSANOW,&Opt);if(status!=0)perror(tcsetattr fd1);return;tcflush(fd,TCIOFLUSH);2023/4/1532数据格式数据格式设置函数设置函数int set_Parity(int fd,int databits,int stopbits,int parity)struct termios options;if(tcgetattr(fd,&options)!=0)perror(SetupSerial 1);return(FALSE);options.c_cflag&=CSIZE;switch(databits)/设置数据位个数置数据位个数 case 7:options.c_cflag|=CS7;/设置数据位置数据位为7位位 break;case 8:options.c_cflag|=CS8;/设置数据位置数据位为8位位 break;default:fprintf(stderr,Unsupported data sizen);return(FALSE);2023/4/1533数据格式数据格式设置函数设置函数switch(stopbits)/设置停止位个数置停止位个数 case 1:options.c_cflag&=CSTOPB;/设置停止位置停止位为1位位 break;case 2:options.c_cflag|=CSTOPB;/设置停止位置停止位为2位位 break;default:fprintf(stderr,Unsupported stop bitsn);return(FALSE);2023/4/1534switch(parity)/设置校置校验位属性位属性 case n:case N:options.c_cflag&=PARENB;/关关闭奇偶校奇偶校验 options.c_iflag&=INPCK;/关关闭输入奇偶校入奇偶校验检测 break;case o:case O:options.c_cflag|=(PARODD|PARENB);/设置置为奇效奇效验 options.c_iflag|=INPCK;/打开打开输入奇偶校入奇偶校验检测 break;case e:case E:options.c_cflag|=PARENB;/打开奇偶校打开奇偶校验 options.c_cflag&=PARODD;/设置置为偶效偶效验 options.c_iflag|=INPCK;/打开打开输入奇偶校入奇偶校验检测 break;default:fprintf(stderr,Unsupported parityn);/不能不能识别的校的校验类型型 return(FALSE);2023/4/1535(3)读写串口实现数据传输读写串口实现数据传输从串口从串口发送数据:送数据:使用文件操作使用文件操作write函数函数实现数据数据发送,示例程序如下:送,示例程序如下:charbuffer1024;int Length;int writeByte;writeByte=write(fd,buffer,Length);功能:将功能:将发送送缓冲区冲区buffer中中Length大小的数据从串口大小的数据从串口发出。出。从串口接收数据:从串口接收数据:使用文件操作使用文件操作read函数函数实现数据接收,示例程序如下:数据接收,示例程序如下:charbuffer1024;int Length;int readByte;readByte=read(fd,buffer,Length);功能:功能:读取串口接收到的取串口接收到的Length大小的数据,并放到接收大小的数据,并放到接收缓冲区冲区buffer中。中。2023/4/1536(4)关闭关闭串口串口关关闭串口就是关串口就是关闭设备文件,使用文件操文件,使用文件操作作close函数函数实现。close(fd););

    注意事项

    本文(《微处理器系统结构与嵌入式系统设计》cha.ppt)为本站会员(wuy****n92)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开