1、嵌入式应用初级教程嵌入式应用初级教程 -基于Cortex-M3和Stellaris 外设驱动程序库高等学校计算机类课程应用型人才培养规划教材内容简介内容简介 本书基于Cortex-M3和Stellaris 外设驱动程序库,结合编者多年的教学和科研经验,系统全面地介绍了嵌入式应用系统的基本概念、结构、软硬件设计方法和相关的开发工具。内容更加侧重于接口技术,读者对接口的应用有了更深入的了解,可以按照不同的应用需求选择不同的接口进行应用开发。通过本书的学习,可以帮助读者从系统的角度掌握嵌入式应用系统的基本知识,掌握嵌入式应用系统开发的基本方法,具备开发嵌入式应用系统的设计技能。本书适用于计算机、电子
2、、电气、通信等与控制相关的专业作为嵌入式应用的入门教材,也适用于IT企业嵌入式工程师作为Cortex-M3的开发参考手册。目目 录录第1章 概述第2章 ARM应用软件开发环境第3章 基本接口应用设计第4章 通信接口应用设计第5章 模拟接口应用设计第6章 应用系统的开发实例第1章 概述4导读导读 嵌入式系统的学习必须明确学习的目标,不同的学习目标所需要的知识点和设计开发有很大的不同,本章首先介绍关于嵌入式系统的学习定位,然后针对CortexM3系列处理器和StellarisWare 软件作简单介绍。通过对本章内容的学习,学生应该能够做到:掌握:嵌入式系统的学习定位。了解:CortexM3系列处理
3、器和StellarisWare 软件。1.1.1 什么是嵌入式系统 嵌入式系统本身是一个相对模糊的定义。一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。关于嵌入式系统的定义很多,下面是一种广泛认可的定义:“以应用为中心、以计算机技术为基础、软硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”。它与通用计算机技术的最大差异是必须支持硬件裁减和软件裁减,以适应应用系统对体积、功能、功耗、可靠性、成本等的特殊要求。1.1.2 1.1.2 嵌入式系统开发的嵌入式系统开发的4 4个层次个层次 嵌入式系统的开发可分为4个层次:硬件层、驱动层、操作系统层和应用层
4、。1 1、硬件层、硬件层 硬件层开发的主要工作是根据应用的需求,选择适合硬件层开发的主要工作是根据应用的需求,选择适合的嵌入式处理器芯片,配置相应的接口电路,为嵌入式应的嵌入式处理器芯片,配置相应的接口电路,为嵌入式应用构建一个硬件平台。用构建一个硬件平台。嵌入式系统硬件的核心是嵌入式处理器。嵌入式处理嵌入式系统硬件的核心是嵌入式处理器。嵌入式处理器一般可分为器一般可分为4类:类:嵌入式微处理器(嵌入式微处理器(EMPU)嵌入式微控制器(嵌入式微控制器(EMCU)嵌入式嵌入式DSP处理器(处理器(EDSP)嵌入式片上系统(嵌入式片上系统(ESoC)嵌入式微处理器(MicroProcessor
5、Unit)嵌入式微处理器是从通用计算机的嵌入式微处理器是从通用计算机的CPU 演变过来的。其特征是演变过来的。其特征是具有具有32 位以上的处理器,具有较高的性能,其价格也相应较高。位以上的处理器,具有较高的性能,其价格也相应较高。与通用计算机的与通用计算机的CPU 不同的是,它在实际应用中只保留与应用不同的是,它在实际应用中只保留与应用紧密相关的功能硬件,去除其它的冗余部分,以最低的功耗和资源实紧密相关的功能硬件,去除其它的冗余部分,以最低的功耗和资源实现应用系统的需要。现应用系统的需要。与工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、与工业控制计算机相比,嵌入式微处理器具有体积小、
6、重量轻、成本低等优点。但是在电路板上必须包括成本低等优点。但是在电路板上必须包括ROM、RAM、总线接口、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。嵌入式微处理器及其存储器、总线、外设等安装在一块电路板上,嵌入式微处理器及其存储器、总线、外设等安装在一块电路板上,称为单板计算机,如称为单板计算机,如STD-BUS、PC104等。近年来,德国、日本的等。近年来,德国、日本的一些公司又开发出了类似火柴盒式、名片大小的嵌入式计算机系列一些公司又开发出了类似火柴盒式、名片大小的嵌入式计算机系列OEM产品。产品。目前主要
7、的嵌入式微处理器有:目前主要的嵌入式微处理器有:ARM,PowerPC、MIPS、Atom 等系列。等系列。嵌入式微控制器(MicroController Unit)嵌入式微控制器的典型代表是单片机,将CPU 和计算机的外围功能单元(如:存储器、I/O 口、定时计数器、中断系统等)集成在一块芯片上。与嵌入式微处理器相比,单片机的最大特点是单片化,体积大大减小,功耗和成本更低。由于单片机的片内资源丰富,特别适用于控制场合,所以国外都称之为“微控制器”。嵌入式微控制器的品种数量繁多 嵌入式DSP 处理器(Digital Signal Processor)DSP 是专门用于信号处理的处理器,在系统结
8、构和指令算法方面进行了特殊的设计,具有很高的编译效率和指令执行速度。DSP算法正在大量进入嵌入式领域,DSP应用正在逐步从在通用单片机中以普通指令实现DSP功能过渡到采用嵌入式DSP处理器。嵌入式DSP处理器比较有代表性的产品是Texas Instruments的TMS320系列,包括用于控制的C2000系列、移动通信的C5000系列,以及性能更高的C6000系列。嵌入式片上系统(System on Chip)嵌入式片上系统从整个系统性能要求出发,把微处理器、芯片结嵌入式片上系统从整个系统性能要求出发,把微处理器、芯片结构、外围器件各层次电路直至器件的设计紧密结合起来,并通过建立构、外围器件各
9、层次电路直至器件的设计紧密结合起来,并通过建立在全新理念上的系统软件和硬件的协同设计,在单个芯片上实现整个在全新理念上的系统软件和硬件的协同设计,在单个芯片上实现整个系统的功能。系统的功能。SoC 的最大特点是实现了软硬件的无缝结合,片内嵌入了操作的最大特点是实现了软硬件的无缝结合,片内嵌入了操作系统的代码模块。系统的代码模块。SoC 具有极高的综合性,可以应用具有极高的综合性,可以应用VHDL 等硬件描等硬件描述语言,实现一个复杂的系统。由于绝大部分系统构件都在片内,所述语言,实现一个复杂的系统。由于绝大部分系统构件都在片内,所以整个系统特别简洁,不仅减小了系统的体积和功耗,而且提高了系以整
10、个系统特别简洁,不仅减小了系统的体积和功耗,而且提高了系统的可靠性和设计生产效率。统的可靠性和设计生产效率。SoC可以分为通用和专用两类。通用系列现在几乎每个半导体制可以分为通用和专用两类。通用系列现在几乎每个半导体制造商都在生产。如造商都在生产。如TI的达芬奇处理器系列及的达芬奇处理器系列及OMAP处理器系列;飞思处理器系列;飞思卡尔的卡尔的i.MX系列及系列及QorIQ系列系列,NXP的的NPX系列,系列,Intel的的CE4000系系列等;而专用列等;而专用SoC一般专门用于某个或某类系统中,不为一般用户所一般专门用于某个或某类系统中,不为一般用户所知。知。2、驱动层 它是介于嵌入式硬件
11、和上层软件之间的一个底层软件开发包,主它是介于嵌入式硬件和上层软件之间的一个底层软件开发包,主要目的是屏蔽下层硬件。要目的是屏蔽下层硬件。该层一般拥有两部分功能。该层一般拥有两部分功能。一是系统引导,包括嵌入式处理器和基本芯片的初始化;一是系统引导,包括嵌入式处理器和基本芯片的初始化;二是提供设备的驱动接口,负责嵌入式系统与外设的信息交互。二是提供设备的驱动接口,负责嵌入式系统与外设的信息交互。驱动层程序一般包括硬件抽象层(驱动层程序一般包括硬件抽象层(HAL)、板级支持包()、板级支持包(BSP)和设备驱动程序。和设备驱动程序。3、操作系统层 嵌入式操作系统是嵌入式系统极为重要的组成部分,其
12、通常包括与嵌入式操作系统是嵌入式系统极为重要的组成部分,其通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面等。界面等。嵌入式操作系统可以分为嵌入式操作系统可以分为实时操作系统实时操作系统(Real Time Operate System,RTOS)和)和分时操作系统分时操作系统。分时操作系统对软件的执行时间的要求并不严格,时间上的延误或分时操作系统对软件的执行时间的要求并不严格,时间上的延误或者时序上的错误一般不会造成灾难性的后果。者时序上的错误一般不会造成灾难性的后果。实时操作系统首要任务是尽一切可能完
13、成实时操作系统首要任务是尽一切可能完成实时控制实时控制任务,其次着眼任务,其次着眼于提高计算机系统的使用效率。实时性需要调度一切可利用的资源完成于提高计算机系统的使用效率。实时性需要调度一切可利用的资源完成实时控制任务,着眼于提高计算机系统的使用效率,满足对时间的限制实时控制任务,着眼于提高计算机系统的使用效率,满足对时间的限制和要求。和要求。实时系统是面向具体应用,对外来事件在限定时间内能做出反应的实时系统是面向具体应用,对外来事件在限定时间内能做出反应的系统。限定时间的范围很广可以从微秒级(如信号处理)到分级(如联系统。限定时间的范围很广可以从微秒级(如信号处理)到分级(如联机查询系统)。
14、机查询系统)。4 4、应用层、应用层 应用层的基本任务是开发最终运行在目标机上的应用软件,如嵌入式游戏、家电控制软件、多媒体播放软件等。1.1.3 1.1.3 嵌入式学习的目标定位嵌入式学习的目标定位 对于初学者必须要明确方向,自己的目标是什么?自己要在那一层面上走?然后认真学习相关的知识,不管哪一层,学好了,学精了,都会很有前途的。1 1、嵌入式硬件工程师、嵌入式硬件工程师 嵌入式硬件工程师要求具有较强的硬件设计能力,能够根据应用的需求,选择适嵌入式硬件工程师要求具有较强的硬件设计能力,能够根据应用的需求,选择适合的嵌入式处理器芯片,配置相应的接口电路,为嵌入式应用构建一个硬件平台。合的嵌入
15、式处理器芯片,配置相应的接口电路,为嵌入式应用构建一个硬件平台。嵌入式硬件层的开发可能有两种模式:嵌入式硬件层的开发可能有两种模式:模式一:是基于模式一:是基于EMPU(嵌入式处理器)、(嵌入式处理器)、EMCU(嵌入式微控制器)或(嵌入式微控制器)或EDSP(嵌入式(嵌入式DSP处理器)的开发设计。处理器)的开发设计。主要工作:根据应用的需求,进行接口的配置。主要工作:根据应用的需求,进行接口的配置。硬件基础:微机原理、单片机原理、接口技术。硬件基础:微机原理、单片机原理、接口技术。软件基础:要掌握软件基础:要掌握SCH(电路原理图)和(电路原理图)和PCB(印刷电路板)的辅助设计工具。(印
16、刷电路板)的辅助设计工具。模式二:基于模式二:基于CPLD(复杂可编程逻辑器件)、(复杂可编程逻辑器件)、FPGA(现场可编程门阵列)或(现场可编程门阵列)或SoC(嵌入式片上系统)的开发设计。(嵌入式片上系统)的开发设计。主要工作:进行逻辑电路的设计和接口的设计。主要工作:进行逻辑电路的设计和接口的设计。硬件基础:数字逻辑电路基础、微机原理、单片机原理、接口技术。硬件基础:数字逻辑电路基础、微机原理、单片机原理、接口技术。软件基础:要掌握辅助设计工具和硬件描述语言(软件基础:要掌握辅助设计工具和硬件描述语言(VDHL)。)。2 2、嵌入式驱动工程师、嵌入式驱动工程师 嵌入式驱动层的开发可能有
17、两种模式:嵌入式驱动层的开发可能有两种模式:模式一:不兼容操作系统的驱动设计,这是一种较低模式一:不兼容操作系统的驱动设计,这是一种较低层次的开发设计。层次的开发设计。模式二:兼容操作系统的驱动设计,这是一种较高层模式二:兼容操作系统的驱动设计,这是一种较高层次的开发设计。次的开发设计。一个优秀的驱动工程师不仅要能看懂电路图,还必须一个优秀的驱动工程师不仅要能看懂电路图,还必须十分精通对操作系统内核,以使其所写的驱动程序能够兼十分精通对操作系统内核,以使其所写的驱动程序能够兼容操作系统。不至于在系统调用时,独占操作系统时间片,容操作系统。不至于在系统调用时,独占操作系统时间片,而使其它任务不能
18、运行。而使其它任务不能运行。3 3、嵌入式应用工程师、嵌入式应用工程师 嵌入式应用工程师的任务是根据应用的需求,设计一个完整的应用系统。要成为一个优秀的嵌入式应用工程师,必须动手做,踏踏实实地做一些课题,才会有进步。按照设计的平台基础不同,有多种不同的定位。基于硬件层的嵌入式应用工程师 基于驱动层的嵌入式应用工程师 基于操作系统层的嵌入式应用工程师、基于硬件层的嵌入式应用工程师、基于硬件层的嵌入式应用工程师 基于硬件层的嵌入式应用设计包括两大内容:一是硬件设计:要根据应用的需求,选择适合的嵌入式处理器芯片,配置相应的接口电路,为嵌入式应用构建一个硬件平台。二是软件设计:开发最终运行在目标机上的
19、应用程序。技术基础:硬件基础:数字逻辑电路基础、微机原理、单片机原理、接口技术。要掌握SCH和PCB的辅助设计工具。软件基础:C语言程序设计、汇编语言程序设计 要掌握软件的开发环境、基于驱动层的嵌入式应用工程师、基于驱动层的嵌入式应用工程师 基于驱动层的嵌入式应用设计一般要选择一种带有驱动的硬件平基于驱动层的嵌入式应用设计一般要选择一种带有驱动的硬件平台,在这个硬件平台基础上开发应用软件。台,在这个硬件平台基础上开发应用软件。技术基础:技术基础:硬件基础:数字逻辑电路基础、微机原理、单片机原理、接口技术。硬件基础:数字逻辑电路基础、微机原理、单片机原理、接口技术。软件基础:软件基础:C语言程序
20、设计、汇编语言程序设计语言程序设计、汇编语言程序设计1.2 ARM CortexTM系列处理器 ARM(Advanced RISC Machines)既是一个公司的名字,也是对一类微处理器的通称,还可以认为是一种技术的名字。ARM公司1991年成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM技术知识产权(IP)核的微处理器(即我们通常所说的ARM微处理器),已遍及工业控制、消费类电子产品、通信系统、无线系统等各类产品市场。基于ARM技术的微处理器,其应用占据了32位RISC处理器75%以上的市场份额。ARM技术正在逐步渗透到我们生活的各个方面。目前,全世界有几十家大的半导体公司都使
21、用ARM公司的授权,因此既使得ARM技术获得了更多的第三方工具、制造、软件的支持。又使得整个系统成本降低,产品更容易进入市场被消费者接受,更具竞争力。到目前为止,ARM处理器及技术的应用几乎已经深入到各个领域。ARM CortexTM系列处理器为新的ARM V7架构定义了三大分工明确的系列:“A”系列_面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列_针对实时系统;“M”系列_针对微控制器和低成本应用系统。1.3 CortexM3系列处理器 ARM公司于2005年推出了Cortex-M3内核,并且在当年与其他投资商合伙成立了Luminary(流明诺瑞)公司,由该公司率先设计、生产与销售基
22、于Cortex-M3内核的ARM芯片Stellaris(群星)系列ARM。Cortex-M3内核主要是应用于低成本、管脚数少和低功耗的场合,并且具有极高的运算能力和极强的中断响应能力。CortexM3系列处理器 Cortex-M3处理器采用纯Thumb2指令的执行方式,使得这个具有32位高性能的ARM内核能够实现8位和16位的代码存储密度。ARM Cortex-M3处理器是使用最少门数的ARM CPU,核心门数只有33K,在包含了必要的外设之后的门数也只有60K,使得封装更为小型,成本更加低廉。Cortex-M3采用了ARM V7哈佛架构,具有带分支预测的3级流水线,中断延迟最大只有12个时钟
23、周期,在末尾连锁的时候只需要6个时钟周期。同时具有1.25 DMIPS/MHZ的性能和0.19mW/MHZ的功耗。Cortex-M3是首款基于ARMv7-M架构的处理器,是专门为了在微控制器,汽车车身系统,工业控制系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能而设计的,它大大简化了可编程的复杂性,使ARM架构成为各种应用方案(即使是最简单的方案)的最佳选择。CortexM3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CortexM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指令与数据访问并行进行。这样一来数据访问不再占
24、用指令总线,从而提升了性能。为实现这个特性,CortexM3内部含有多条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。比较复杂的应用可能需要更多的存储系统功能,为此CortexM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。在CortexM3中,同时支持小端模式和大端模式。只要懂C语言就会开发 由于Luminary官方免费公开地提供了基于C语言(符合ANSI C标准)的驱动库软件包,并且公开了源代码,因此用户只要懂只要懂C
25、语言语言,不需要掌握硬件寄存器的操作细节,就能进行基于Cortex-M3处理器的应用开发。1.4 StellarisWare 软件 StellarisWare软件是TI公司配合Cortex-M3开发而推出的系列软件。采用基于StellarisWare 软件的微处理器开发,不仅能够简化开发,而且可以加速开发进程。最新版本的StellarisWare整合了Stellaris外设驱动库、Stellaris图形库、StellarisUSB库、Stellaris示例代码、以及Stellaris boot-loader等。StellarisWare 软件包括:软件包括:Stellaris 外设驱动程序库
26、Stellaris 图形库 Stellaris USB库 Stellaris 代码示例 Stellaris 系统内编程支持 Stellaris IEC 60730 支持1、Stellaris 外设驱动程序库 Stellaris 外设驱动程序库是免版税的函数集,用于控制在 Stellaris 系列 ARM Cortex-M3 微处理器上连接的外设。性能远优于 GUI 外设配置工具,Stellaris 外设驱动程序库可执行外设初始化和外设控制函数,并提供轮询或中断驱动外设支持。Stellaris 外设驱动程序库支持两种编程模型:直接寄存器访问模型和软件驱动程序模型。依据应用需要或开发者要求的编程环
27、境,可独立使用或编译每个编程模型。直接寄存器访问模型包括每个特定 Stellaris MCU 的头文件,并且通常会在大多数深层嵌入式固件工程师和经常使用 8 位和 16 位 MCU 的工程师熟悉的软件开发环境中生成更小且更有效的代码。软件驱动程序模型使得软件工程师无需了解硬件详细信息,包括每个寄存器的操作、位字段、它们的交互以及外设正常操作所需的定序,通常需要较少的时间便可开发应用程序。某些 Stellaris 微处理器在 ROM(只读存储器)中提供了 Stellaris 外设驱动程序库片上试验。借助 ROM 中的 Stellaris 外设驱动程序库,在整个闪存可用于应用程序的环境中,使用该库
28、快速开发有效且功能性应用程序比以前更加容易。基于 ROM 的 Stellaris 外设驱动程序库还支持用户对标准 Stellaris 外设驱动程序库功能进行基于闪存的覆盖,从而使功能具有完整的灵活性。2、Stellaris 图形库 Stellaris 图形库是一组免版税的图形基元和小工具集,用于在基于 Stellaris 微处理器的具有图形显示的电路板上创建图形用户界面。该图形库包含三个功能构建层:显示屏驱动器层,特定于使用中的显示屏;图形基元层,它在有源显示屏缓冲器或进行无闪烁操作的屏幕外缓冲器中绘制点、线、矩形、圆、字体、位图图形和文本;以及小工具层,它提供复选框、按钮、单选按钮、滑块、列
29、表框以及一个或多个图像基元的通用封装,以便在显示屏上绘制用户界面元素,并能够通过小工具元素为用户交互提供应用程序定义的响应。为了确保该软件易于理解和维护,Stellaris 图形库完全用 C 语言编写,完全不可能的环境除外。即使用 C 语言编写,由于 Cortex-M3 Thumb2 指令集的紧凑性,该库在存储和处理器使用方面非常有效。3、Stellaris USB 库 具有 USB 功能的德州仪器(TI)的 Stellaris 微处理器已全部通过 USB 器件认证和 USB 嵌入式主机相容性测试。Stellaris USB 库是免版税的数据类型和功能集,为基于 Stellaris 微处理器的
30、系统创建 USB 器件、主机或 On-the-Go(OTG)应用程序。提供了多个编程接口,从仅提取底层 USB 控制器硬件的最薄层到为特定器件提供简单 API 支持的高级接口。USB 库的内容和其相关头文件分为四个主要组:器件和主机应用程序使用的通用功能。包括解析 USB 描述符以及设置应用程序操作模式的功能。特定于器件的功能提供所有 USB 器件应用程序需要的类独立功能,例如主机连接信令和对标准描述符请求的响应。特定于主机的功能提供所有 USB 主机应用程序需要的类独立功能,例如器件检测和枚举以及端点管理。特定于类的功能和数据类型可帮助开发符合多个常用 USB 类的应用程序。提供的 USB
31、器件示例包括 HID 键盘、HID 鼠标、CDC 串行端口以及通用大容量设备。提供的 USB 主机示例包括大容量存储(USB 闪存棒)、HID 键盘以及 HID 鼠标。此外,Stellaris USB 库在节省开发时间的预编译 DLL 中对受支持的 USB 类提供基于 Windows 的 INF。完整的 USB 函数子集可简化嵌入式 USB 控制。提供的免版税示例应用可以快速实现高效的 USB 主机、USB 器件和 USB OTG 操作。4、Stellaris 代码示例 所有 Stellaris 开发和评估套件都随附丰富的应用集,它们举例说明了如何使用 Stellaris 微处理器和 Stel
32、larisWare 软件。每个套件都随附快速启动应用,它专为充分利用评估板上的功能而设计。由于该快速启动应用将同时使用电路板上的许多外设,因此这些套件还随附了更简单的应用集。这些简单的应用为受套件支持的所有外设都提供了独立代码示例。为了支持用户使用套件进行开发,我们还为快速启动应用和简单的应用示例提供了源码和项目文件。为所有示例项目提供的文档对每个应用示例的功能进行了介绍。5、Stellaris 系统内编程支持 德州仪器(TI)还为需要现场可编程功能的应用提供了免版税的 Stellaris 启动加载程序源码,可以在闪存开始运行时将它添加到应用。此小代码片段可以用作应用加载程序,并且会保持常驻以
33、支持终端应用的现场可编程功能。具有灵活的接口选项(包括 UART、I2C、SSI、CAN、USB DFU 或以太网)和用于发送现场更新信号的可选方法,Stellaris 启动加载程序在满足启动加载程序要求方面为用户提供了最大的灵活性。Stellaris 外设驱动程序库包含源码和有关 Stellaris 启动加载程序的信息,其中包括将启动加载程序用于现场更新的示例应用。某些 Stellaris 微处理器在集成在器件上的只读存储器(ROM)中提供 Stellaris 启动加载程序,从而节省了应用的闪存空间。即使 Stellaris 启动加载程序位于 ROM 中,为了在应用中实现最大的灵活性,您也可
34、以使用自定义的闪存版本来覆盖基于 ROM 的启动加载程序。6、Stellaris IEC 60730 支持 为了帮助家电客户采取积极措施确保基于 Stellaris 的产品安全可靠地运行,StellarisWare 包含 IEC 60730 B 类测试库来支持其客户在 B 类认证流程中进行测试。此外,Stellaris 微处理器还专门针对安全关键型工业应用和消费电子类应用进行了设计,为精确控制、连接和监控提供了多个集成的安全功能。该库对测试应用同样非常有用,而且对生产测试环境中终端应用的构建也很有益处。本章小结 本章系统的介绍了嵌入式系统学习的定位,简单介绍了ARM CortexTM系列处理器
35、和StellarisWare软件,为进一步学习奠定基础。本章习题本章习题1.嵌入式系统的开发可分为哪几个层次?2.ARM CortexTM系列处理器分工明确地定义了哪三大系列?3.TI公司推出的Stellaris 外设驱动程序库是配合哪个系列处理器的?4.请说明你对嵌入式应用学习的目标定位的理解。第第2 2章章 ARM ARM应用软件的开发环境应用软件的开发环境35导读导读 嵌入式应用系统中必须放入调试好的应用程序,系统才能运行。嵌入式应用程序的开发,大量使用汇编语言和C/C+语言。嵌入式软件的开发工具可以分为两大类:一类是功能单一的开发工具(如:源程序编辑器、汇编器、编译器、反汇编工具、反编
36、译工具、软件仿真器、硬件仿真器等等);另一类是将多种功能集成在一起的集成开发环境。RealView MDK是ARM公司最先推出的基于微控制器的专业嵌入式开发工具。它采用了ARM 的最新编译工具RVCT(RealView Compilation Tools),集成了Keil Vision集成开发环境(IDE),因此特别易于使用,同时具备非常高的性能。与ARM之前的工具包ADS 等相比,RealView 编译器的最新版本可将性能改善超过20%。因此,RealView MDK是ARM软件开发的首选工具。通过对本章内容的学习,学生应该能够做到:了解程序设计的一些基本概念;掌握开发平台RealView
37、MDK的使用方法;能够在RealView MDK环境下进行应用程序的开发。2.1 Keil uVision4集成开发环境 Keil uVision4是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的51内核芯片,甚至ARM,它集编辑,编译,仿真等于一体,它的界面和常用的微软VC+的界面相似,因此特别易于使用,同时具备非常高的性能。2.1.1 安装与启动 Keil uVision4下载得到的是一个压缩文件,解压安装完成后,安装完成后,可从开始程序Keil uVision4启动,启动后的界面见图 2.1.2 工程项目的管理 在Keil uVision4中,设置了一个项目管理器,可以在
38、项目管理下,开发应用程序。创建一个应用,一般需要下列几个步骤:新建一个项目 在项目中,创建、编辑源程序文件 为此项目指定编译和调试环境 编译项目 调试 新建一个项目新建一个项目 从Project菜单New Vision Project.进入新建对话框,输入工程名称,然后点击保存,即可创建一个新的项目。新建一个项目新建一个项目 选择CPU:一个新的工程项目创建以后,首先需要选择目标CPU,Vision IDE支持很多种不同公司的CPU,例如我们在这里选择Luminary Micro公司的LM3S1138。新建一个项目新建一个项目点击OK后,会出现一个消息框,是否复制Luminary的启动代码,加
39、入到工程中?新建一个项目新建一个项目点点击击是是,工工程程项项目目被被建建立立。在在打打开开的的工工程程项项目目窗窗口口中中,有有Project 文文件件管管理理器器,管管理理着着工工程程项项目目中中的的全全部部文文件件。为为了了使使工工程程项项目目中中的的文文件件组组织织更更具具有有层层次次性性和和条条理理性性,可可以以将将工工程程项项目目中中的的文文件件分分组组管管理理。这这里里已已经经包包含含了了Luminary的启动代码,放在的启动代码,放在Source Group 1组中。组中。新建一个源程序 从File菜单New.或点击 ,可打开一个空的编辑窗口用以编辑源程序。进入源程序编辑窗口后
40、,可以在该窗口下按照编程语言的语法要求编辑源程序。Vision IDE的编辑器就是一个文本编辑器,你可以用它来编写各种程序,只是应注意你所采用的编程语言符合文件的后缀和文件的格式。源程序编辑窗口打开后,Edit菜单有效。此时,可以使用edit菜单中的命令(undo、redo、cut、copy、paste、find、replace等)来辅助源程序编辑。新建一个源程序源程序编辑完后,可点击 或从File菜单save保存正在编辑的源程序文件。也可从File菜单save as 将当前正在编辑的源程序文件重命名保存。保存新编辑的源程序或将当前正在编辑的源程序文件重命名保存时,将出现另存为对话框,在这里可
41、选择保存的路径和保存的文件名。注意,要根据源程序所采用的编程语言来选择文件的后缀。将一个源程序加入到工程中 将一个已有的源程序文件加入到工程项目中的方法如下:在工程项目窗口中的相应位置点右键,在弹出的快捷菜单中选择Add Files.命令,进入选择文件对话框,如图所示,可选择一个已有的源程序文件,将其加入到工程项目中。在Vision IDE中,新建的源程序并没有包含在工程中,必须通过下面的操作,将一个已有的源程序文件加入到工程项目中。被加入到工程项目中的源程序文件必须满足以下两个条件:、该文件的扩展名,必须是文件映射表中所定义的。、对于可生成目标文件的源程序(如:C语言程序、汇编语言程序),在
42、同一个工程项目中不能同名。将一个已有的源程序文件加入到工程项目中的方法有2种:、在工程项目窗口中的相应位置点右键选择Add Files.进入选择文件对话框,可选择一个已有的源程序文件,加入到工程项目中。、在工程管理对话框中进行。打开一个工程项目或打开一个源程序文件 从Project菜单Open Project.,可打开一个已有的工程项目;从File菜单Open.或点击 可打开一个已有的源程序文件,进行编辑。打开一个已有的工程项目,即已打开该工程中所有的文件。工程管理 点击 可打开工程管理对话框,在工程管理对话框中,可以分别对工程目标(Project Targets)、文件组(Groups)和文
43、件(Files)进行增加(创建)、减少(删除)、变更顺序以及变更名称等操作。编辑源程序 在工程项目窗口中,双击文件名,即可打开源程序编辑窗口,进行编辑。2.1.3 工程项目的配置 要使前面创建的工程项目能够正确地被编译,还需要对工程的编译选项进行适当配置。在Vision IDE中,点击 可打开工程配置对话框。Vision IDE中,工程项目配置的选项有:目标CPU的选择设置(Device)、生成目标的基本选项设置(Target)、编译输出文件的选项设置(Output)、编译输出列表文件的选项设置(Listing)、用户程序的选项设置(User)、C语言编译器的选项设置(C51)、汇编语言编译器
44、的选项设置(A51)、调试器的选项设置(Debug)和一些公共选项设置(utilities)。这里主要需要设置的是以下一些项目:在目标CPU的选择设置(Device)中,必须选择CPU的型号,这在新建工程时已经做了,在这里,还可以进行修改。在生成目标的基本选项设置(Target)中,主要需要设置系统时钟的频率;选择是否使用片内ROM;选择使用片外ROM和片外RAM的地址空间。在编译输出文件的选项设置(Output)中,需要选择编译生成可执行文件还是库文件,若选择编译生成可执行文件,还要设置输出文件名。在调试器的选项设置(Debug)中,主要需要设定采用软件仿真(Simulator)还是硬件仿真
45、。若采用硬件仿真,就需要选择相应的仿真器。2.1.4 编译 从Project菜单Build Target 或点击 可对选中的工程目标进行编译,从Project菜单Rebuild all Target files 或点击 可对所有的工程目标进行编译。编译完成后,在Build output窗口报告出错和警告情况。当显示0 Eorror,0 Warning 时,表明没有语法错误了。2.2 Stellaris2.2 Stellaris外设驱动库外设驱动库 在RealView MDK集成开发环境中,已经包含有Stellaris外设驱动库,库文件名为:“DriverLib.lib”,默认安装在“C:Kei
46、lARMRV31LIBLuminary”目录下。使用时,必须将库文件“DriverLib.lib”加载到你的工程中。StellarisStellaris外设驱动库中,包含的头文件外设驱动库中,包含的头文件 hw_memmap.h定义有全部片内外设在存储器里的基地址hw_types.h包含了一些重要的基本定义hw_comp.hcomp.h与模拟比较器紧密相关hw_adc.hadc.h与模数转换器(ADC)处理紧密相关hw_flash.hflash.h与flash接口紧密相关hw_gpio.hgpio.h与io接口紧密相关hw_i2c.hi2c.h与i2c接口紧密相关hw_ints.hinterr
47、upt.h与中断处理紧密相关hw_pwm.hpwm.h与脉宽调制器控制控制紧密相关hw_qei.hqei.h与正交编码器控制控制紧密相关hw_ssi.hssi.h与同步串行接口(SSI)紧密相关hw_sysctl.hsysctl.h与系统控制系统控制紧密相关systick.h与系统系统定时器SysTick处理紧密相关hw_timer.htimer.h与定时器处理紧密相关hw_uart.huart.h与uart接口紧密相关hw_watchdog.hwatchdog.h与看门狗处理紧密相关hw_can.hcan.h与can(局域网络控制)接口紧密相关hw_epi.hepi.h与嵌入式面板接口紧密相
48、关hw_ethernet.hethernet.h与以太网控制紧密相关hw_nvic.h与NVIC(嵌套向量中断控制嵌套向量中断控制)紧密相关hw_i2s.hi2s.h与i2s(音频)接口紧密相关hw_udma.hudma.h与Ultra ATA硬盘接口紧密相关hw_usb.husb.h与USB接口紧密相关hw_hibernate.hhibernate.h与Hibernate(一个开放源代码的对象关系映射框架)接口紧密相关 头文件头文件“hw_types.h”“hw_types.h”头文件“hw_types.h”里包含了一些重要的基本定义,如布尔类型tBoolean、硬件寄存器访问宏等。在整个S
49、tellaris驱动库当中该头文件处于基础性的地位,因此必须先要学习掌握这些基本定义。另外,在头文件“hw_memmap.h”里定义有全部片内资源的端口地址。在实际编程当中一般都要必须包含这两个头文件。#include#include 2.3 仿真调试环境 仿真的目的是调试程序的功能,使程序的功能达到目标的要求。2.3.1 选择仿真环境选择仿真环境 Vision IDE支持2种仿真调试方式,软件仿真(Simulator)和硬件仿真。需要在调试器的选项设置(Debug)中,设定采用的仿真调试方式。如果基于硬件调试,就要采用硬件仿真,在调试器的选项设置中,需要根据硬件仿真器做相应的选择,并进行相应
50、的设置。在Vision IDE中,点击可打开工程配置对话框。在调试器的选项设置(Debug)中,设定采用的仿真调试方式。Use Simulator:选择软件仿真 Use:选择硬件仿真2.3.1 选择仿真环境2.3.2 启动仿真界面 在Vision IDE中,通过Debug菜单Star/Stop Debug Session 或点击或直接按ctrl+F5可以启动仿真界面,调试器会载入应用程序并执行启动代码。2.3.3 在仿真界面中进行调试操作 进入仿真界面后,可以进行单步运行、全速运行、设断点运行等操作。可以查看存储器、寄存器及变量的数值。单步运行进入一个函数单步运行进入一个函数 在Debug菜单