微处理器的嵌入式系统研究论文_第1页
微处理器的嵌入式系统研究论文_第2页
微处理器的嵌入式系统研究论文_第3页
微处理器的嵌入式系统研究论文_第4页
微处理器的嵌入式系统研究论文_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1前言随着电子技术和计算机技术的进一步发展,嵌入式系统将起着越来越重要的作用,无论是民用还是军用随处都可以看见嵌入式系统的身影。在我国,到目前为止,在嵌入式系统研究方面,比起世界先进技术,落后了很多,基本上没多少核心技术,先进技术的知识产权都在国外。我国目前还没有生产出可以在市场上竞争的芯片,但是随着国家的重视和投资,以及不断吸收世界先进技术,在一些领域已经能够实现国产化了。但是这离许多世界先进技术还相差甚远。虽然现在经济全球化,但我们得到的只是一些落后的技术。因此必须培养自己的人才,研究核心技术,掌握核心技术。本次毕业设计的题目正是“基于LPC2114微处理器的嵌入式系统研究”。本次设计涉及

2、到了嵌入式系统开发的两个重要模块。包括硬件开发和应用程序开发。旨在研究嵌入式系统的开发流程,掌握嵌入式系统的基本开发方法,以及掌握一些硬件和软件的开发和调试工具。显然,本次设计的任务量是繁重的。再加上,以前我并没有接触过嵌入式系统这一领域。所以,对我来说,任务就更加繁重。但我相信,通过我的努力,一定可以完成本次设计的任务。并且为我以后的工作和学习打下坚实的基础。21 绪论1.1 嵌入式系统定义从应用来看:嵌入式系统是计算机的一种应用形式,通常是指嵌入到对象系统中的专用计算机系统。嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、能适应应用系统对功能、可靠性、成本、体积、功耗

