版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 微处理器的嵌入式系统研究.、八、-刖言随着电子技术和计算机技术的进一步发展,嵌入式系统将起着越来越重要的作用,无论是民用还是军用随处都可以看见嵌入式系统的身影。在我国,至U目前为止,在嵌入式系统研究方面,比起世界 先进技术,落后了很多,基本上没多少核心技术,先进技术的知识产权都在国外。我国目前还没有生 产出可以在市场上竞争的芯片,但是随着国家的重视和投资,以及不断吸收世界先进技术,在一些领 域已经能够实现国产化了。但是这离许多世界先进技术还相差甚远。虽然现在经济全球化,但我们得 到的只是一些落后的技术。因此必须培养自己的人才,研究核心技术,掌握核心技术。本次毕业设计 的题目正是“基于 LPC
2、2114微处理器的嵌入式系统研究” |。本次设计涉及到了嵌入式系统开发的两个 重要模块。包括硬件开发和应用程序开发。旨在研究嵌入式系统的开发流程,掌握嵌入式系统的基本 开发方法,以及掌握一些硬件和软件的开发和调试工具。显然,本次设计的任务量是繁重的。再加上,以前我并没有接触过嵌入式系统这一领域。所以, 对我来说,任务就更加繁重。但我相信,通过我的努力,一定可以完成本次设计的任务。并且为我以 后的工作和学习打下坚实的基础。1绪论1.1嵌入式系统定义从应用来看:嵌入式系统是计算机的一种应用形式,通常是指嵌入到对象系统中的专用计算机系统。嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件
3、可裁剪、能适应应用系统 对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。从组成来看:把基于处理器(通用处理器和嵌入式处理器)的设备称为计算机,把计算机分成两 大部分,即通用计算机和嵌入式计算机。嵌入式系统也称为嵌入式计算机,因此嵌入式系统被定义为 非通用计算机系统,即专用计算机系统。1.2嵌入式系统的组成一个典型的嵌入式系统主要由以下几部分组成:硬件系统,嵌入式操作系统,应用软件(1)硬件系统硬件系统由嵌入式微处理器、外围接口硬件设备组成。(2)嵌入式操作系统在嵌入式操作系统中,一般都要采用嵌入式实时操作系统(RTOS, RTOS 般包括实时内核(kernel )及用户特定的板级支持
4、包(BSP,它介于硬件系统及上层软件之间,为所有的上层软件提 供一个多任务的实时操作系统环境及一整套 API。当然,在一些简单的嵌入式应用系统中,并没有操 作系统的支持。应用程序直接对底层硬件进行访问。(3)应用软件应用软件是针对特定的应用需求开发的软件,完成嵌入式系统的主要功能。大部分嵌入式系统开发人员选用的软件开发模式是先在PC机上编写软件,再进行软件的移植工作。1.3嵌入式系统的应用领域嵌入式系统广泛地应用在人们生活、工作的各个方面。如:(1 )消费类电子产品。如机顶盒,个人移动设备(PDA,数码音频播放器(MP3,数码相机,视频游戏播放器,IP电话等等。(2 )办公自动化产品。如激光打
5、印机,传真机,扫描仪,复印机和LCD投影仪等。(3) 控制系统与工业自动化。如智能控制设备,智能仪表、现场总线设备,数控机床,机器人等。(4) 生物医学系统。如 X光机的控制部件,EEG和ECG设备,CT,超声检测设备,核磁共振设备 等。(5 )现场仪器。如测量温度,湿度,电压,电流的仪器。还有各种协议分析器,用于分析网络协 议。还有数字示波器等。(6) 网络通信设备。调制解调器,数据通信基础设备,IP网上多媒体设备,网关,路由器,加 密解密设备,GPS设备,交换机,网络接入盒等。(7) 电信设备。电话交换机,终端适配器TA ATM交换机,帧中继和一些通信设备。1.4嵌入式系统的发展历史及趋势
6、嵌入式系统的出现至今已经有30多年的历史了(历史很短,说明前景很广阔),嵌入式技术也历经了几个发展阶段。第一阶段是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配 合的功能。第二阶段是以嵌入式 CPU为基础、以简单操作系统为核心的嵌入式系统。第三阶段是以嵌入式操作系统为标志的嵌入式系统。第四阶段是以基于In ternet为标志的嵌入式系统,这是一个正在迅速发展的阶段。 就嵌入式系统的而言,其发展趋势表现在如下几个方面。(1)开发平台的完备性嵌入式系统的开发是一项系统的工程,涉及到软件,硬件,系统集成等诸多方面。有的嵌入式厂商不公仅提供处理器,还提供完备的开发工具。其开
7、发工具包括硬件工具和软件工具。(2)嵌入式系统的网络化网络化主要表现在在两个方面,一方面是嵌入式处理器集成了网络接口,另一方面是嵌入式设备应用于网络环境中(3)系统的集成度的提高和性能指标的提高。未来的嵌入式产品,是软硬件高度集成的产品。这就要求设计者尽可能地提高系统的可靠性,降低系统的功耗,精简系统的内核,降低成本,对操作系统进行裁剪,用高效率的算法开发应用程序。(4 )友好的人机界面大多数的嵌入式系统都与人进行交互,所以友好的人机界面是开发嵌入式系统的基本要求。随着嵌入式技术的发展,新的人机界面不断被开发出来,如手写输入技术,语音输入/输出技术,图像输出技术。1.5 ARM概述ARM( A
8、dvaneed RISC Machines )是微处理器行业的一家知名企业,1991年ARM公司成立于英国剑桥。ARM公司是专门从事基于 RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接 从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从 ARM公司购买其设计的 ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前,总共有30多家半导体公司与 ARM签订了硬件技术使用许可协议,其中包括In tel、IBM、LG半导体、NEG SONY菲利浦和国民半导体这样的大公司,至于软件系统的 合伙人,则包括
9、微软、升阳和MRI等一系列知名公司。基于 ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。ARM架构是面向低预算市场设计的第一款 RISC微处理器。到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域:工业控制领域:作为 32位的RISC架构,基于ARM核的微控制器芯片不断占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。无线通讯领域:目前已有超过85%勺无线通讯设备采用了ARM技术,ARM以其高性能和低成本,在该
10、领域的地位日益巩固。网络应用:随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上进行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战。消费类电子产品:ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM技术。手机中的SIM智能卡也采用了 ARM技术。除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。采用RISC架构的ARM微处理器一般具有如下特点:体积小、低功耗、低成本、高性能;支持Thumb (16位)/ARM (32位)双
11、指令集,能很好的兼容8位/16位器件;大量使用寄存器,指令执行速度更快;大多数数据操作都在寄存器中完成;寻址方式灵活简单,执行效率高;指令长度固定;ARM微处理器目前包括下面几个系列,以及其它厂商基于ARM体系结构的处理器,除了具有体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。ARM7系列ARM9系列ARM9E系列ARM10E 系列SecurCore 系列In ter 的 XscaleIn ter 的 Stro ngARM其中,ARM7 ARM9 ARM9E ARM1(为4个通用处理器系列,每一个系列提供一套相对独特的性 能来满足不同应用领域的需求。SecurCo
12、re系列专门为安全要求较高的应用而设计。ARM7微处理器系列:ARM7系列微处理器为低功耗的 32位RISC处理器,最适合用于对价位和功耗要求较高的消费类 应用。ARM7微处理器系列具有如下特点:具有嵌入式ICE-RT逻辑,调试开发方便。极低的功耗,适合对功耗要求较高的应用,如便携式产品。能够提供0.9MIPS/MHZ的三级流水线结构。代码密度高并兼容 16位的Thumb指令集。 对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等。32位ARM指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。主频最高可达130MIPS,高速的运算处
13、理能力能胜任绝大多数的复杂应用。ARM7系列微处理器的主要应用领域为:工业控制、In ternet 设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。ARM7系列微处理器包括如下几种类型的核:ARM7TDMI ARM7TDMI-S ARM720T ARM7EJ其中,ARM7TMD是目前使用最广泛的 32位嵌入式RISC处理器,属低端ARM处理器核。TDMI的基本含义为:T:支持16位压缩指令集ThumbD: 支持片上Debug;M:内嵌硬件乘法器(Multiplier )I :嵌入式ICE,支持片上断点和调试点;ARM处理器共有37个寄存器,被分为若干个组(BANK,这些寄存器包括
14、:31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。6个状态寄存器,用以标识 CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。同时,ARM处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0R14)、一至二个状态寄存器和程序计数器。 在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器, 而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。ARM微处理器的在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中,ARM指令为32位
15、的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的 ARM代码相比较,可节省 30%40%以上的存储空间,同时具备32位代码的所有优点。ARM的设计实现了非常小但高性能的结构。ARM处理器结构的简单使 ARM的内核非常小,这样使器件的功耗也非常低。ARM是精简指令集计算机(RISC),因为它集成了非常典型的 RISC结构特性:一个大的、统一的寄存器文件;加载/存储结构,数据处理的操作只针对寄存器的内容,而不直接对存储器进行操作;简单的寻址模式,所有加载/存储的地址都只由寄存器的内容和指令域决定;统一和固定长度的指令域,简化了指令的译码。每一条数据处理指令都
16、对算术逻辑单元(ALU)和移位器进行控制,以实现对ALU和移位器的最大利用;地址自动增加和自动减少的寻址模式实现了程序循环的优化;多寄存器加载和存储指令实现了最大数据吞吐量;所有指令的条件执行实现了最快速的代码执行。这些在基本 RISC结构上增强的特性使 ARM处理器在高性能、低代码规模、低功耗和小的硅片尺 寸方面取得了良好的平衡。2系统需求分析2.1需求分析本次毕业设计的任务是基于LPC2114微处理器的嵌入式系统的开发,要求系统具有时钟电路, 电源电路,复位电路,键盘电路,|2C接口电路,JTAG接口电路。CPU模块是系统中最核心的部分,系统通过 CPU处理数据,控制系统中的其他模块,使其
17、他模块 根据系统发出的指令工作并且使各个部分协调工作。CPU要正常工作,最基本的就是配置相应的时钟电路和电源电路。CPU通过时钟信号的驱动,一步一步的控制程序执行。电源模块除了给 CPU提供电源外,同时给其它各功能模块也供电。通过外部输入的5V电压,在系统的滤波以及电压转换芯片后,得到内核及片内外设所需的工作电压1.8V和I/O所需的工作电压3.3V。复位电路为系统提供复位信号,以实现系统的初始化操作;当系统程序运行出错时或者操作错误使系统处于死锁状态时,为了摆脱困境,也需要复位信号将系统重新启动。键盘电路主要是通过按键控制程序的执行,有时也作为参数实现一些简单的数据输入。带有I 2C接口电路
18、的器件可十分方便地用来将一个或多个微控制器及外围器件构成系统。仿真器接口用来对程序进行调试和固化。2.2系统总体设计根据要求设计的嵌入式系统的原理框图如图3.1所示:电源模块复位模块键盘电路CPULPC2114时钟模块1IIC接口电路I系统仿真模块图1系统原理框图系统是通过模块化的设计方式来实现各个功能的,系统框图中包含了CPU模块、电源模块、复位电路模块、系统仿真模块、键盘接口、l2C接口。3系统硬件设计3.1核心处理器LPC2114简介根据本系统的需求分析,从性能、功耗、价格等方面进行考虑,我们发现飞利蒲的LPC2114已完全能满足本系统的设计要求。所以我们采用LPC2114作为核心处理器
19、来进行开发。LPC2114是基于一个支持实时仿真和跟踪的32位ARM7TDMI-SCPU并带有128 KB的高速Flash存储器,128位宽度的存储器接口和独特的加速结构,使32位代码能够在最大时钟速率下运行。对代码有严格控制的应用可使用16位Thumb模式将代码规模降低超过 30%,而性能损失却很少。由于LPC2114具有非常小的尺寸和极低的功耗,它们非常适合于那些将小型化作为主要要求的应用,例如 存储控制和POS机。带有宽范围的串行通信接口、片内多达64KB的SRAM由于具有大的缓冲区和强大的处理器能力,它们非常适合于通信网关和协议转换器、软件调制解调器、声音识别以及低端的图 像处理。而多
20、个32位定时器、PWM输出和32个GPIO,使它们特别适用于工业控制和医疗系统。它的主要特性有:32 位 ARM7TDMI-S核,超小 LQFP64封装。16 KB片内静态RAM128KB片内Flash程序存储器,128位宽度接口 /加速器可实现高达 60 MHz工作频率。通过片内boot装载程序实现在系统编程(ISP)和在应用编程(IAP)。512字节行编程时间 为1mso单扇区或整片擦除时间为400m&Embedded ICE可实现断点和观察点。当使用片内RealMonitor软件对前台任务进行调试时,中断服务程序可继续运行。-嵌入式跟踪宏单元(ETM支持对执行代码进行无干扰的高速实时跟踪
21、。4路10位A/D转换器,转换时间低至 2.44卩so2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)、实时时钟和看门狗。多个串行接口,包括 2个16C550工业标准 UART高速I C接口( 400 kbit/s )和2个SPI 口。通过片内锁相环(PLL)可实现最大为60MHz的CPU操作频率。向量中断控制器。可配置优先级和向量地址。多达46个通用I/O 口(可承受5V电压),9个边沿或电平触发的外部中断引脚。片内晶振频率范围:130 MHzo2个低功耗模式:空闲和掉电。通过外部中断将处理器从掉电模式中唤醒。-可通过个别使能/禁止外部功能来优化功耗。双电源CPU 操作电
22、压范围:1.651.95 V(1.8 V 0.15 V)I/O 操作电压范围:3.03.6 V(3.0 V 10%),可承受5V电压。3.2系统功能模块3.2.1 电源模块LPC2114要使用两组电源,I/O 口供电电源为3.3V,内核及片内外设供电电源为1.8V,所以系统设计为3.3V应用系统。系统电源电路如图2所示:U5 VIN VOUTVDD3.3VLT1085-12/T02202VDD1.8V V0UT VINU63SCL SDATESTVCC5.78AT2401/SOSDA2图7 I C接口电路3.3硬件开发工具ORCAD9.2简介ORCAD9.2是一款功能强大的EDA (Elect
23、ronic Design Automation电子设计自动化)工具。它主要有 3 大基本的功能。即 Capture CIS,PSpice,Layout Plus。在设计过程中,我们用Capture CIS进行原理图的绘制,用PSpice进行电路仿真与分析,用Layout Plus进行PCB的设计。4嵌入式系统软件开发4.1嵌入式系统软件的组成嵌入式系统的软件通常包括了以下几个部分:1初始化引导代码 2板级支持包3嵌入式操作系统4网络协议栈5应用软件6图形用户界面GUI(1 )初始化引导代码初始化引导代码是任何嵌入式系统上电复位后第一个执行的代码。板级支持包操作系统提供商为了解决硬件平台的差异性
24、, 通常把操作系统的共性部分利用标准的 C语言实现, 把依赖于硬件的部分提供给用户进行编写代码,操作系统规定了一个标准的规范, 用户编写的这些代码为用户的定制硬件和操作系统之间提供了一个接口和支持平台,这一部分代码称为板级支持包。(3 )嵌入式操作系统操作系统是嵌入式系统的一个重要的组成部分,特别是对于复杂的嵌入式系统的开发。 嵌入式操作系统位于板级支持包和应用软件之间,应用软件开发调用操作系统功能,操作系统的功能以API的形式提供。(4)网络协议栈协议栈对于具有网络工能的嵌入式产品是必要的。目前嵌入式协议栈的提供有两种方式。一种是独立的第三方协议栈产品,一种是嵌入式操作系统的提供商提供的协议
25、栈产品。(5 )应用软件嵌入式系统的应用软件一般需要自主开发,不同的嵌入式系统的应用软件各具特色功能。(6)图形用户界面GUI对于大多数嵌入式系统,图形用户界面是必需的。GU运行在嵌入式操作系统之上,用户开发与用户交互的应用软件通过 GUI的功能调用一实现。基于嵌入式操作系统的嵌入式系统软件结构如下图:4.2嵌入式系统软件运行流程(1 )从引导程序入口开始。(2)复位向量入口,此时中断是禁止的。(3 )设置处理器的工作模式,通常使用复位时的默认模式。(4)设置RAM和ROM勺工作参数,包括 DRAM勺刷新参数、地址空间分配等,至此嵌入式系统的 处理器和存储器子系统达到运行状态。(5)设置操作系
26、统运行所需要的数据段、堆栈空间等。(6)设置中断向量,中断向量的设置根据需要进行,也可以在其他的时间设置,但是一定要在中 断允许之前完成。(7)操作系统的初始化。(8 )进入用户的应用。到这里开始执行用户的应用程序代码。4.3 LPC2114的启动代码一般在32位ARM应用系统中,软件大多数采用C语言进行编程,并且以嵌入式操作系统为开发平台, 这样就大大提高了开发效率及软件性能。为了能够进行系统初始化, 采用一个汇编文件作为启动代码是常用的做法,它可以实现堆栈初始化、中断系统初始化、I/O初始化外围初始化以及地址重映射等操作。(1)文件的划分可将启动代码划分为 4个文件:Vectors.s、I
27、nit.s 、Target.c和Target.h 。 Vectors.s 包含异常 向量表堆栈初始化及中断服务程序与C程序的接口,可根据需要修改。 Ini t.s包含系统初始化代码,并跳转到ADS提供的初始化代码,一般无需改动。而 Target.s和Target.h包含目标板特殊的代码,包 括异常处理程序和目标板初始化程序,可根据程序的需要修改。这样做的目的是为了尽量减少汇编代码,同时把不需要修改的代码独立出来以减少错误改动。(2)异常向量表ARM处理器核支持7种类型的异常。异异常是由内部或外部源产生的,以引起处理器的一个事件。常出现后,CPU虽制从异常类型对应的固定存储地址开始执行程序。这个
28、固定的地址称为异常向量。异常向量表的代码如程序1。这段代码位于文件Vector.s中。程序1异常向量表LDR PC,ResetAddr(1)LDR PC,U ndefi nedAddrLDR PC,SWI-Addr(3)LDR PC,PrefetchAddr(4)LDR PC,DataAbortAddrDCD OxB9205f80(6)LDR PC,PC,#-OxffO(7)LDR PC,FIQ-Addr(8)VectorsResetAddr DCD Reset(9)Un defi nedAddr DCD Un defi ned(10)SWI-Addr DCD SoftwareI nterru
29、pt(11)PrefetchAddr DCD PrefetchAbort(12)DataAbortAddr DCD DataAbort(13) TOC o 1-5 h z Nouse DCD 0(14)IRQ-AddrDCD IRQ-Ha ndler(15)FIQ-AddrDCD FIQ-Ha ndler(16)向量从上到下依次为复位、未定义指令异常、软件中断、预取指令中止、预取数据中止、保留的异常IRQ和FIQ。系统初始化代码由于LPC2114微控制器的存储系统比较简单,所以系统初始化代码也比较简单。这段代码位于文件 Ini t.s 中。程序2系统初始化代码ResetBLIni tStack
30、(1)BLTargetResetI nit(2)B_mai n(3)由文件Vector.s程序清单可知,在芯片复位时程序会跳转到标号Reset处。程序首先调用InitStack初始化各种模式的堆栈,然后调用TargetResetInit 对系统进行基本的初始化,最后跳转到 ADS提供的启动代码main。main是ADS提供的启动代码起始位置,它初始化库并最终引导CPUS入mian函数。初始化CPU堆栈初始化CPUt栈In itStackMOVR0, LR;设置管理模式堆栈MSRCPSR_c, #0 xd3LDRSP, StackSvc ;设置中断模式堆栈MSRCPSR_c, #0 xd2LDR
31、SP, StackIrq ;设置快速中断模式堆栈MSRCPSR_c, #0 xd1LDRSP, StackFiq ;设置中止模式堆栈MSRCPSR_c, #0 xd7LDRSP, StackAbt ;设置未定义模式堆栈MSRCPSR_c, #0 xdbLDRSP, StackU nd;设置系统模式堆栈MSR CPSR_c, #0 xdfLDR SP, StackUsrMOV PC, ROStackUsrDCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4StackSvcDCD SvcStackSpace + (SVC_STACK_LEGTH - 1) *
32、4StackIrqDCD IrqStackSpace + (IRQ_STACK_LEGTH - 1) * 4StackFiqDCD FiqStackSpace + (FIQ_STACK_LEGTH - 1) * 4StackAbtDCD AbtStackSpace + (ABT_STACK_LEGTH - 1) * 4Stack UndDCD Un dtStackSpace +(UND_STACK_LEGTH - 1) * 4;/* 分配堆栈空间*/AREA MyStacks, DATA, NOINIT, ALIGN=2UsrStackSpaceSPACEUSR_STACK_LEGTH * 4
33、 ;用户(系统)模式堆栈空间SvcStackSpaceSPACESVC_STACK_LEGTH * 4 ;管理模式堆栈空间IrqStackSpaceSPACEIRQ_STACK_LEGTH * 4 ;中断模式堆栈空间FiqStackSpaceSPACEFIQ_STACK_LEGTH * 4 ;快速中断模式堆栈空间AbtStackSpaceSPACEABT_STACK_LEGTH * 4 ;中止义模式堆栈空间Un dtStackSpaceSPACEUND_STACK_LEGTH * 4 ;未定义模式堆栈因为程序需要切换模式,而且程序退出时CPU勺模式已经不再是管理模式而是系统模式,LR已经不再保
34、存返回程序地址,所以程序首先把返回地址保持到R0中,同时使用R0返回。然后程序把处理器模式转化为管理模式,并设置管理模式的堆栈指针。其中,变量StackSvc保存着管理模式的堆栈指针的初始值,SvcStackSpace是分配给管理模式的堆栈空间的开始地址,而SVCSTACC LEGTI是用户定义的常量,用于设置管理模式的堆栈空间的大小。程序使用同样的方法设置IRQ模式堆栈指针、FIQ模式堆栈指针、中止模式堆栈指针、未定义模式堆栈指针和系统模式堆栈指针。设置CPU!栈大小的代码见程序清单 6,这部分代码在文件 Vectors的开始处,可以根据需要改变它。程序4设置CPU!栈大小USR_STACK
35、_LEGTH EQU 64SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ STACK LEGTH EQU 64ABT_STACK_LEGTH EQU0UND_STACK_LEGTH EQU0系统基本初始化为了使系统基本能够工作,必须在进入main()函数前对系统进行一些基本的初始化工作,这些工作TargetResetInit()完成。见程序5,这部分代码在target.c中定义,可根据需要修改。程序 5 TargetResetInit函数void TargetReset In it(void)/*设置系统各部分时钟*/PLLCON = 1;#if
36、(Fcclk / 4) / Fpclk) = 1VPBDIV = 0;#en dif#if (Fcclk / 4) / Fpclk) = 2VPBDIV = 2;#en dif#if (Fcclk / 4) / Fpclk) = 4VPBDIV = 1;#en dif#if (Fcco / Fcclk) = 2PLLCFG = (Fcclk / Fosc) - 1) | (0 5);#en dif#if (Fcco / Fcclk) = 4PLLCFG = (Fcclk / Fosc) - 1) | (1 5);#en dif#if (Fcco / Fcclk) = 8PLLCFG = (Fc
37、clk / Fosc) - 1) | (2 5);#en dif#if (Fcco / Fcclk) = 16PLLCFG = (Fcclk / Fosc) - 1) | (3 5);#en difPLLFEED = Oxaa;PLLFEED = 0 x55;while(PLLSTAT & (1 10) = 0);PLLCON = 3;PLLFEED = 0 xaa;PLLFEED = 0 x55;/*设置存储器加速模块 */MAMCR = 2;#if Fcclk 20000000MAMTIM = 1;#else#if Fcclk 40000000MAMTIM = 2;#elseMAMTIM
38、= 3;#en dif#en dif/* 初始化VIC */VICI ntEn Clr = 0 xffffffff;VICVectAddr = 0;VICI ntSelect = 0;时钟是芯片各部分正常工作的基础,虽然时钟可以在任何时候设置,但为了避免混乱,最好在进入main()函数前设置。这段代码使用友好的接口正确地设置系统各部分时钟,设置方法是在系统配置文件con fig.h中定义各部分的时钟,见程序6。程序6系统时钟设置/*系统设置,Fosc、Fcclk、Fcco、Fpclk必须定义*/#defi ne Fosc11059200/晶振频率,10 25MHz#defi ne Fcclk(
39、Fosc*4)/系统频率#defi ne Fcco(Fcclk*4)CCO频率#defi ne Fpclk(Fcclk/4)VPB时钟频率编写好启动代码,完成烧录之后,下一步要做的工作就是操作系统的移植,本系统我们采用的c/os-n实时操作系统,下一节,我们将对卩c/os-n进行详细介绍。4.4 I c/os- n 简介卩C/OS- n读作“ micro C O S 2 ”,意为“微控制器操作系统版本 2”。卩C/OS- n是著名的、源 码公开的内核,可用于各类 8位、16位和32位单片机或DSP从卩C/OS算起,该内核已有10余年的应用 史,在诸多领域得到广泛应用。卩C/OS-n是一个完整的
40、、可移植的、可固化的、可剪裁的占先式实时多任务内核。卩C/OS- n是用ANSI的C语言编写的,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。至今,从8位到64位,卩C/OS- n已在超过40种不同架构的微处理器上运行。卩c/os- n的特点:公开源代码源代码是公开的。可移植性(Portable )绝大部分卩C/OS- n的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得卩C/OS- n便于移植到其他微处理器上。可固化(ROMmabie卩C/OS-n是为嵌入式应用而设计的,这就意味着,只要有固化手段(c编译、连接
41、、下载和固化),卩c/os- n可以嵌入到产品中成为产品的一部分。可裁剪(Scalable )卩c/os-n使用条件编译实现可剪裁。用户程序可以只编译自己需要的卩c/os- n的功能,而不编译不需要的功能,以减少 卩c/os-n对代码空间和数据空间的占用。占先式(Preemptive )卩c/os-n是完全占先式的实时内核。这意味着卩c/os- n总是运行就绪条件下优先级最高的任务。大多数商业内核也是占先式的,卩c/os- n在性能上和它们类似。多任务卩C/OS- n可以管理64个任务。(7 )可确定性绝大多数卩c/os- n的函数调用与服务的执行时间具有可确定性。也就是说,用户对卩c/osn
42、的函数调用与服务的执行时间是可知的。任务栈卩c/os- n的每个任务有自己单独的栈空间。使用卩c/os- n的栈空间校验函数,可以确定每个任务到底需要多少栈空间。(9 )系统服务卩c/os-n提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放 和时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性卩C/OS- n是基于卩C/OS的,卩C/OS自1992年以来已经有好几百个商业应用。其质量已得到认证,可以在任何应用中使用。4.5选择卩C/OS- n
43、的原因在开发嵌入式系统时,一般选择基于ARM和卩C/OS- n的嵌入式开发平台,因为 ARM微处理器具有处理速度快,超低功耗,价格低廉,应用前景广泛等优点。将卩C/OS- n移植到ARM系统之后,可以充分结合两者的优势。如果一个程序在一个环境里能工作,我们经常希望把它移植到另一个编译系统、处理器或者操作系统上,这就是移植技术。移植技术可以使一种特定的技术在更加广泛的范围使用,使软件使用更加灵活,不局限于某一条件。卩C/OS-n是由Jean J.Labrosse 先生编写的完整的可移植、固化、裁剪的占先式实时多任务内核。卩C/OS-n的源代码完全开放,这是其他商业实时内核无法比拟的。它是针对嵌入
44、式应用设计的,在设计之初就充分考虑了可移植性,它的大部分代码都是用可 移植性的ANSIC C编写的。卩C/OS- n可以移植到从8位到64位的不同类型、不同规模的的嵌入式系统,并能在大部分的8位、16位、32位,甚至64位的微处理器和DSPh运行。由于 卩C/OS- n是一个实时操作系统,所以如 果将它嵌入到ARM处理器上,就能进一步简化 AR啲开发。鉴于本文篇幅所限,关于操作系统移植部分请读者参阅相关资料。4.6应用程序开发移植操作系统之后,就可以进用应用程序的开发了。根据系统开发要求以及系统硬件结构,编了 如下程序:键盘输入控制程序;中断程序;定时器控制程序:定时控制 LED;4.6.1
45、键盘输入控制程序流程图如图8所示,图8键盘输入控制程序流程图GPIO是一个双向的I/O 口,内部无上拉电阻,所以用作键盘输入时,要加上上拉电阻。 进行GPIO输入时,先要设置IODIR使口线为输入方式,然后读取IOPIN的值即可。程序是使用P0.25 口为一位按键输入,每一次有效按键即对LED4进行取反控制。因为按键会出现抖动,如果不消除抖动,会出现误认抖动为有键按下,所以必须去抖。因此,在程序当中,编写了去抖动程序。void WaitKay(void) un it32 I;等待KEY键按下延时去抖while while(IOPIN&KEY1)!=0); /for(i=0;i/、/等待按键/延
46、时去抖等待键释放T0TCR=Ox03; /T0TCR=Ox01;启动并复位T0TC程序流程图如下:改变制变空比图14定时器控制程序流程图5系统调试5.1程序调试在本系统的开发过程中,所有代码均使用ADS1.2进行调试。AD麋成开发环境是AR公司推出的ARM核微控制器集成开发工具,英文全称为ARMDeveloper Suite,成熟版本为ADS1.2。ADS1.2支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAGM件仿真调试,支持汇编语言、C、C+源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、Windows XP、Windows 2000以及RedHatL
47、inux上运行。5.1.1 CodeWarrior IDE集成开发环境和AXD调试器说明 CodeWarrior IDE 简介ADS 1.2使用了 CodeWarrior IDE集成开发环境,并集成了 ARMC编器、AR啲C/C+编译器、Thumb 的C/C+编译器、ARIM1接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。 CodeWarrior IDE主窗口如图15所示:etrowerks Codetfarri or for ABN Developer Suite vl. 2-InlxlFil* EAi t Vi tw Search Pr
48、oj set Bebug齒已曲切iX 包-JPl X|0 EbugRL、b ” _ K 回* cf pFath: D: I. . . text2. s ilsLink Or der | Tareets |COUN EQU OxcOOOOOOSTARTAREA ENTRY CODES 2LDPMOVSTRExample2,CODE,READONLY.texlZ s|LOOPLDLDADCMMOSTuHH RD p VRKI,=COUNRO,RllRL.=COUNRO,RlBO,RO,#1RO,#10RO,#0 RO,Rll1 file图 15 CodeWarrior IDE 主窗口(2) AXD
49、调试器简介AXD调试器为AR矿展调试器(即ARMeXtended Debugger),包括ADW/AD的所有特性,支持硬件仿真和软件仿真(ARMulator) 。 AX能够装载映像文件到目标内存,具有单步、全速和断点等调试功能, 可以观察变量、寄存器和内存的数据等等。AXD调试器主窗口如图16所示:即AXD-|n|x|ile Search Frocsscr ViSystem Vi evs Execute Opti ons Window JfelpAREA ExaikpleZ, CODEREADOUI EMTRYC0DE32Jgi|圈 |冏 | | |負|圖| | _ | | | | 同阖| |
50、向| Fil&sClassb,* AEN7TDMI - 3: Mnstructi onltext2, sep E3 D: M ntiuctionl | nstructiorilCOUNEQU OxcOQOOOOTart-6STARTLDRR1,=COUU7MOVROO6STRR0JR191011LOOPLDRRlCOUN12LDRRO;R113ADDR0,R0,#l345System Outpnt fflonitorRM Log j Ikbug Log jnFor Help press FlRimning Im ageLineCol J图16 AXD调试器主窗口5.1.2 工程的编辑(1)建立
51、工程点击 WINDOWS乍系统的【开始-【程序-【ARM Developer Suite v1.2-【CodeWarriorfor ARMDeveloper Suite 】起动 Metrowerks CodeWarrior,或双击CodeWarriorfor ARMDeveloperSuite ”快捷方式起动。点击【File】菜单,选择【New-即弹出NeW寸话框,如图17所示。选择工程模板为 ARM可执行映象(ARM Executable Image )或 Thumb可执行映象(Thumb Executable Image),或 Thumb ARM交织 映象(Thumb ARMnterwor
52、king Image),然后在【Location 项选择工程存放路径, 并在【Project name 项输入工程名称,点击【确定按钮即可建立相应工程,工程文件名后缀为mcp.(2)建立文件建立一个文本文件,以便输入程序。点击“New Text File ”图标按钮,如图18所示。图18建立文本文件然后在新建的文件中编写程序,点击“Save”图标按钮将文件存盘(或从【File】菜单选择【Save】),输入文件全名,如text2.s 。注意,请将文件保存到相应工程的目录下,以便于管理和查找。当然, 也可以NeW寸话框选择【File】页来建立源文件,如图 35所示,或使用其它文本编辑器建立或编辑源
53、 文件。添加文件到工程在工程窗口中【Files】页空白处右击鼠标,弹出浮动菜单,选择“Add Files”即可弹出“Select files to add ”对话框,选择相应的源文件(可按着Ctrl键一次选择多个文件),点击【打开】按钮即可。另外,也可以在【Project】菜单中选择【Add Files】来添加源文件,或使用New对话框选择【File】页来建立源文件时选择加入工程(即选中“ Add to Project ”项)。(4)编译连接工程如图19所示为工程窗口中的图标按钮,通过这些图标按钮,可以快速的进行工程设置、编译连接、启动调试等等(在不同的菜单项上可以分别找到对应的菜单命令)。它
54、们从左至右分别为:DebugRel Sett in gs 工程设置,如地址设置、输出文件设置、编译选项等,其中DebugRel为当前的生成目标(target system) 。Synchronize Modificati on Dates冋步修改日期,检查工程中每个文件的修改日期,若发现有 新(如使用其它编辑器编辑源文件),则在Touch栏标记“2”。Make编译连接(快捷键为F7)。Debug启动AXDS行调试(快捷键为F5)。Run启动AXDS行调试,并直接运行程序。Project In spector工程检查,查看和配置工程中源文件的信息。3涵&朱存E图19编译连接工程图 20 Debu
55、gRel Sett in gs窗体点击DebugRel Settings”图标按钮,即可进行工程的地址设置、输出文件设置、编译选项等,如图37所示。在ARM Linker ”对话框设置连接地址,在Language Settings ”中设置各编译器的编译选项。对于简单的软件调试,可以不进行连接地址的设置,直接点击工程窗口的“MakW图标按钮,即可完成编译连接。若编译出错,会有相应的出错提示,双击出错提示行信息,编辑窗即会 使用光标指出当前出错的源代码行,编译连接输出窗口如图所示。同样,可以在【Project】菜单中找到相应的命令。J Errors & Warnings-! x|Errors a
56、nd warning.ImagecomponentCodeRO DataZI DataDebug40192ObjecLifersCodeDebug*h f tV. 回 T ft T Path:Line 1 Col 1图21调试信息窗口图 22 Touch 栏如图22所示,Touch栏用于标记文件是否已编译,若打上“V”则表明对应文件需要重新编译。可以通过单击该栏位置来设置/取消符号“V”,或将工程目录下的*.tdt文件删除也可以使整个工程源文件均打上“V”。5.1.3 工程的调试(1)选择调试目标图23选择调试目标当工程编译连接通过后,在工程窗口中点击“Debug”图标按钮,即可启动 AXD进
57、行调试(也可以通过【开始】菜单起动AXD)。点击菜单【Options】选择【Configure Target】,即弹出Choose Target 窗口,如图23所示:在没有添加其它仿真驱动程序前, Target项中只有两项,分别为 ADP(JTAG硬件仿 真)和ARMUL软件仿真)。选择仿真驱动程序后,点击【File】选择【Load Image】加载ELF格式的可执行文件,即*.axf 文件。说明:当工程编译连接通过后,在“工程名工程名当前的生成目标”目录下就会生成一个*.axf调试文件。比如工程 TEST当前的生成目标 Debug,编译连接通过后,则 在TESTTEST_DataDebug
58、目录下生成 text2.axf 文件。(2)调试工具条AXD!行调试工具条如图24所示,调试观察窗口工具条如图 25所示,文件操作工具条如图26所示。Fl g| a I图24调试工具条全速运行(Go)團停止运行(Stop)单步运行(Step In),与Step命令不同之处在于对函数调用语句,Step In命令将进入该函数。?1单步运行(Step),每次执行一条语句,这时函数调用将被作为一条语句执行。单步运行(Step Out),执行完当前被调用的函数,停止在函数调用的下一条语句。卫运行到光标(Run To Cursor),运行程序直到当前光标所在行时停止。设置断点(Toggle BreakPo
59、int)ElHlEllBl 剧國固 1图25调试观察窗口工具条打开奇存器窗口 (Processor Registers)H)0打开观察窗口 (Processor Watch) 打开变量观察窗口 (Co ntext Variable)打开存储器观察窗口 (Memory)打开反汇编窗口 (Disassembly)圍肅|创“| tf|lP|吃|图26文件操作工具条专1加载调试文件(Load Image)重新加载文件(Reload Current Image)。由于AXD没有复位命令,所以通常使用Reload实现复位(直接更改PC寄存器为零也能实现复位)。5.1.4 程序调试系统使用EasyJTAG仿
60、真器,将计算机并口与EasyJTAG仿真器连接,并将仿真器JTAG口接头插入目 标板的JTAG接口上,通过AXC软件的设置即可进行仿真调试。(1)仿真器设置在 AX调试环境,打开【Optio ns 】-【Con figure Target.】,弹出 Choose Target 窗口,在Target Environments ”框中选择EasyJTAG. ” 项。点击Configure ”按钮,进入EasyJTAGSetup ”设 置窗口,见图27。在ARMcore项中选取CPU类型,在Options ”项中选择Halt and reset。然后点 击“ OK,再点击“ OK,此时EasyJTA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年护理课件制作价格
- 2026年劳动合同改劳务派遣合同(1篇)
- 2026年口腔镶牙合同(1篇)
- 糖尿病心理护理与情绪管理
- 炎性肠病的饮食调理与营养支持
- 洋地黄治疗过程中的剂量调整
- 2026年夜总会收银系统更新合同协议
- 精神科患者康复护理
- 2026年借款合同跟抵押合同(1篇)
- 用图象表示变量之间的关系课件2025-2026学年北师大版七年级数学下册
- 厨房劳务承揽合同范本
- 上海会展展览行业劳动合同模板
- 下基层调研工作制度
- JJG 621-2012 液压千斤顶行业标准
- T-GDWCA 0035-2018 HDMI 连接线标准规范
- 小升初语文文言文阅读历年真题50题(含答案解析)
- 头晕教学讲解课件
- 电气化铁路有关人员电气安全规则2023年新版
- GB/T 23853-2022卤水碳酸锂
- GB/T 16823.3-2010紧固件扭矩-夹紧力试验
- FZ/T 74001-2020纺织品针织运动护具
评论
0/150
提交评论