3、严格要求的专用计算机系统。从组成来看:把基于处理器(通用处理器和嵌入式处理器)的设备称为计算机,把计算机分成两大部分,即通用计算机和嵌入式计算机。嵌入式系统也称为嵌入式计算机,因此嵌入式系统被定义为非通用计算机系统,即专用计算机系统。1.2 嵌入式系统的组成一个典型的嵌入式系统主要由以下几部分组成:(1 硬件系统硬件系统由嵌入式微处理器、外围接口硬件设备组成。(2 嵌入式操作系统在嵌入式操作系统中,一般都要采用嵌入式实时操作系统(RTOS ),RTOS 一般包括实时内核(kernel )及用户特定的板级支持包(BSP ),它介于硬件系统及上层软件之间,为所有的上层软件提供一个多任务的实时操作系

4、统环境及一整套API 。当然,在一些简单的嵌入式应用系统中,并没有操作系统的支持。应用程序直接对底层硬件进行访问。(3 应用软件应用软件是针对特定的应用需求开发的软件,完成嵌入式系统的主要功能。大部分嵌入式系统开发人员选用的软件开发模式是先在PC 机上编写软件,再进行软件的移植工作。1.3 嵌入式系统的应用领域嵌入式系统广泛地应用在人们生活、工作的各个方面。如:(1)消费类电子产品。如机顶盒,个人移动设备(PDA ),数码音频播放器(MP3),数码相机,视频游戏播放器,IP 电话等等。(2)办公自动化产品。如激光打印机,传真机,扫描仪,复印机和LCD 投影仪等。(3)控制系统与工业自动化。如智

5、能控制设备,智能仪表、现场总线设备,数控机床,机器人等。(4)生物医学系统。如X 光机的控制部件,EEG 和ECG 设备,CT ,超声检测设备,核磁共振设备等。(5)现场仪器。如测量温度,湿度,电压,电流的仪器。还有各种协议分析器,用于分析网络协3议。还有数字示波器等。(6)网络通信设备。调制解调器,数据通信基础设备,IP 网上多媒体设备,网关,路由器,加密解密设备,GPS 设备,交换机,网络接入盒等。(7)电信设备。电话交换机,终端适配器TA ,ATM 交换机,帧中继和一些通信设备。1.4 嵌入式系统的发展历史及趋势嵌入式系统的出现至今已经有30多年的历史了,嵌入式技术也历经了几个发展阶段。

6、第一阶段是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配合的功能。第二阶段是以嵌入式CPU 为基础、以简单操作系统为核心的嵌入式系统。第三阶段是以嵌入式操作系统为标志的嵌入式系统。第四阶段是以基于Internet 为标志的嵌入式系统,这是一个正在迅速发展的阶段。就嵌入式系统的而言,其发展趋势表现在如下几个方面。(1)开发平台的完备性嵌入式系统的开发是一项系统的工程,涉及到软件,硬件,系统集成等诸多方面。有的嵌入式厂商不公仅提供处理器,还提供完备的开发工具。其开发工具包括硬件工具和软件工具。(2)嵌入式系统的网络化网络化主要表现在在两个方面,一方面是嵌入式处理器集成了

7、网络接口,另一方面是嵌入式设备应用于网络环境中(3)系统的集成度的提高和性能指标的提高。未来的嵌入式产品,是软硬件高度集成的产品。这就要求设计者尽可能地提高系统的可靠性,降低系统的功耗,精简系统的内核,降低成本,对操作系统进行裁剪,用高效率的算法开发应用程序。(4)友好的人机界面大多数的嵌入式系统都与人进行交互,所以友好的人机界面是开发嵌入式系统的基本要求。随着嵌入式技术的发展,新的人机界面不断被开发出来,如手写输入技术,语音输入/输出技术,图像输出技术。1.5 ARM概述ARM (Advanced RISC Machines)是微处理器行业的一家知名企业,1991年ARM 公司成立于英国剑桥

8、。ARM 公司是专门从事基于RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM 公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。目前,总共有30多家半导体公司与ARM 签订了硬件技术使用许可协议,4其中包括Intel 、IBM 、LG 半导体、NEC 、SONY 、菲利浦和国民半导体这样的大公司,至于软件系统的合伙人,则包括微软、升阳和MRI 等一系列知名公司。基于ARM 技术的微处理器应用约占据了32位RISC 微处理

9、器75以上的市场份额,ARM 技术正在逐步渗入到我们生活的各个方面。ARM 架构是面向低预算市场设计的第一款RISC 微处理器。到目前为止,ARM 微处理器及技术的应用几乎已经深入到各个领域: 工业控制领域:作为32位的RISC 架构,基于ARM 核的微控制器芯片不断占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM 微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。 无线通讯领域:目前已有超过85%的无线通讯设备采用了ARM 技术, ARM以其高性能和低成本,在该领域的地位日益巩固。 网络应用:随着宽带技术的推广,采用ARM 技术的ADSL

10、 芯片正逐步获得竞争优势。此外,ARM 在语音及视频处理上进行了优化,并获得广泛支持,也对DSP 的应用领域提出了挑战。 消费类电子产品:ARM 技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。 成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM 技术。手机中的32位SIM 智能卡也采用了ARM 技术。除此以外,ARM 微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。 采用RISC 架构的ARM 微处理器一般具有如下特点: 体积小、低功耗、低成本、高性能; 支持Thumb (16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 大

11、量使用寄存器,指令执行速度更快; 大多数数据操作都在寄存器中完成; 寻址方式灵活简单,执行效率高; 指令长度固定;ARM 微处理器目前包括下面几个系列,以及其它厂商基于ARM 体系结构的处理器,除了具有ARM 体系结构的共同特点以外,每一个系列的ARM 微处理器都有各自的特点和应用领域。 ARM7系列 ARM9系列 ARM9E系列 ARM10E系列 SecurCore系列5 Inter的Xscale Inter的StrongARM其中,ARM7、ARM9、ARM9E 和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore 系列专门为安全要

12、求较高的应用而设计。ARM7微处理器系列:ARM7系列微处理器为低功耗的32位RISC 处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7微处理器系列具有如下特点: 具有嵌入式ICE RT 逻辑,调试开发方便。 极低的功耗,适合对功耗要求较高的应用,如便携式产品。 能够提供0.9MIPS/MHz的三级流水线结构。 代码密度高并兼容16位的Thumb 指令集。 对操作系统的支持广泛,包括Windows CE、Linux 、Palm OS等。 指令系统与ARM9系列、ARM9E 系列和ARM10E 系列兼容,便于用户的产品升级换代。 主频最高可达130MIPS ,高速的运算处理能力能胜任

13、绝大多数的复杂应用。ARM7系列微处理器的主要应用领域为:工业控制、Internet 设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。ARM7系列微处理器包括如下几种类型的核:ARM7TDMI 、ARM7TDMI-S 、ARM720T 、ARM7EJ 。其中,ARM7TMDI 是目前使用最广泛的32位嵌入式RISC 处理器,属低端ARM 处理器核。TDMI 的基本含义为:T : 支持16位压缩指令集Thumb ;D : 支持片上Debug ;M : 内嵌硬件乘法器(Multiplier )I : 嵌入式ICE ,支持片上断点和调试点;ARM 处理器共有37个寄存器,被分为若干个组

14、(BANK ),这些寄存器包括: 31个通用寄存器,包括程序计数器(PC 指针),均为32位的寄存器。 6个状态寄存器,用以标识CPU 的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。同时,ARM 处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。ARM 微处理器的在较新的体系结构中支持两种指令集:ARM 指令集和Th

15、umb 指令集。其中,ARM6指令为32位的长度,Thumb 指令为16位长度。Thumb 指令集为ARM 指令集的功能子集,但与等价的ARM 代码相比较,可节省3040以上的存储空间,同时具备32位代码的所有优点。ARM 的设计实现了非常小但高性能的结构。ARM 处理器结构的简单使ARM 的内核非常小,这样使器件的功耗也非常低。ARM 是精简指令集计算机(RISC,因为它集成了非常典型的RISC 结构特性: 一个大的、统一的寄存器文件; 加载存储结构,数据处理的操作只针对寄存器的内容,而不直接对存储器进行操作; 简单的寻址模式,所有加载存储的地址都只由寄存器的内容和指令域决定; 统一和固定长

16、度的指令域,简化了指令的译码。 每一条数据处理指令都对算术逻辑单元(ALU和移位器进行控制,以实现对ALU 和移位器的最大利用; 地址自动增加和自动减少的寻址模式实现了程序循环的优化; 多寄存器加载和存储指令实现了最大数据吞吐量; 所有指令的条件执行实现了最快速的代码执行。这些在基本RISC 结构上增强的特性使ARM 处理器在高性能、低代码规模、低功耗和小的硅片尺寸方面取得了良好的平衡。72 系统需求分析2.1 需求分析本次毕业设计的任务是基于LPC2114微处理器的嵌入式系统的开发,要求系统具有时钟电路,电源电路,复位电路,键盘电路,I C 接口电路,JTAG 接口电路。CPU 模块是系统中

17、最核心的部分,系统通过CPU 处理数据,控制系统中的其他模块,使其他模块根据系统发出的指令工作并且使各个部分协调工作。CPU 要正常工作,最基本的就是配置相应的时钟电路和电源电路。CPU 通过时钟信号的驱动,一步一步的控制程序执行。电源模块除了给CPU 提供电源外,同时给其它各功能模块也供电。 通过外部输入的5V 电压,在系统的滤波以及电压转换芯片后,得到内核及片内外设所需的工作电压1.8V 和I/O所需的工作电压3.3V 。复位电路为系统提供复位信号,以实现系统的初始化操作;当系统程序运行出错时或者操作错误使系统处于死锁状态时,为了摆脱困境,也需要复位信号将系统重新启动。键盘电路主要是通过按

18、键控制程序的执行,有时也作为参数实现一些简单的数据输入。 带有I C 接口电路的器件可十分方便地用来将一个或多个微控制器及外围器件构成系统。 仿真器接口用来对程序进行调试和固化。 2.2 系统总体设计根据要求设计的嵌入式系统的原理框图如图3.1所示: 22图1 系统原理框图8系统是通过模块化的设计方式来实现各个功能的,系统框图中包含了CPU 模块、电源模块、复位电路模块、系统仿真模块、键盘接口、I C 接口。293 系统硬件设计3.1 核心处理器LPC2114简介根据本系统的需求分析,从性能、功耗、价格等方面进行考虑,我们发现飞利蒲的LPC2114已完全能满足本系统的设计要求。所以我们采用LP

19、C2114作为核心处理器来进行开发。LPC2114 是基于一个支持实时仿真和跟踪的32位ARM7TDMI-S CPU ,并带有128 KB 的高速Flash 存储器,128位宽度的存储器接口和独特的加速结构,使32位代码能够在最大时钟速率下运行。对代码有严格控制的应用可使用16位Thumb 模式将代码规模降低超过30,而性能损失却很少。由于LPC2114具有非常小的尺寸和极低的功耗,它们非常适合于那些将小型化作为主要要求的应用,例如存储控制和POS 机。带有宽范围的串行通信接口、片内多达64KB 的SRAM ,由于具有大的缓冲区和强大的处理器能力,它们非常适合于通信网关和协议转换器、软件调制解

20、调器、声音识别以及低端的图像处理。而多个32位定时器、PWM 输出和32个GPIO ,使它们特别适用于工业控制和医疗系统。它的主要特性有:32位ARM7TDMI-S 核,超小LQFP64封装。 16 KB片内静态RAM 。128KB 片内Flash 程序存储器,128位宽度接口/加速器可实现高达60 MHz工作频率。 通过片内boot 装载程序实现在系统编程(ISP )和在应用编程(IAP )。512字节行编程时间为1ms 。单扇区或整片擦除时间为400ms 。Embedded ICE可实现断点和观察点。当使用片内RealMonitor 软件对前台任务进行调试时,中断服务程序可继续运行。嵌入式

21、跟踪宏单元(ETM )支持对执行代码进行无干扰的高速实时跟踪。 4路10位A/D转换器,转换时间低至2.44µs。2个32位定时器(带4路捕获和4路比较通道)、PWM 单元(6路输出)、实时时钟和看门狗。 多个串行接口,包括2个16C550工业标准UART 、高速I C 接口(400 kbit/s)和2个SPI 口。 通过片内锁相环(PLL )可实现最大为60MHz 的 CPU操作频率。 向量中断控制器。可配置优先级和向量地址。多达46个通用I/O口(可承受5V 电压),9个边沿或电平触发的外部中断引脚。 片内晶振频率范围:130 MHz。 2个低功耗模式:空闲和掉电。通过外部中断将

22、处理器从掉电模式中唤醒。210可通过个别使能/禁止外部功能来优化功耗。 双电源 CPU操作电压范围:1.651.95 V(1.8 V± 0.15 VLPC2114要使用两组电源,I/O口供电电源为3.3V ,内核及片内外设供电电源为1.8V ,所以系统设计为3.3V 应用系统。系统电源电路如图2所示: U5LT1085-12/TO220U6 LT1084-12/TO220图2 系统电源模块在系统中,复位电路主要完成系统上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC 电路构成,也可使用其他的相对较复杂,但功能更完善的电路。本系统采用简单的RC 复位电路,经使用证明,其

23、复位逻辑是可靠的。复位电路如图3所示:11 图3 系统复位电路本系统采用的低电平复位。当用户按下SW1时,C4两端的电荷被泻放掉,RESET 端输出为低电平。从而达到复位的目的。在系统上电时,电阻R1向电容C4充电,当C1两端的电压未达到高电平的门限电压时,RESET 输出为低电平,系统处于复位状态。而当C4两端达到高电平的门限电压时,RESET 为高电平,系统进入正常工作状态。LPC2114可使用外部晶振或外部时钟源,内部PLL 电路可调整系统时钟,使系统运行速度更快(CPU最大操作时钟为60MHz 。倘若不使用片内PLL 功能及ISP 下载功能,则外部晶振频率范围是1MHz 30MHz ,

24、外部时钟频率范围是1MHz 50MHz ;若使用了片内PLL 功能或ISP 下载功能,则外部晶振频率范围是10MHz 25MHz ,外部时钟频率范围是 10MHz 25MHz 。系统使用了外部11.0592MHz 晶振,电路如图4所示XTAL1图4 系统时钟电路12通过JTAG 接口,可对芯片内部的的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前JTAG 接口的连接有两种标准,即14针和20针。本系统采用的是20针的JTAG 仿真接口。标准的JTAG 接口是4线:TMS 、TCK 、TDI 、TDO ,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。 图4 系统

25、仿真电路LPC2114提供了32个可编程的I/O端口,用户可将每个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄存器控制。在该系统的设计中,采用通用I/O口动态扫描的方式,外扩4×4矩阵键盘,键盘扫描的工作原理比较简单,在此不作详述。 图6 系统键盘电路213I C 总线是一种用于IC 器件之间连接的二线制总线。它通过SDA (串地数据线)及SCL (串行时钟线)两线在连接到总线的器件之间传送信息,并根据地址识别每个器件。LPC2114内含一个I C 总线控制器,可方便地与各种带有I C 接口的器件相连。在该系统中,外扩一片AT24C01作为I C 存储器。AT24C

26、01提供128字节的EEPROM 存储空间,可用于存放少量在系统中掉电需要保存的数据。 2222U5图7 IC 接口电路3.3 硬件开发工具ORCAD9.2简介ORCAD9.2是一款功能强大的EDA (Electronic Design Automation 电子设计自动化)工具。它主要有3大基本的功能。即Capture CIS,PSpice,Layout Plus。在设计过程中,我们用Capture CIS 进行原理图的绘制,用PSpice 进行电路仿真与分析,用Layout Plus 进行PCB 的设计。2144 嵌入式系统软件开发4.1 嵌入式系统软件的组成嵌入式系统的软件通常包括了以下

27、几个部分: (1)初始化引导代码初始化引导代码是任何嵌入式系统上电复位后第一个执行的代码。 (2)板级支持包操作系统提供商为了解决硬件平台的差异性,通常把操作系统的共性部分利用标准的C 语言实现,把依赖于硬件的部分提供给用户进行编写代码,操作系统规定了一个标准的规范,用户编写的这些代码为用户的定制硬件和操作系统之间提供了一个接口和支持平台,这一部分代码称为板级支持包。 (3)嵌入式操作系统操作系统是嵌入式系统的一个重要的组成部分,特别是对于复杂的嵌入式系统的开发。嵌入式操作系统位于板级支持包和应用软件之间,应用软件开发调用操作系统功能,操作系统的功能以API 的形式提供。 (4)网络协议栈协议

28、栈对于具有网络工能的嵌入式产品是必要的。目前嵌入式协议栈的提供有两种方式。一种是独立的第三方协议栈产品,一种是嵌入式操作系统的提供商提供的协议栈产品。 (5)应用软件嵌入式系统的应用软件一般需要自主开发,不同的嵌入式系统的应用软件各具特色功能。 (6)图形用户界面GUI对于大多数嵌入式系统,图形用户界面是必需的。GUI 运行在嵌入式操作系统之上,用户开发与用户交互的应用软件通过GUI 的功能调用一实现。用户应用软件高层用户应用软件低层GUI协议设备驱动文件系统嵌入式操作系统(OS )板级支持包(BSP )初始化引导代码(Bootloader154.2 嵌入式系统软件运行流程 (1)从引导程序入

29、口开始。(2)复位向量入口,此时中断是禁止的。(3)设置处理器的工作模式,通常使用复位时的默认模式。(4)设置RAM 和ROM 的工作参数,包括DRAM 的刷新参数、地址空间分配等,至此嵌入式系统的处理器和存储器子系统达到运行状态。(5)设置操作系统运行所需要的数据段、堆栈空间等。(6)设置中断向量,中断向量的设置根据需要进行,也可以在其他的时间设置,但是一定要在中断允许之前完成。(7)操作系统的初始化。(8)进入用户的应用。到这里开始执行用户的应用程序代码。 4.3 LPC2114的启动代码一般在32位ARM 应用系统中,软件大多数采用C 语言进行编程,并且以嵌入式操作系统为开发平台,这样就

30、大大提高了开发效率及软件性能。为了能够进行系统初始化,采用一个汇编文件作为启动代码是常用的做法,它可以实现堆栈初始化、中断系统初始化、I/O初始化外围初始化以及地址重映射等操作。(1文件的划分可将启动代码划分为4个文件:Vectors.s 、Init.s 、Target.c 和Target.h 。Vectors.s 包含异常向量表堆栈初始化及中断服务程序与C 程序的接口,可根据需要修改。Init.s 包含系统初始化代码,并跳转到ADS 提供的初始化代码,一般无需改动。而Target.s 和Target.h 包含目标板特殊的代码,包括异常处理程序和目标板初始化程序,可根据程序的需要修改。这样做的

31、目的是为了尽量减少汇编代码,同时把不需要修改的代码独立出来以减少错误改动。 (2异常向量表异常是由内部或外部源产生的,以引起处理器的一个事件。ARM 处理器核支持7种类型的异常。异常出现后,CPU 强制从异常类型对应的固定存储地址开始执行程序。这个固定的地址称为异常向量。异常向量表的代码如程序1。这段代码位于文件Vector.s 中。 程序1 异常向量表 VectorsLDR PC,ResetAddr (1 LDR PC,UndefinedAddr (2 LDR PC,SWI-Addr (316LDR PC,PrefetchAddr (4LDR PC,DataAbortAddr (5DCD O

32、xB9205f80 (6LDR PC,PC,#-Oxff0 (7LDR PC,FIQ-Addr (8ResetAddr DCD Reset (9UndefinedAddr DCD Undefined (10SWI-Addr DCD SoftwareInterrupt (11PrefetchAddr DCD PrefetchAbort (12DataAbortAddr DCD DataAbort (13Nouse DCD 0 (14IRQ-Addr DCD IRQ-Handler (15FIQ-Addr DCD FIQ-Handler (16向量从上到下依次为复位、未定义指令异常、软件中断、预取

33、指令中止、预取数据中止、保留的异常IRQ 和FIQ 。(3系统初始化代码由于LPC2114微控制器的存储系统比较简单 ,所以系统初始化代码也比较简单。这段代码位于文件Init.s 中。程序2 系统初始化代码ResetBL InitStack (1)BL TargetResetInit (2)B _main (3)由文件Vector.s 程序清单可知,在芯片复位时程序会跳转到标号Reset 处。程序首先调用InitStack 初始化各种模式的堆栈, 然后调用TargetResetInit 对系统进行基本的初始化,最后跳转到ADS 提供的启动代码main 。main 是ADS 提供的启动代码起始位

34、置,它初始化库并最终引导CPU 进入mian 函数。(4初始化CPU 堆栈初始化CPU 堆栈InitStackMOV R0, LR ;设置管理模式堆栈17MSR CPSR_c, #0xd3LDR SP, StackSvc ;设置中断模式堆栈MSR CPSR_c, #0xd2LDR SP, StackIrq ;设置快速中断模式堆栈MSR CPSR_c, #0xd1LDR SP, StackFiq ;设置中止模式堆栈MSR CPSR_c, #0xd7LDR SP, StackAbt ;设置未定义模式堆栈MSR CPSR_c, #0xdbLDR SP, StackUnd ;设置系统模式堆栈MSR C

35、PSR_c, #0xdfLDR SP, StackUsrMOV PC, R0StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1 * 4StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1 * 4StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1 * 4StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1 * 4StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1

36、* 4StackUnd DCD UndtStackSpace +(UND_STACK_LEGTH - 1 * 4;/* 分配堆栈空间 */AREA MyStacks, DATA, NOINIT, ALIGN=2UsrStackSpace SPACE USR_STACK_LEGTH * 4 ;用户(系统)模式堆栈空间SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中断模式堆栈空间FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中

37、断模式堆栈空间AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈因为程序需要切换模式,而且程序退出时CPU 的模式已经不再是管理模式而是系统模式,LR 已经不再保存返回程序地址,所以程序首先把返回地址保持到R0中,同时使用R0返回。然后程序把处理器模式转化为管理模式,并设置管理模式的堆栈指针。其中,变量StackSvc 保存着管理模式的堆栈指针的初始值,SvcStackSpace 是分配给管理模式的堆栈空间的开始地址,而SVC18STACK LEG

38、TH 是用户定义的常量,用于设置管理模式的堆栈空间的大小。程序使用同样的方法设置IRQ 模式堆栈指针、FIQ 模式堆栈指针、中止模式堆栈指针、未定义模式堆栈指针和系统模式堆栈指针。设置CPU 堆栈大小的代码见程序清单6,这部分代码在文件Vectors 的开始处,可以根据需要改变它。程序4 设置CPU 堆栈大小USR_STACK_LEGTH EQU 64SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ_STACK_LEGTH EQU 64ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0(5系统基本初始化为了使系统基本

39、能够工作,必须在进入main(函数前对系统进行一些基本的初始化工作,这些工作TargetResetInit(完成。见程序5,这部分代码在target.c 中定义,可根据需要修改。程序5 TargetResetInit函数void TargetResetInit(void/* 设置系统各部分时钟 */PLLCON = 1;#if (Fcclk / 4 / Fpclk = 1VPBDIV = 0;#endif#if (Fcclk / 4 / Fpclk = 2VPBDIV = 2;#endif#if (Fcclk / 4 / Fpclk = 4VPBDIV = 1;#endif#if (Fcco

40、/ Fcclk = 2PLLCFG = (Fcclk / Fosc - 1 | (0 << 5;19#endif#if (Fcco / Fcclk = 4PLLCFG = (Fcclk / Fosc - 1 | (1 << 5;#endif#if (Fcco / Fcclk = 8PLLCFG = (Fcclk / Fosc - 1 | (2 << 5;#endif#if (Fcco / Fcclk = 16PLLCFG = (Fcclk / Fosc - 1 | (3 << 5;#endifPLLFEED = 0xaa;PLLFEED = 0x

41、55;while(PLLSTAT & (1 << 10 = 0;PLLCON = 3;PLLFEED = 0xaa;PLLFEED = 0x55; /* 设置存储器加速模块 */MAMCR = 2;#if Fcclk < 20000000MAMTIM = 1;#else#if Fcclk < 40000000MAMTIM = 2;#elseMAMTIM = 3;#endif#endif/* 初始化VIC */VICIntEnClr = 0xffffffff;VICVectAddr = 0;VICIntSelect = 0;20时钟是芯片各部分正常工作的基础,虽然

42、时钟可以在任何时候设置,但为了避免混乱,最好在进入main(函数前设置。这段代码使用友好的接口正确地设置系统各部分时钟,设置方法是在系统配置文件config.h 中定义各部分的时钟,见程序6。程序6 系统时钟设置/*系统设置,Fosc 、Fcclk 、Fcco 、Fpclk 必须定义*/#define Fosc 11059200 /晶振频率,1025MHz#define Fcclk (Fosc*4 /系统频率#define Fcco (Fcclk*4 /CCO频率#define Fpclk (Fcclk/4 /VPB时钟频率编写好启动代码,完成烧录之后,下一步要做的工作就是操作系统的移植,本系

43、统我们采用的C/OS-实时操作系统,下一节,我们将对C/OS-进行详细介绍。4.4 C/OS-简介C/OS-读作“micro C O S 2”,意为“微控制器操作系统版本2”。C/OS-是著名的、源码公开的内核,可用于各类8位、16位和32位单片机或DSP 。从C/OS算起,该内核已有10余年的应用史,在诸多领域得到广泛应用。C/OS-是一个完整的、可移植的、可固化的、可剪裁的占先式实时多任务内核。C/OS-是用ANSI 的C 语言编写的,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。至今,从8位到64位,C/OS-已在超过40种不同架构的微处理器上运行。C/OS-的特点:(1)公开

44、源代码源代码是公开的。(2)可移植性(Portable )绝大部分C/OS-的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得C/OS-便于移植到其他微处理器上。(3)可固化(ROMmable )C/OS-是为嵌入式应用而设计的,这就意味着,只要有固化手段(C 编译、连接、下载和固化),C/OS-可以嵌入到产品中成为产品的一部分。(4)可裁剪(Scalable )C/OS-使用条件编译实现可剪裁。用户程序可以只编译自己需要的C/OS-的功能,而不编译不需要的功能,以减少C/OS-对代码空间和数据空间的占用。(5)占先式(P

45、reemptive )21C/OS-是完全占先式的实时内核。这意味着C/OS-总是运行就绪条件下优先级最高的任务。大多数商业内核也是占先式的,C/OS-在性能上和它们类似。(6)多任务C/OS-可以管理64个任务。(7)可确定性绝大多数C/OS-的函数调用与服务的执行时间具有可确定性。也就是说,用户对C/OS的函数调用与服务的执行时间是可知的。(8)任务栈C/OS-的每个任务有自己单独的栈空间。使用C/OS-的栈空间校验函数,可以确定每个任务到底需要多少栈空间。(9)系统服务C/OS-提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放和时间相关函数等。(10)中断管理中

46、断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。(11)稳定性与可靠性C/OS-是基于C/OS的,C/OS自1992年以来已经有好几百个商业应用。其质量已得到认证,可以在任何应用中使用。4.5 选择C/OS-的原因在开发嵌入式系统时,一般选择基于ARM 和C/OS-的嵌入式开发平台,因为ARM 微处理器具有处理速度快,超低功耗,价格低廉,应用前景广泛等优点。(1)将C/OS-移植到ARM 系统之后,可以充分结合两者的优势。如果一个程序在一个环境里能工作,我们经常希望把它移植到另一个编译系统、处理器或者操作

47、系统上,这就是移植技术。移植技术可以使一种特定的技术在更加广泛的范围使用,使软件使用更加灵活,不局限于某一条件。C/OS-是由Jean J.Labrosse 先生编写的完整的可移植、固化、裁剪的占先式实时多任务内核。C/OS-的源代码完全开放,这是其他商业实时内核无法比拟的。(2)它是针对嵌入式应用设计的,在设计之初就充分考虑了可移植性,它的大部分代码都是用可移植性的ANSIC C编写的。(3)C/OS-可以移植到从8位到64位的不同类型、不同规模的的嵌入式系统,并能在大部分的8位、16位、32位,甚至64位的微处理器和DSP 上运行。由于C/OS-是一个实时操作系统,所以如22果将它嵌入到A

48、RM 处理器上,就能进一步简化ARM 的开发。鉴于本文篇幅所限,关于操作系统移植部分请读者参阅相关资料。4.6 应用程序开发移植操作系统之后,就可以进用应用程序的开发了。根据系统开发要求以及系统硬件结构,编了如下程序: 键盘输入控制程序; 中断程序; 定时器控制程序:定时控制LED ;程序流程图如图8所示, 图8 键盘输入控制程序流程图23GPIO 是一个双向的I/O口,内部无上拉电阻,所以用作键盘输入时,要加上上拉电阻。进行GPIO 输入时,先要设置IODIR 使口线为输入方式,然后读取IOPIN 的值即可。程序是使用P0.25口为一位按键输入,每一次有效按键即对LED4进行取反控制。因为按

49、键会出现抖动,如果不消除抖动,会出现误认抖动为有键按下,所以必须去抖。因此,在程序当中,编写了去抖动程序。void WaitKay(void unit32 I;while(1 while(IOPIN&KEY1!=0; /等待KEY1键按下for(i=0;i<50000;i+; /延时去抖if(IOPIN&KEY1=0break;while(IOPIN&KEY1=0; /等待KEY1键放开按键过程如图9所示:无按键 键按下后 松开后前沿抖动 稳定期图9 按键过程 后沿抖动LPC2114中断管理是由向量中断控制器(VIC操作的,向量中断控制器具有32个中断请求输入,可

50、将它们设置为FIQ 、向量IRQ 和非向量IRQ ,通过编程不同外设的向量IRQ 中断优先级,可以实现动态分配调整。FIQ 中断优先级最高,向量IRQ 具有中等优先级,非向量IRQ 的优先级最低。VIC 基本操作方法:设置IRQ/FIQ中断,若是IRQ 中断,则可以设置为向量中断并分配中断优先级,否则为非向量IRQ 。然后可以设置中断允许,以及向量中断对应地址或非向量默认地址。当有中断后,若是IRQ 中断,则可以读取向量地址寄存器,然后跳转到相应代码。当要退出中断时,对向量地址寄存器写0,通知VIC 中断结束。当发生中断时,处理器将会切换处理器模式,同时相关的寄存器也将会映射。24LPC211

51、4具有3个外部中断输入,这3个外部中断属电平中断方式,可以用来唤醒掉电的处理器。 EXINT 寄存器为中断标志寄存器,低3位与外部中断引脚EINT2、EINT1、EINT0对应,为1时表示外部中断有效。可以通过软件向其写入清零标志。外部中断将会连接到VIC ,使用向量中断控制器进行管理。EXTWAKE 寄存器外部中断唤醒掉电的允许寄存器,为1时允许其唤醒掉电,否则不允许该中断唤醒CPU 。在没有时钟源的情况下仍能工作的唯一功能是外部中断EINT0、EINT1、EINT2,即只有他们能唤醒掉电的CPU 。使用中断向量控制器的向量IRQ 功能,实现EINT0、EINT1中断处理。首先把EINT0和

52、EINT1设置为向量IRQ 中断,分配优先级并使能向量,然后设置相关向量地址寄存器及中断使能;当有IRQ 中断时,VIC 会将中断向量地址放入向量地址寄存器VICVectAddr ,使中断处理能够快速的找到相应的向量,进行IRQ 处理;在IRQ 处理过程中,IRQ 中断默认是被禁止的,如有需要可以设置IRQ 中断允许,在处理完毕后写向量地址寄存器为0,通知VIC 中断处理结束。中断程序流程图如图10所示: 图10 中断程序流程图25在主程序当中,应对外部中断初始化,对各个要用到的中断寄存器进行设置。例如:VICIntSelect=Ox00000000; /设置所有通道为IRQ 中断VICVec

53、tCntl0=Ox2e; /EINT0通道分配到IRQ Slot 0,即优先级最高VICVectAddr0=(intIRQ_Eint0; /设置EINT0向量地址VICVectCntl1=Ox2F;VICVectAddr1=(intIRQ_Eint1;VICIntEnable=Ox0000C0000; /使能外部中断标志EXITINT=Ox07; /清除外部中断标志LPC2114具有两个32位定时器,分别具有4路捕获、4路比较匹配并输出电路。定时器是增量计数的,但上溢时不会产生中断标志,而只能通过比较匹配或捕获输入产生中断标志。两个定时器具有同样的寄存器,只是地址不同而已。如图11所示,32位

54、定时器TC 的计数频率由pclk 经过PR 进行分频控制得到,而定时器的启动/停止、计数复位有TCR 控制。当有捕获事件或比较匹配事件发生时,IR 会设置相关中断标志(因为不是定时器溢出而产生中断,所以图中采用虚线连接),若已打开中断允许(VIC ), 则会产生中断。当然,预分频控制器PR 只是控制分频数,而其对应的分频计数器是PC ,但用户无需操作PC 寄存器。图11 基本定时器的寄存器功能框图如图12所示,定时器比较匹配由控制寄存器MCR 进行匹配操作设置。 26 图12 定时器的比较匹配寄存器功能框图寄存器则为4路比较匹配通道的比较值。当比较匹配时,将会按照MCR 设置的方法产生中断或复

55、位TC 等,而且EMR 可以控制比较匹配输出,可匹配输出高电平、低电平以及电平翻转等。如图13所示,在定时器TC 运行过程中,当有捕获触发信号产生时,捕获电路将会立即把当时的定时器指TC 复制到对应触发通道的捕获寄存器中。捕获可以设置为上升沿触发、下降沿触发或双边沿触发,并可设置为捕获中断,这些设置是通过CCR 完成的。图13 定时器的捕获寄存器功能框图定时器基本操作方法如下:计算定时器的时钟频率,设置PR 寄存器进行分频操作;设置比较匹配通道的初值及其工作模式,若是使用捕获功能,则设置捕获方式; 若使用定时器的相关中断,则设置VIC ,使能中断; 设置TCR ,启动定时器。 定时器计数时钟频

56、率计算如下: 27计数时钟频率Fpclk/(N+1 其中:N 为PR 的值。 定时器定时控制应用如下:采用11.059 2 MHz晶振,使用PLL,Fcclk Fosc ×411.059 2 MHz×444.236 8MHz,外围时钟使用复位默认得Fpclk Fcclk/444.236 8 MHz/4=11.059 2 MHz,定时器进行100分频(即PR 99),实现0.5S 定时,定时控制LED 点亮或熄灭。在程序中,必须初始化定时器,如果两个定时器都用到,那么两个都要初始化。下面是定时器0的一个初始化程序:void TargetInit(void /*初始化定时器0,实现0.5s 定时Fcclk=Fosc×4=11.059 2 MHz×444.0236 8MHz Fpclk=Fcclk/4=44.236 8 MHz/4=11.059 2 MHz */T0PR=99; /设置定时器分频为100分频,得110 592 Hz T0MCR=Ox03; /匹配通道0匹配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论