嵌入式系统汇总

上传人:m**** 文档编号:585295685 上传时间:2024-09-02 格式:PPT 页数:847 大小:13.03MB
返回 下载 相关 举报
嵌入式系统汇总_第1页
第1页 / 共847页
嵌入式系统汇总_第2页
第2页 / 共847页
嵌入式系统汇总_第3页
第3页 / 共847页
嵌入式系统汇总_第4页
第4页 / 共847页
嵌入式系统汇总_第5页
第5页 / 共847页
点击查看更多>>
资源描述

《嵌入式系统汇总》由会员分享,可在线阅读,更多相关《嵌入式系统汇总(847页珍藏版)》请在金锄头文库上搜索。

1、05:501ARM9嵌入式系统设计基础教程河南理工大学计算机学院河南理工大学计算机学院通通 信信 工工 程程 系系赵鸿图赵鸿图E-mail: E-mail: TEL: 13513825210TEL: 1351382521005:502课程理论教学内容安排课程理论教学内容安排第第1 1章章 嵌入式系统基础知识嵌入式系统基础知识第第2 2章章 ARM ARM体系结构体系结构第第3 3章章 32 Bit RISC32 Bit RISC微处理器微处理器S3C2410AS3C2410A第第4 4章章 嵌入式系统的存储器系统嵌入式系统的存储器系统第第5 5章章 嵌入式系统输入嵌入式系统输入/ /输出设备

2、接口输出设备接口第第6 6章章 嵌入式系统总线接口嵌入式系统总线接口第第7 7章章 嵌入式系统网络接口嵌入式系统网络接口第第8 8章章 嵌入式系统嵌入式系统软件及操作系统基础软件及操作系统基础软件及操作系统基础软件及操作系统基础第第9 9章章 ARMARM汇编语言程序设计基础汇编语言程序设计基础第第1010章章 BootloaderBootloader设计基础设计基础第第1111章章 LinuxLinux操作系统基础操作系统基础第第1212章章 嵌入式嵌入式LinuxLinux软件设计软件设计第第1313章章 图形用户接口(图形用户接口(GUIGUI) 05:503第1章嵌入式系统基础知识1.

3、1 1.1 嵌入式系统的定义和组成嵌入式系统的定义和组成1.2 1.2 嵌入式微处理器体系结构嵌入式微处理器体系结构1.3 1.3 嵌入式微处理器的结构和类型嵌入式微处理器的结构和类型05:5041.1 嵌入式系统的定义和组成1.1.1 1.1.1 嵌入式系统的定义嵌入式系统的定义1.1.2 1.1.2 嵌入式系统发展趋势嵌入式系统发展趋势1.1.3 1.1.3 嵌入式系统的组成嵌入式系统的组成1.1.4 1.1.4 实时系统(实时系统(RTOSRTOS) 05:5051.1.1 嵌入式系统的定义IEEEIEEE的嵌入式系统定义的嵌入式系统定义: : 根据根据IEEEIEEE(国际电气和电子工

4、程师协会)的定义,嵌入式系国际电气和电子工程师协会)的定义,嵌入式系统是统是“控制、监视或者辅助设备、机器和车间运行的装置控制、监视或者辅助设备、机器和车间运行的装置”(原文为(原文为devices used to devices used to controlcontrol,monitormonitor,oror assist the assist the operation of operation of equipmentequipment,machinerymachinery or plants or plants)。)。国内的嵌入式系统定义国内的嵌入式系统定义: : 目前国内一个普遍

5、被认同的定义是:以应用为中心、以计算目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。性、成本、体积、功耗严格要求的专用计算机系统。05:5061.1.2 嵌入式系统发展趋势1 1嵌入式系统的发展历史嵌入式系统的发展历史从单片机的出现到各种嵌入式微处理器、微控制器的广泛应从单片机的出现到各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统的应用可以追溯到用,嵌入式系统的应用可以追溯到2020世纪世纪6060年代中期,嵌入式年代中期,嵌入式系统

6、的发展历程,大致经历了以下系统的发展历程,大致经历了以下4 4个阶段。个阶段。(1 1)无操作系统阶段)无操作系统阶段 单片机是最早应用的嵌入式系统,单片机作为各类工业控制单片机是最早应用的嵌入式系统,单片机作为各类工业控制和飞机、导弹等武器装备中的微控制器,用来执行一些单线程和飞机、导弹等武器装备中的微控制器,用来执行一些单线程的程序,完成监测、伺服和设备指示等多种功能,一般没有操的程序,完成监测、伺服和设备指示等多种功能,一般没有操作系统的支持,程序设计采用汇编语言。作系统的支持,程序设计采用汇编语言。05:507嵌入式系统发展历史(2 2)简单操作系统阶段)简单操作系统阶段 20 20世

7、纪世纪8080年代,出现了大量具有高可靠性、低功耗的嵌入式年代,出现了大量具有高可靠性、低功耗的嵌入式CPUCPU(如如Power PCPower PC等),芯片上集成有微处理器、等),芯片上集成有微处理器、I/OI/O接口、串接口、串行接口及行接口及RAMRAM、ROMROM等部件,面向等部件,面向I/OI/O设计的微控制器在嵌入式系设计的微控制器在嵌入式系统设计应用。一些简单的嵌入式操作系统开始出现并得到迅速统设计应用。一些简单的嵌入式操作系统开始出现并得到迅速发展,程序设计人员也开始基于一些简单的发展,程序设计人员也开始基于一些简单的“操作系统操作系统”开发开发嵌入式应用软件。此时的嵌入

8、式操作系统虽然还比较简单,但嵌入式应用软件。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,大大缩短了开发周期,提高了开发效率。大大缩短了开发周期,提高了开发效率。05:508嵌入式系统发展历史(3 3)实时操作系统阶段)实时操作系统阶段 2020世纪世纪9090年代,面对分布控制、柔性制造、数字化通信和信年代,面对分布控制、柔性制造、数字化通信和信息家电等巨大市场的需求,嵌入式系统飞速发展。随着硬件实息家电等巨大市场的需求,嵌入式系统飞速发展。随着硬件实时性要求的提高,嵌入式系统的软件规模也不断

9、扩大,实时多时性要求的提高,嵌入式系统的软件规模也不断扩大,实时多任务操作系统逐渐形成,系统能够运行在各种不同类型的微处任务操作系统逐渐形成,系统能够运行在各种不同类型的微处理器上,具备了文件和目录管理、设备管理、多任务、网络、理器上,具备了文件和目录管理、设备管理、多任务、网络、图形用户界面图形用户界面( (GUI)GUI)等功能,并提供了大量的应用程序接口等功能,并提供了大量的应用程序接口( (API)API),从而使应用软件的开发变得更加简单。从而使应用软件的开发变得更加简单。(4 4)面向)面向InternetInternet阶段阶段进入进入2121世纪,世纪,InternetInte

10、rnet技术与信息家电、工业控制技术等的技术与信息家电、工业控制技术等的结合日益紧密,嵌入式技术与结合日益紧密,嵌入式技术与InternetInternet技术的结合正在推动着技术的结合正在推动着嵌入式系统的飞速发展。嵌入式系统的飞速发展。05:5092.嵌入式系统发展趋势 面对嵌入式技术与面对嵌入式技术与InternetInternet技术的结合,嵌入式系统的研究技术的结合,嵌入式系统的研究和应用在飞速发展。和应用在飞速发展。 (1 1)新的微处理器层出不穷新的微处理器层出不穷,精简系统内核,优化关键算法,精简系统内核,优化关键算法,降低功耗和软硬件成本。更加友好的多媒体人机交互界面。降低功

11、耗和软硬件成本。更加友好的多媒体人机交互界面。 (2 2)LinuxLinux、WindowsWindows CE CE等嵌入式操作系统迅速发展等嵌入式操作系统迅速发展。嵌入式。嵌入式操作系统自身结构的设计更加便于移植,具有源代码开放、系操作系统自身结构的设计更加便于移植,具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,能在短时间内统内核小、执行效率高、网络结构完整等特点,能在短时间内支持更多的微处理器。计算机的新技术、新观念逐步移植到嵌支持更多的微处理器。计算机的新技术、新观念逐步移植到嵌入式系统中,嵌入式软件平台得到进一步完善。入式系统中,嵌入式软件平台得到进一步完善。 (3

12、3)嵌入式系统的开发成了一项系统工程嵌入式系统的开发成了一项系统工程,开发商不仅提供,开发商不仅提供嵌入式软硬件系统本身,同时还提供强大的硬件开发工具和软嵌入式软硬件系统本身,同时还提供强大的硬件开发工具和软件支持包。件支持包。05:50103.IP核(Intellectual Property Core知识产权核) SOCSOC(SystemSystem On Chip On Chip,片上系统)是片上系统)是9090年代中期出现的一年代中期出现的一个概念,并成为现代集成电路设计的发展方向。个概念,并成为现代集成电路设计的发展方向。SOCSOC是指是指在单芯在单芯片上集成数字信号处理器片上集

13、成数字信号处理器、微控制器微控制器、存储器存储器、数据转换器数据转换器、接口电路等电路模块接口电路等电路模块,可以直接实现信号采集可以直接实现信号采集、转换转换、存储存储、处理等功能处理等功能。 IP IP核核是指具有是指具有知识产权的知识产权的、功能具体功能具体、接口规范接口规范、可在多个、可在多个集成电路设计中集成电路设计中重复使用重复使用的的功能模块功能模块,是实现系统芯片(,是实现系统芯片(SOCSOC)的的基本构件基本构件。05:5011IP核 IP IP核分为核分为: : 1) 1) 用硬件描述语言用硬件描述语言(hardware Description hardware Desc

14、ription LanguageLanguage,HDLHDL)文本形式提交给用户文本形式提交给用户,经过,经过RTLRTL级设计优化和功能验证,级设计优化和功能验证,但其中不含有任何具体的物理信息的软核(但其中不含有任何具体的物理信息的软核(Soft IP CoreSoft IP Core);); 2) 2) 完成软核所有的设计外,还完成了完成软核所有的设计外,还完成了门级电路综合和时序门级电路综合和时序仿真等设计环节仿真等设计环节,一般以,一般以门级电路网表门级电路网表的形式提供给用户的固的形式提供给用户的固核(核(Firm IP CoreFirm IP Core);); 3) 3) 基于

15、物理描述基于物理描述,并经过,并经过工艺验证工艺验证,具有可保证的性能,具有可保证的性能,提供给用户的形式是提供给用户的形式是电路物理结构掩模版图电路物理结构掩模版图和和全套工艺文件全套工艺文件的的硬核硬核(Hard IP CoreHard IP Core)。)。05:5012IP核 IPIP软核软核以源代码的形式以源代码的形式提供的,提供的,IPIP知识产权知识产权不易保护不易保护。IPIP硬核易于实现硬核易于实现IPIP保护保护,缺点是,缺点是灵活性和可移植性差灵活性和可移植性差。 目前全球目前全球IPIP核市场处于核市场处于快速成长的阶段快速成长的阶段,EDAEDA联盟、联盟、RAPID

16、RAPID联盟、联盟、VCXVCX联盟与联盟与VSIAVSIA联盟等都在积极推动联盟等都在积极推动IPIP核的开发、核的开发、应用及推广。其中,应用及推广。其中,EDAEDA联盟主要是以如何提供更好的联盟主要是以如何提供更好的EDAEDA软软件工具件工具为主,为主,VSIAVSIA联盟主要针对联盟主要针对IPIP核的定义核的定义、开发开发、授权授权及及测试测试等建立一个公开的共性规范。等建立一个公开的共性规范。ARMARM、RambusRambus和和MIPSMIPS在十在十大大IPIP供应商排行中居前供应商排行中居前3 3位。位。05:50131.1.3 嵌入式系统的组成 嵌入式系统通常由包

17、含有嵌入式系统通常由包含有嵌入式处理器嵌入式处理器、嵌入式操作系嵌入式操作系统统、应用软件应用软件和和外围设备接口外围设备接口的嵌入式计算机系统和执行装的嵌入式计算机系统和执行装置(被控对象)组成。嵌入式计算机系统是整个嵌入式系统置(被控对象)组成。嵌入式计算机系统是整个嵌入式系统的核心,可以分为的核心,可以分为硬件层硬件层、中间层中间层、系统软件层系统软件层和和应用软件应用软件层层。执行装置接受嵌入式计算机系统发出的控制命令,执行。执行装置接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。所规定的操作或任务。05:5014嵌入式系统组成05:5015典型的嵌入式系统组成应用程序实时

18、操作系统(RTOS)输入输出接口处理器/ARM核MMU/CacheSOC/SOPCUSBGPIOIISLCDUART和IrDAADC/DACFPGA/CPLDDSP/浮点运算协处理器DMA电源管理人机交互接口LCD/触摸屏、键盘、鼠标设备驱动程序、HAL、BSP文件系统/图形用户应用程序接口中间层OS层应用层软件硬件以太网看门狗及复位电路Timer/RTCCANFlashEEPROMDRAMSRAM内存05:50161.嵌入式计算机系统的硬件层 硬件层中包含嵌入式硬件层中包含嵌入式微处理器微处理器、存储器存储器(SDRAMSDRAM、ROMROM、FlashFlash等)、等)、通用设备接口通

19、用设备接口和和I/OI/O接口接口(A/DA/D、D/AD/A、I/OI/O等)。等)。硬件层通常是一个以硬件层通常是一个以嵌入式处理器为中心嵌入式处理器为中心的,包含有电源电的,包含有电源电路、时钟电路和存储器电路的电路模块,其中操作系统和应路、时钟电路和存储器电路的电路模块,其中操作系统和应用程序都固化在模块的用程序都固化在模块的ROMROM中。中。05:5017(1)嵌入式微处理器嵌入式微处理器是嵌入式系统硬件层的核心,嵌入式微处理嵌入式微处理器是嵌入式系统硬件层的核心,嵌入式微处理器将通用器将通用PCPC机中的机中的CPUCPU和各种接口集成到芯片内部,有利于系统和各种接口集成到芯片内

20、部,有利于系统设计趋于设计趋于微型化微型化、高效率高效率和和高可靠性高可靠性。为特定用途专门设计。为特定用途专门设计。 嵌入式微处理器的体系结构可采用嵌入式微处理器的体系结构可采用冯冯诺依曼体系结构诺依曼体系结构或或哈哈佛体系结构佛体系结构,指令系统可选用,指令系统可选用精简指令系统精简指令系统(RISCRISC)或)或复杂指复杂指令集系统令集系统(CISCCISC)。)。 嵌入式微处理器有各种不同的体系,目前全世界嵌入式微处嵌入式微处理器有各种不同的体系,目前全世界嵌入式微处理器已经超过理器已经超过10001000多种,体系结构有多种,体系结构有3030多个系列,其中主流的多个系列,其中主流

21、的体系有体系有ARMARM、MIPSMIPS、PowerPCPowerPC、X86X86和和SHSH等。即使在同一体系中,等。即使在同一体系中,也可以具有不同的也可以具有不同的时钟频率时钟频率、数据总线宽度数据总线宽度、接口接口和和外设外设。嵌。嵌入式微处理器的选择是根据入式微处理器的选择是根据具体的应用而决定具体的应用而决定的。的。05:5018(2)存储器 嵌入式系统的存储器包含嵌入式系统的存储器包含CacheCache、主存储器主存储器和和辅助存储器辅助存储器。 CacheCache是一种位于主存储器和嵌入式微处理器内核之间的是一种位于主存储器和嵌入式微处理器内核之间的快速存储器阵列快速

22、存储器阵列,存放的是最近一段时间微处理器使用最多的,存放的是最近一段时间微处理器使用最多的程序代码和数据。使处理速度更快,实时性更强。程序代码和数据。使处理速度更快,实时性更强。CacheCache集成在集成在嵌入式微处理器内,可分嵌入式微处理器内,可分数据数据CacheCache、指令指令CacheCache或混合或混合CacheCache。 主存储器主存储器存放存放系统系统、用户程序用户程序和和数据数据。主存储器有。主存储器有ROMROM和和RAMRAM类,位于微处理器的内部或外部。常用的类,位于微处理器的内部或外部。常用的ROMROM类存储器有类存储器有NOR NOR FlashFlas

23、h、EEPROMEEPROM等,等,RAMRAM类存储器有类存储器有SRAMSRAM、DRAMDRAM和和SDRAMSDRAM等,容量等,容量为为256KB256KB1GB1GB。 辅助存储器辅助存储器指指硬盘硬盘、NAND FlashNAND Flash、CFCF卡卡、MMCMMC和和SDSD卡卡等,等,存放大容量的程序代码或信息,容量较大,但读取速度较慢。存放大容量的程序代码或信息,容量较大,但读取速度较慢。05:5019(3)通用设备接口和I/O接口嵌入式系统通常具有与外界交互所需要的各种通用设备接嵌入式系统通常具有与外界交互所需要的各种通用设备接口,如口,如GPIOGPIO(通用(通用

24、I/OI/O接口)、接口)、A/DA/D(模(模/ /数转换接口)、数转换接口)、D/AD/A(数(数/ /模转换接口)、模转换接口)、RS-232RS-232接口接口(串行通信接口)、(串行通信接口)、EthernetEthernet(以太网接口)、(以太网接口)、USBUSB(通用串行总线接口)、(通用串行总线接口)、I I2 2C C、IISIIS(音频接口)、(音频接口)、VGAVGA视频输出接口视频输出接口、CANCAN(现场总线)、(现场总线)、SPISPI(串行外围设备接口)和(串行外围设备接口)和IrDAIrDA(红外线接口)等。(红外线接口)等。 05:50202中间层 中间

25、层也称为中间层也称为硬件抽象层硬件抽象层(HALHAL)或)或板级支持包板级支持包(BSPBSP),位),位于硬件层和软件层之间,将系统上层软件与底层硬件分离开。于硬件层和软件层之间,将系统上层软件与底层硬件分离开。 BSPBSP作为上层软件与硬件平台之间的接口,需要为操作系统作为上层软件与硬件平台之间的接口,需要为操作系统提供操作和控制具体硬件的方法。不同的操作系统具有各自的提供操作和控制具体硬件的方法。不同的操作系统具有各自的软件层次结构,软件层次结构,BSPBSP需要为不同的操作系统提供特定的硬件接口需要为不同的操作系统提供特定的硬件接口形式。形式。BSPBSP使上层软件开发人员无需关心

26、底层硬件的具体情况,使上层软件开发人员无需关心底层硬件的具体情况,根据根据BSPBSP层提供的接口即可进行开发。层提供的接口即可进行开发。 BSP BSP是一个介于是一个介于操作系统和底层硬件之间的软件层次操作系统和底层硬件之间的软件层次,包括,包括了系统中大部分与硬件联系紧密的软件模块。了系统中大部分与硬件联系紧密的软件模块。BSPBSP一般包含相关一般包含相关底层底层硬件的初始化硬件的初始化、数据的、数据的输入输入/ /输出操作输出操作和硬件和硬件设备的配置设备的配置等等功能。功能。05:5021(1)嵌入式系统硬件初始化系统初始化过程按照自底向上、从硬件到软件的次序依次可系统初始化过程按

27、照自底向上、从硬件到软件的次序依次可分为分为片级初始化片级初始化、板级初始化板级初始化和和系统级初始化系统级初始化3 3个主要环节。个主要环节。 片级初始化片级初始化是一个是一个纯硬件的初始化过程纯硬件的初始化过程,包括设置微处,包括设置微处理器的核心寄存器和控制寄存器、工作模式、局部总线模式等,理器的核心寄存器和控制寄存器、工作模式、局部总线模式等,把微处理器设置成系统所要求的工作状态;把微处理器设置成系统所要求的工作状态; 板级初始化板级初始化包含包含软、硬件的初始化过程软、硬件的初始化过程,完成微处理器,完成微处理器以外以外硬件设备硬件设备的初始化,设置软件的的初始化,设置软件的数据结构

28、和参数数据结构和参数,为系统,为系统级初始化和应用程序的运行建立硬件和软件环境;级初始化和应用程序的运行建立硬件和软件环境; 系统级初始化系统级初始化主要是主要是操作系统初始化操作系统初始化。BSPBSP将控制权将控制权转交转交给嵌入式操作系统给嵌入式操作系统,由操作系统完成余下的初始化,包含加载,由操作系统完成余下的初始化,包含加载和初始化与硬件无关的和初始化与硬件无关的设备驱动程序设备驱动程序,建立系统,建立系统内存区内存区,加载,加载并初始化如并初始化如网络系统网络系统、文件系统文件系统文件系统文件系统等等等等系统软件模块系统软件模块。最后,操作。最后,操作。最后,操作。最后,操作系统创

29、建应用程序环境,并将控制权系统创建应用程序环境,并将控制权系统创建应用程序环境,并将控制权系统创建应用程序环境,并将控制权交给应用程序交给应用程序交给应用程序交给应用程序的入口。的入口。的入口。的入口。05:5022(2)硬件相关的设备驱动程序BSPBSPBSPBSP中包含硬件相关的中包含硬件相关的中包含硬件相关的中包含硬件相关的设备驱动程序设备驱动程序设备驱动程序设备驱动程序,但是这些设备驱动,但是这些设备驱动,但是这些设备驱动,但是这些设备驱动程序通常不直接由程序通常不直接由程序通常不直接由程序通常不直接由BSPBSPBSPBSP使用,而是在系统初始化过程中由使用,而是在系统初始化过程中由

30、使用,而是在系统初始化过程中由使用,而是在系统初始化过程中由BSPBSPBSPBSP将他们与操作系统中通用的设备驱动程序关联起来,并在随将他们与操作系统中通用的设备驱动程序关联起来,并在随将他们与操作系统中通用的设备驱动程序关联起来,并在随将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的后的应用中由通用的设备驱动程序调用,实现对硬件设备的后的应用中由通用的设备驱动程序调用,实现对硬件设备的后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。操作。操作。操作。05:50233.系统软件层 系统软件层通常包含有系统软件层通常包含有实时多

31、任务操作系统实时多任务操作系统(Real-time Real-time Operation SystemOperation System,RTOSRTOS)、)、文件系统文件系统、图形用户接口图形用户接口(Graphic User InterfaceGraphic User Interface,GUIGUI)、)、网络系统网络系统及及通用组件模块通用组件模块组成。组成。RTOSRTOS是嵌入式应用软件的基础和开发平台。是嵌入式应用软件的基础和开发平台。05:5024(1)嵌入式操作系统 嵌入式操作系统(嵌入式操作系统(Embedded Operating SystemEmbedded Oper

32、ating System,EOSEOS)负责)负责系统的系统的软、硬件资源分配软、硬件资源分配、任务调度任务调度,控制协调控制协调。 EOS EOS除具备了一般操作系统最基本的功能外,还具有:除具备了一般操作系统最基本的功能外,还具有:实时实时性性;支持;支持开放性开放性和和可伸缩性的体系结构可伸缩性的体系结构,可裁减性可裁减性;提供设备;提供设备驱动接口;操作方便、简单的图形驱动接口;操作方便、简单的图形GUIGUI和界面;支持和界面;支持TCP/IPTCP/IP协议协议及其他协议,提供统一的及其他协议,提供统一的MACMAC访问层接口,提供强大的网络功能;访问层接口,提供强大的网络功能;嵌

33、入式操作系统的用户接口通过嵌入式操作系统的用户接口通过系统的调用命令向用户程序提系统的调用命令向用户程序提供服务供服务;嵌入式系统一旦开始运行就;嵌入式系统一旦开始运行就不需要用户过多的干预不需要用户过多的干预;嵌入式操作系统和应用软件被嵌入式操作系统和应用软件被固化固化在嵌入式系统在嵌入式系统ROMROM中中;具有良;具有良好的硬件适应性(可移植性)。好的硬件适应性(可移植性)。05:5025(2)文件系统 嵌入式文件系统与通用操作系统的文件系统嵌入式文件系统与通用操作系统的文件系统不完全相同不完全相同,主,主要提供要提供文件存储文件存储、检索检索和和更新更新等功能,一般不提供保护和加密等功

34、能,一般不提供保护和加密等安全机制。嵌入式文件系统通常等安全机制。嵌入式文件系统通常支持支持FAT32FAT32、JFFS2JFFS2、YAFFSYAFFS等等几种标准的文件系统,一些嵌入式文件系统还支持自定义的实几种标准的文件系统,一些嵌入式文件系统还支持自定义的实时文件系统,可根据要求选择所需的时文件系统,可根据要求选择所需的文件系统文件系统、存储介质存储介质和配和配置同时置同时打开的最大文件数打开的最大文件数等。嵌入式文件系统可方便的挂接不等。嵌入式文件系统可方便的挂接不同存储设备的驱动程序,同存储设备的驱动程序,支持多种存储设备支持多种存储设备。 嵌入式文件系统以嵌入式文件系统以系统调

35、用系统调用和和命令方式命令方式提供提供文件的各种操作文件的各种操作,如设置、修改对文件和目录的存取权限,提供建立、修改、改如设置、修改对文件和目录的存取权限,提供建立、修改、改变和删除目录等服务,提供变和删除目录等服务,提供创建创建、打开打开、读写读写、关闭关闭和和撤销撤销文文件等服务。件等服务。05:5026(3)图形用户接口(GUI) GUI GUI使用户可使用户可通过窗口通过窗口、菜单菜单、按键按键等方式来方便地等方式来方便地操作操作计计算机或算机或嵌入式系统嵌入式系统。嵌入式。嵌入式GUIGUI与与PCPC机的机的GUIGUI不同,嵌入式不同,嵌入式GUIGUI具具有有轻型轻型、占用、

36、占用资源少资源少、高性能、高可靠性、便于移植、可配置、高性能、高可靠性、便于移植、可配置等特点。等特点。 实现嵌入式系统中的图形界面一般采用下面的几种方法:实现嵌入式系统中的图形界面一般采用下面的几种方法: 1) 1)针对针对特定的图形设备特定的图形设备输出接口输出接口, ,自行开发相应的功能函数;自行开发相应的功能函数; 2) 2)购买购买针对特定嵌入式系统的针对特定嵌入式系统的图形中间软件包图形中间软件包; 3) 3)采用采用源码开放源码开放的嵌入式的嵌入式GUIGUI系统;系统; 4) 4)使用使用独立软件独立软件开发商提供的嵌入式开发商提供的嵌入式GUIGUI产品。产品。05:5027

37、1.1.4 实时系统(RTOS) RTOS RTOS(Real-time operating systemReal-time operating system,实时系统)在,实时系统)在航航空空、航天航天、工业过程控制工业过程控制、武器防御系统武器防御系统、自动化导航自动化导航控控制系统、医疗、信息检索、银行、多媒体系统等领域广泛应制系统、医疗、信息检索、银行、多媒体系统等领域广泛应用。用。 RTOS RTOS与通用计算机系统与通用计算机系统不同不同,要求系统中的任务不但执,要求系统中的任务不但执行结果要正确,而且必须行结果要正确,而且必须在一定的时间约束在一定的时间约束(DeadlineDe

38、adline)内内完成完成。在。在RTOSRTOS中,一个逻辑上正确的计算结果,若其产生的中,一个逻辑上正确的计算结果,若其产生的时间晚于某个规定的时间,那么也认为系统的行为是不正确时间晚于某个规定的时间,那么也认为系统的行为是不正确的。的。05:50281.RTOS定义RTOSRTOS是指能够在指定或者是指能够在指定或者确定的时间内完成系统功能确定的时间内完成系统功能和对外和对外部或内部、同步或异步时间部或内部、同步或异步时间做出响应的系统做出响应的系统,系统能够处理和,系统能够处理和存储控制系统所需要的大量数据。存储控制系统所需要的大量数据。RTOSRTOS的正确性不仅依赖于系的正确性不仅

39、依赖于系统计算的逻辑结果,还依赖于统计算的逻辑结果,还依赖于产生这个结果的时间产生这个结果的时间。05:50292.RTOS特点(1 1)约束性)约束性 RTOS RTOS任务的约束包括任务的约束包括时间时间、资源资源、执行顺序执行顺序和和性能性能约束。约束。 RTOS RTOS的任务具有的任务具有时间约束性时间约束性。是任何。是任何RTOSRTOS都固有的约束。时都固有的约束。时间约束性可分为间约束性可分为“硬实时硬实时”和和“软实时软实时”。硬实时硬实时是指在航空是指在航空航天、军事、核工业等一些关键领域中应用的系统,航天、军事、核工业等一些关键领域中应用的系统,时间要求时间要求必须能够得

40、到完全满足必须能够得到完全满足,否则将造成不可预计的结果。,否则将造成不可预计的结果。软实时软实时通常是指在监控系统、信息采集系统等某些应用中,通常是指在监控系统、信息采集系统等某些应用中,有时间约有时间约束要求束要求,但偶尔违反,但偶尔违反不会造成严重影响不会造成严重影响。 资源约束资源约束是指多个实时任务共享有限的资源时,必须按照一是指多个实时任务共享有限的资源时,必须按照一定的定的资源访问控制协议进行同步资源访问控制协议进行同步资源访问控制协议进行同步资源访问控制协议进行同步,以避免死锁和高优先级任务,以避免死锁和高优先级任务,以避免死锁和高优先级任务,以避免死锁和高优先级任务被低优先级

41、任务堵塞的时间(即优先级倒置时间)不可预测。被低优先级任务堵塞的时间(即优先级倒置时间)不可预测。被低优先级任务堵塞的时间(即优先级倒置时间)不可预测。被低优先级任务堵塞的时间(即优先级倒置时间)不可预测。05:5030RTOS特点 执行顺序约束执行顺序约束是指各任务的启动和执行必须满足一定的是指各任务的启动和执行必须满足一定的时间时间和顺序约束和顺序约束。例如,在分布式端到端(。例如,在分布式端到端(end-to-endend-to-end)实时系统)实时系统中,同一任务的各子任务之间存在前驱中,同一任务的各子任务之间存在前驱/ /后继约束关系,需要执后继约束关系,需要执行同步协议来管理子任

42、务的启动和控制子任务的执行,使它们行同步协议来管理子任务的启动和控制子任务的执行,使它们满足时间约束和系统可调度性要求。满足时间约束和系统可调度性要求。 性能约束性能约束是指必须满足如是指必须满足如可靠性可靠性、可用性可用性、可预测性可预测性、服务服务质量质量(Quality of ServiceQuality of Service,QoSQoS)等性能指标。)等性能指标。05:5031RTOS特点(2 2)可预测性)可预测性 可预测性是指可预测性是指RTOSRTOS完成实时任务所完成实时任务所需要的执行时间应是可知的需要的执行时间应是可知的。可预测。可预测性是性是RTOSRTOS的一项重要性

43、能要求。可预测性包括硬件时延的可预测性和软件系的一项重要性能要求。可预测性包括硬件时延的可预测性和软件系统的可预测性(包括应用程序的响应时间是可预测的,以及操作系统的可预统的可预测性(包括应用程序的响应时间是可预测的,以及操作系统的可预测性)。在多种任务型测性)。在多种任务型RTOSRTOS中,不但包括周期任务、偶发任务、非周期任务,中,不但包括周期任务、偶发任务、非周期任务,还包括非实时任务。多种类型任务的混合,使系统的可调度性、可预测性分还包括非实时任务。多种类型任务的混合,使系统的可调度性、可预测性分析更加困难。析更加困难。(3 3)可靠性)可靠性 大多数大多数RTOSRTOS要求有较高

44、的可靠性,要求要求有较高的可靠性,要求系统在最坏情况下都能正常工作系统在最坏情况下都能正常工作或避免损失。可靠性是或避免损失。可靠性是RTOSRTOS的重要性能指标。的重要性能指标。 (4 4)交互性)交互性 外部环境是外部环境是RTOSRTOS不可缺少的一个组成部分,外部环境往往是被控子系统,不可缺少的一个组成部分,外部环境往往是被控子系统,两者相互作用构成完整的实时系统两者相互作用构成完整的实时系统。嵌入式计算机系统一般作为控制系统,。嵌入式计算机系统一般作为控制系统,必须在规定的时间内对被控子系统请求做出反应。被控子系统也必须能够正必须在规定的时间内对被控子系统请求做出反应。被控子系统也

45、必须能够正常工作或准备对任何异常行为采取动作。常工作或准备对任何异常行为采取动作。05:50323.RTOS调度给定一组实时任务和系统资源,给定一组实时任务和系统资源,确定每个任务何时何地执行确定每个任务何时何地执行的整个过程的整个过程就是调度。而就是调度。而RTOSRTOS中调度的目的则是要尽可能地保中调度的目的则是要尽可能地保证每个任务满足它们的时间约束,及时对外部请求做出响应。证每个任务满足它们的时间约束,及时对外部请求做出响应。实时调度技术常用的有以下两种。实时调度技术常用的有以下两种。(1 1)抢占式调度和非抢占式调度)抢占式调度和非抢占式调度 抢占式调度抢占式调度通常是通常是优先级

46、驱动的调度优先级驱动的调度。每个任务都有优先级,。每个任务都有优先级,任何时候具有任何时候具有最高优先级且已启动的任务先执行最高优先级且已启动的任务先执行。抢占式调度。抢占式调度实时性好、反应快,调度算法相对简单,可优先保证高优先级实时性好、反应快,调度算法相对简单,可优先保证高优先级任务的时间约束,其缺点是上下文切换多。而任务的时间约束,其缺点是上下文切换多。而非抢占式调度非抢占式调度是是指指不允许任务在执行期间被中断不允许任务在执行期间被中断,任务一旦占用微处理器就必,任务一旦占用微处理器就必须执行完毕或自愿放弃,其优点是上下文切换少,缺点是微处须执行完毕或自愿放弃,其优点是上下文切换少,

47、缺点是微处理器有效资源利用率低,可调度性不好。理器有效资源利用率低,可调度性不好。05:5033(2)静态表驱动策略和优先级驱动策略 静态表驱动策略静态表驱动策略是一种是一种离线调度策略离线调度策略,指在系统运行前根据,指在系统运行前根据各任务的时间约束及关联关系,采用某种搜索策略各任务的时间约束及关联关系,采用某种搜索策略生成生成一张一张运运行时刻表行时刻表。在系统运行时,调度器只需根据这张时刻表启动相。在系统运行时,调度器只需根据这张时刻表启动相应的任务即可。应的任务即可。 优先级驱动策略优先级驱动策略指指按按照任务照任务优先级的高低确定任务的执行顺优先级的高低确定任务的执行顺序序。优先级

48、驱动策略又分为静态优先级调度策略和动态优先级。优先级驱动策略又分为静态优先级调度策略和动态优先级调度策略。调度策略。静态优先级调度静态优先级调度是指任务的优先级分配好之后,在是指任务的优先级分配好之后,在任务的运行过程中,优先级不会发生改变。静态优先级调度又任务的运行过程中,优先级不会发生改变。静态优先级调度又称为固定优先级调度。称为固定优先级调度。动态优先级调度动态优先级调度是指任务的优先级可以是指任务的优先级可以随着时间或系统状态的变化而发生变化。随着时间或系统状态的变化而发生变化。05:50344.RTOS分类 RTOS RTOS主要分为主要分为强实时强实时(Hard Real-Time

49、Hard Real-Time)系统和)系统和弱实时弱实时(Soft Real-TimeSoft Real-Time)系统两类。)系统两类。强实时强实时系统应用在航空航天、系统应用在航空航天、军事、核工业等领域中,军事、核工业等领域中,弱实时弱实时系统如视频点播系统、信息采系统如视频点播系统、信息采集与检索系统等。集与检索系统等。05:50355实时任务分类实时任务的分类方法有多种,根据任务的周期划分,可以分实时任务的分类方法有多种,根据任务的周期划分,可以分为为周期任务周期任务、偶发任务偶发任务和和非周期任务非周期任务3 3类。根据是否允许任务超类。根据是否允许任务超时,以及超时后对系统造成的

50、影响,任务又分为时,以及超时后对系统造成的影响,任务又分为强实时强实时任务、任务、准实时准实时任务、任务、弱实时弱实时任务和任务和弱一强实时弱一强实时任务任务4 4类。类。05:50366.RTOS操作系统和内核 RTOS RTOS从单用途专用系统向多用途通用操作系统(如实时从单用途专用系统向多用途通用操作系统(如实时LinuxLinux等)发展。等)发展。RTOSRTOS从只支持从只支持强实时强实时及其应用发展到既支持强及其应用发展到既支持强实时也支持实时也支持弱实时弱实时及其应用方面,如开放实时系统的及其应用方面,如开放实时系统的服务质量服务质量(QoSQoS)多媒体应用多媒体应用、复杂分

51、布式复杂分布式实时系统等。实时系统等。05:50371.2 嵌入式微处理器体系结构1.2.1 1.2.1 冯冯诺依曼结构与哈佛结构诺依曼结构与哈佛结构1.2.2 1.2.2 精简指令集计算机精简指令集计算机1.2.3 1.2.3 流水线技术流水线技术1.2.4 1.2.4 信息存储的字节顺序信息存储的字节顺序05:50381.2.1 冯诺依曼结构与哈佛结构1.1.冯冯诺依曼诺依曼(Von Neumann)(Von Neumann)结构结构 冯冯诺依曼结构的计算机由诺依曼结构的计算机由CPUCPU和存储器构成,其和存储器构成,其程序和数程序和数据共用一个存储空间据共用一个存储空间,程序指令存储地

52、址和数据存储地址指向,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置;采用单一的地址及数据总线,同一个存储器的不同物理位置;采用单一的地址及数据总线,程序指令和数据的宽度相同。程序计数器(程序指令和数据的宽度相同。程序计数器(PCPC)是)是CPUCPU内部指示内部指示指令和数据的存储位置的寄存器。指令和数据的存储位置的寄存器。 CPU CPU通过程序计数器提供的地址信息,对存储器进行寻址,通过程序计数器提供的地址信息,对存储器进行寻址,找到所需要的指令或数据,然后对指令进行译码,最后执行指找到所需要的指令或数据,然后对指令进行译码,最后执行指令规定的操作。处理器执行指令时,先从

53、储存器中取出指令解令规定的操作。处理器执行指令时,先从储存器中取出指令解码,再取操作数执行运算,即使单条指令也要耗费几个甚至几码,再取操作数执行运算,即使单条指令也要耗费几个甚至几十个周期,在高速运算时,在传输通道上会出现瓶颈效应。十个周期,在高速运算时,在传输通道上会出现瓶颈效应。目前使用冯诺依曼结构的目前使用冯诺依曼结构的CPUCPU和微控制器品种有很多,例如和微控制器品种有很多,例如IntelIntel公司的公司的80868086系列系列及其他及其他CPUCPU,ARMARM公司的公司的ARM7ARM7、MIPSMIPS公司的公司的MIPSMIPS处理器处理器等。等。05:50392.哈

54、佛(Harvard)结构 哈佛结构的主要特点是将哈佛结构的主要特点是将程序和数据存储在不同的存储空间程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是中,即程序存储器和数据存储器是两个相互独立的存储器两个相互独立的存储器,每,每个存储器个存储器独立编址独立编址、独立访问独立访问。系统中具有程序的数据总线与。系统中具有程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线可允许在一个机器周期内和数据总线可允许在一个机器周期内同时获取指令字同时获取指令字( (来自程序来自程序存储器存储器) )和和操作数操作数

55、( (来自数据存储器来自数据存储器) ),从而提高执行速度,提高,从而提高执行速度,提高数据的吞吐率。又由于程序和数据存储器在两个分开的物理空数据的吞吐率。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠,具有间中,因此取指和执行能完全重叠,具有较高的执行效率较高的执行效率。 目前使用哈佛结构的目前使用哈佛结构的CPUCPU和微控制器品种有很多,除和微控制器品种有很多,除DSPDSP处理处理器外,还有摩托罗拉公司的器外,还有摩托罗拉公司的MC68MC68系列系列、ZilogZilog公司的公司的Z8Z8系列系列、ATMELATMEL公司的公司的AVRAVR系列系列和和AR

56、MARM公司的公司的ARM9ARM9、ARM10ARM10和和ARM11ARM11等。等。05:50401.2.2 精简指令集计算机 早期的计算机采用早期的计算机采用复杂指令集计算机复杂指令集计算机(Complex Instruction Set Complex Instruction Set ComputerComputer,CISCCISC)体系,例如)体系,例如IntelIntel公司的公司的X86X86系列系列CPUCPU,从,从80868086到到PentiumPentium系系列,采用的都是典型的列,采用的都是典型的CISCCISC体系结构。采用体系结构。采用CISCCISC体系结

57、构的计算机各种指令体系结构的计算机各种指令的使用频率相差悬殊,统计表明,大概有的使用频率相差悬殊,统计表明,大概有20%20%的比较简单的指令被反复使用的比较简单的指令被反复使用,使用量约占整个程序的使用量约占整个程序的80%80%;而有;而有80%80%左右的指令则很少使用,其使用量约占左右的指令则很少使用,其使用量约占整个程序的整个程序的20%20%,即,即指令的指令的2/82/8规律规律。在。在CISCCISC中,为了支持目标程序的优化,中,为了支持目标程序的优化,支持高级语言和编译程序,增加了许多复杂的指令,用一条指令来代替一串支持高级语言和编译程序,增加了许多复杂的指令,用一条指令来

58、代替一串指令。通过增强指令系统的功能,简化软件,却增加了硬件的复杂程度。而指令。通过增强指令系统的功能,简化软件,却增加了硬件的复杂程度。而这些复杂指令并不等于有利于缩短程序的执行时间。在这些复杂指令并不等于有利于缩短程序的执行时间。在VLSIVLSI制造工艺中要求制造工艺中要求CPUCPU控制逻辑具有规整性,而控制逻辑具有规整性,而CISCCISC为了实现大量复杂的指令,控制逻辑极不为了实现大量复杂的指令,控制逻辑极不规整,给规整,给VLSIVLSI工艺造成很大困难。工艺造成很大困难。05:5041精简指令集计算机精简指令集计算机(精简指令集计算机(Reduced Instruction S

59、et ComputerReduced Instruction Set Computer,RISCRISC)体系结)体系结构是构是2020世纪世纪8080年代提出来的。目前年代提出来的。目前IBMIBM、DECDEC、IntelIntel和和MotorolaMotorola等公司都在等公司都在研究和发展研究和发展RISCRISC技术,技术,RISCRISC已经成为当前计算机发展不可逆转的趋势。已经成为当前计算机发展不可逆转的趋势。 RISC RISC是在是在CISCCISC的基础上产生并发展起来的,的基础上产生并发展起来的,RISCRISC的着眼点不是简单地放的着眼点不是简单地放在简化指令系统上

60、,而是通过在简化指令系统上,而是通过简化指令系统简化指令系统使计算机的使计算机的结构更加简单合理结构更加简单合理,从而从而提高运算效率提高运算效率。在。在RISCRISC中的特点:中的特点: 1 1)优先)优先选取使用频率最高选取使用频率最高、有用但、有用但不复杂不复杂的指令的指令, ,避免使用复杂指令;避免使用复杂指令; 2 2)固定指令长度固定指令长度,减少,减少指令格式指令格式和和寻址方式寻址方式种类;种类; 3 3)指令之间各)指令之间各字段的划分字段的划分比较比较一致一致, ,各字段的各字段的功能功能也比较也比较规整规整; 4 4)采用)采用Load/StoreLoad/Store指

61、令访问指令访问存储器存储器, ,其余指令操作都在其余指令操作都在寄存器之间寄存器之间进行进行; ; 5 5)增加增加CPUCPU中通用中通用寄存器数量寄存器数量,算逻运算的操作数在通用寄存器中存取;,算逻运算的操作数在通用寄存器中存取; 6 6)大部分指令控制在一个或小于)大部分指令控制在一个或小于一个机器周期一个机器周期内完成。内完成。 以以硬布线控制逻辑为主硬布线控制逻辑为主,不用或少用微码控制;采用高级语言编程,重视,不用或少用微码控制;采用高级语言编程,重视编译优化工作,以减少程序执行时间。编译优化工作,以减少程序执行时间。05:5042精简指令集计算机 尽管尽管RISCRISC架构与

62、架构与CISCCISC架构相比较有较多的优点,但架构相比较有较多的优点,但RISCRISC架构架构也不可以取代也不可以取代CISCCISC架构。事实上,架构。事实上,RISCRISC和和CISCCISC各有优势各有优势。现代。现代的的CPUCPU往往采用往往采用CISCCISC的外围的外围,内部加入了内部加入了RISCRISC的特性,如超长指的特性,如超长指令集令集CPUCPU就是就是融合了融合了RISCRISC和和CISCCISC的两者的优势的两者的优势,成为未来的,成为未来的CPUCPU发展方向之一发展方向之一。在。在PCPC机和服务器领域,机和服务器领域,CISCCISC体系结构是市场的

63、体系结构是市场的主流。在嵌入式系统领域,主流。在嵌入式系统领域,RISCRISC结构的微处理器将占有重要的结构的微处理器将占有重要的位置。位置。05:50431.2.3 流水线技术1.1.流水线的基本概念流水线的基本概念 流水线技术应用于计算机系统结构的各个方面,流水线技术流水线技术应用于计算机系统结构的各个方面,流水线技术的基本思想是的基本思想是将一个重复的时序分解成若干个子过程将一个重复的时序分解成若干个子过程,而每一,而每一个个子过程子过程都可有效地在其专用功能段上与其他子过程都可有效地在其专用功能段上与其他子过程同时执行同时执行。 在流水线技术中,流水线要求可分成若干相互联系的子过程,

64、在流水线技术中,流水线要求可分成若干相互联系的子过程,实现子过程的功能实现子过程的功能所需时间尽可能相等所需时间尽可能相等。形成。形成流水处理流水处理,需要一,需要一段准备时间。指令流发生不能顺序执行时,会使流水线过程中断,段准备时间。指令流发生不能顺序执行时,会使流水线过程中断,再形成流水线过程则需要时间。再形成流水线过程则需要时间。 流水线结构的类型众多,并且分类方法各异,按完成的功能流水线结构的类型众多,并且分类方法各异,按完成的功能分类分类, ,可分为可分为单功能流水线单功能流水线和和多功能流水线多功能流水线,按同一时间内各段,按同一时间内各段之间的连接方式分类可之间的连接方式分类可静

65、态流水线静态流水线和和动态流水线动态流水线; ;按数据表示分按数据表示分类类, ,可分为可分为标量流水线标量流水线处理器和处理器和向量流水线向量流水线处理器。处理器。05:5044流水线的基本概念 指令流水线就是将一条指令分解成一连串执行的子过程,例指令流水线就是将一条指令分解成一连串执行的子过程,例如把指令的执行过程细分为如把指令的执行过程细分为取指令取指令、指令译码指令译码、取操作数取操作数和和执执行行4 4个子过程。在个子过程。在CPUCPU中把一条指令的串行执行子过程变为若干中把一条指令的串行执行子过程变为若干条指令的子过程在条指令的子过程在CPUCPU中重叠执行中重叠执行。如果能做到

66、每条指令均分解。如果能做到每条指令均分解为为m m个子过程个子过程, ,且每个子过程的执行时间都一样,则利用此条流且每个子过程的执行时间都一样,则利用此条流水线可将一条指令的执行时间水线可将一条指令的执行时间T T由原来的由原来的T T缩短为缩短为T T/ /m m。指令流水。指令流水线处理的时空图如图线处理的时空图如图1.2.11.2.1所示所示, ,其中的其中的1 1、2 2、3 3、4 4、5 5表示要处表示要处理的理的5 5条指令。从图可见采用流水方式可条指令。从图可见采用流水方式可同时执行多条指令同时执行多条指令。05:5045指令流水线处理的时空图05:50462.流水线处理机的主

67、要指标(1 1)吞吐率)吞吐率 在在单位时间内单位时间内,流水线处理机流出的结果数流水线处理机流出的结果数称为吞吐率。对称为吞吐率。对指令而言就是单位时间里执行的指令数。如果流水线的子过程指令而言就是单位时间里执行的指令数。如果流水线的子过程所用时间不一样长,则吞吐率所用时间不一样长,则吞吐率P P应为最长子过程的倒数应为最长子过程的倒数. .(2 2)建立时间)建立时间 流水线开始工作,须经过一定时间才能流水线开始工作,须经过一定时间才能达到最大吞吐率达到最大吞吐率,这,这就是建立时间。若就是建立时间。若m m个子过程所用时间一样,均为个子过程所用时间一样,均为t t0 0,则建立时,则建立

68、时间间T T0 0mmt t0 0。05:50471.2.4 信息存储的字节顺序1.1.大端和小端存储法大端和小端存储法 大多数计算机使用大多数计算机使用8 8位位(bit)(bit)的数据块做为最小的可寻址的的数据块做为最小的可寻址的存储器单位,称为一个字节。存储器的每一个字节都用一个唯存储器单位,称为一个字节。存储器的每一个字节都用一个唯一的地址来标识。一的地址来标识。地址地址0x60000x60000x60010x60010x60020x60020x60030x6003数据数据( (十六进制十六进制) )0x890x890x670x670x450x450x230x23数据(二进制)数据(

69、二进制)0110011101100111010001010100010100100011001000110000000100000001地址地址0x60000x60000x60010x60010x60020x60020x60030x6003数据数据( (十六进制十六进制) )0x230x230x230x230x450x450x450x450x670x670x670x670x890x890x890x89数据(二进制)数据(二进制)000000010000000100000001000000010010001100100011001000110010001101000101010001010100

70、01010100010101100111011001110110011101100111(a a)小端存储法)小端存储法(b b)大端存储法)大端存储法05:5048大端和小端存储法 采用大端存储法还是小端存储法,各处理器厂商的立场和习采用大端存储法还是小端存储法,各处理器厂商的立场和习惯不同,并不存在技术原因。惯不同,并不存在技术原因。IntelIntel公司公司X86X86系列系列的微处理器都的微处理器都采用采用小端存储法小端存储法,而,而IBMIBM、MotorolaMotorola和和SunSun Microsystems Microsystems公司的公司的大多数微处理器大多数微处理

71、器采用大端存储法采用大端存储法。此外,还有一些微处理器,。此外,还有一些微处理器,如如ARMARM、MIPSMIPS和和MotorolaMotorola的的PowerPCPowerPC等,可以通过芯片上电启动等,可以通过芯片上电启动时确定的字节存储顺序规则,来时确定的字节存储顺序规则,来选择存储模式选择存储模式。对于大多数程序员来言,机器的字节存储顺序是完全不可见对于大多数程序员来言,机器的字节存储顺序是完全不可见的,无论哪一种存储模式的微处理器编译出的程序都会得到相的,无论哪一种存储模式的微处理器编译出的程序都会得到相同的结果。不过,当不同存储模式的微处理器之间通过网络传同的结果。不过,当不

72、同存储模式的微处理器之间通过网络传送二进制数据时,在有些情况下,字节顺序会成为问题送二进制数据时,在有些情况下,字节顺序会成为问题. .05:50492.可移植性问题 当在当在不同存储顺序的微处理器间进行程序移植时不同存储顺序的微处理器间进行程序移植时,要特别,要特别注注意存储模式的影响意存储模式的影响。把从软件得到的二进制数据写成一般的数。把从软件得到的二进制数据写成一般的数据格式往往会涉及到存储顺序的问题。据格式往往会涉及到存储顺序的问题。 在多台不同存储顺序的主机之间共享信息可以有两种方式:在多台不同存储顺序的主机之间共享信息可以有两种方式:一种是以单一存储方式共享数据,一种是允许主机以

73、不同的存一种是以单一存储方式共享数据,一种是允许主机以不同的存储方式共享数据。使用单一存储顺序只要解释一种格式,解码储方式共享数据。使用单一存储顺序只要解释一种格式,解码简单。使用多种存储方式不需要对数据的原顺序进行转化,使简单。使用多种存储方式不需要对数据的原顺序进行转化,使得编码容易,同时当编码器和解码器采用同一种存储方式时因得编码容易,同时当编码器和解码器采用同一种存储方式时因为不需要变换字节顺序,也能提高通信效率。为不需要变换字节顺序,也能提高通信效率。05:50503.通信中的存储顺序问题 在网络通信中,在网络通信中,InternetInternet协议(即协议(即IPIP协议)定义

74、了标准的网协议)定义了标准的网络字节顺序。该字节顺序被用于所有设计使用在络字节顺序。该字节顺序被用于所有设计使用在IPIP协议上的数协议上的数据包、高级协议和文件格式上。据包、高级协议和文件格式上。 很多网络设备也存在存储顺序问题:即字节中的位采用大端很多网络设备也存在存储顺序问题:即字节中的位采用大端法(最重要的位优先)或小端法(最不重要的位优先)发送。法(最重要的位优先)或小端法(最不重要的位优先)发送。这取决于这取决于OSIOSI模型最底层的数据链路层。模型最底层的数据链路层。05:50514.数据格式的存储顺序 一个典型的例子就是一个典型的例子就是日期表示方法日期表示方法,不同的国家采

75、用不同的,不同的国家采用不同的表示方法,美国和其他一些国家,日期格式顺序一般是:月一表示方法,美国和其他一些国家,日期格式顺序一般是:月一日一年日一年( (如如: :1212月月2424日日20072007年或年或12/24/2007),12/24/2007),这是中间表示法。这是中间表示法。 在世界大部分国家中,包括除瑞典、拉脱维亚和匈牙利之外在世界大部分国家中,包括除瑞典、拉脱维亚和匈牙利之外的欧洲,日期格式为:日一月一年(比如的欧洲,日期格式为:日一月一年(比如2424日日1212月月20072007或或12/24/200712/24/2007),这是小端表示法。),这是小端表示法。 中

76、国、日本和中国、日本和ISO 8601ISO 8601国际正式标准顺序的日期顺序排列顺国际正式标准顺序的日期顺序排列顺序是;年一月一日(比如序是;年一月一日(比如20072007年年1212月月2424日或日或2007-12-242007-12-24),这),这是大端表示法。在是大端表示法。在ISO 8601ISO 8601中年份必须用中年份必须用4 4位数字表示,月份和位数字表示,月份和日数分别用两位表示。因此,个位数的日和月必须在前面填补日数分别用两位表示。因此,个位数的日和月必须在前面填补一个零,如一个零,如0101,0202,0909等。等。05:50521.3 嵌入式微处理器的结构和

77、类型1.3.1 1.3.1 嵌入式微控制器嵌入式微控制器1.3.2 1.3.2 嵌入式微处理器嵌入式微处理器1.3.3 1.3.3 嵌入式嵌入式DSPDSP处理器处理器1.3.4 1.3.4 嵌入式片上系统嵌入式片上系统1.3.5 1.3.5 多核处理器多核处理器 05:5053嵌入式微处理器的结构和类型 从从19711971年年IntelIntel公司推出第一块微处理器芯片公司推出第一块微处理器芯片40044004到今天,到今天,嵌入式微处理器已有嵌入式微处理器已有3030多年的发展历史。多年的发展历史。 嵌入式系统硬件嵌入式系统硬件一般由嵌入式微处理器、存储器和输入一般由嵌入式微处理器、存

78、储器和输入/ /输输出组成,其中嵌入式微处理器是嵌入式硬件系统的核心。出组成,其中嵌入式微处理器是嵌入式硬件系统的核心。 嵌入式微处理器的嵌入式微处理器的字长字长宽度可分为宽度可分为4 4位、位、8 8位、位、1616位、位、3232位和位和6464位。一般把位。一般把1616位及以下的称为位及以下的称为嵌入式微控制器嵌入式微控制器(Embedded Embedded Micro ControllerMicro Controller),),3232位及以上的称为位及以上的称为嵌入式微处理器嵌入式微处理器。 微处理器内部仅包含处理器称为微处理器内部仅包含处理器称为一般用途微处理器一般用途微处理器

79、。将。将CPUCPU、ROMROM、RAMRAM及及I/OI/O等集成到一个芯片上,称为等集成到一个芯片上,称为单芯片微控制器单芯片微控制器。 根据用途,可分为根据用途,可分为嵌入式微控制器嵌入式微控制器、嵌入式微处理器嵌入式微处理器、嵌入嵌入式式DSPDSP处理器处理器、嵌入式片上系统嵌入式片上系统、双核或、双核或多核处理器多核处理器等类型。等类型。05:50541.3.1 嵌入式微控制器 嵌入式微控制器(嵌入式微控制器(Micro Controller UnitMicro Controller Unit,MCUMCU)又称为)又称为单单片机片机,芯片内部集成,芯片内部集成ROMROM、EP

80、ROMEPROM、RAMRAM、总线、总线逻辑、定时、总线、总线逻辑、定时/ /计数器、看门狗、计数器、看门狗、I/OI/O、串行口、脉宽调制输出(、串行口、脉宽调制输出(PWMPWM)、)、A/DA/D、D/AD/A、FlashFlash、EEPROMEEPROM等各种必要功能和外设。嵌入式微控制器等各种必要功能和外设。嵌入式微控制器具有具有单片化单片化、体积小体积小、功耗和成本低功耗和成本低,可靠性高可靠性高等特点,约占等特点,约占嵌入式系统市场份额的嵌入式系统市场份额的7070。嵌入式微控制器品种和数量很多,。嵌入式微控制器品种和数量很多,典型产品有典型产品有80518051、MCS-2

81、51MCS-251、MCS-96/196/296MCS-96/196/296、C166/167C166/167、68K68K系列,系列,TITI公司的公司的MSP430MSP430系列和系列和MotorolaMotorola公司的公司的68H1268H12系列,以及系列,以及MCU8XC930/931MCU8XC930/931、C540C540、C541C541,并且有支持,并且有支持I I2 2C C、CAN-BUSCAN-BUS、 LCDLCD及众多专用嵌入式微控制器和兼容系列。及众多专用嵌入式微控制器和兼容系列。05:50551.3.2 嵌入式微处理器 嵌入式微处理器嵌入式微处理器(Em

82、bedded Micro Processing UnitEmbedded Micro Processing Unit,EMPUEMPU)由)由通用计算机中的通用计算机中的CPUCPU发展发展而来,嵌入式微处理器只保留而来,嵌入式微处理器只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,以最低的功耗和资源实现嵌入式应用的特殊要求。通常嵌入式以最低的功耗和资源实现嵌入式应用的特殊要求。通常嵌入式微处理器把微处理器把CPUCPU、ROMROM、RAMRAM及及I/OI/O等做到同一个芯片上。等做到同一个芯片上。3232位微位微处理器

83、采用处理器采用3232位的地址和数据总线,其地址空间达到了位的地址和数据总线,其地址空间达到了2 232324GB4GB。目前目前主流的主流的3232位嵌入式微处理器位嵌入式微处理器系列主要有系列主要有ARMARM系列、系列、MIPSMIPS系列、系列、PowerPCPowerPC系列等。属于这些系列的嵌入式微处理器产品很多,有系列等。属于这些系列的嵌入式微处理器产品很多,有千种以上。千种以上。05:50561.ARM系列 ARM ARM(Advanced RISC MachineAdvanced RISC Machine)公司的)公司的ARMARM微处理器体系结微处理器体系结构目前被公认为是

84、构目前被公认为是嵌入式应用领域领先嵌入式应用领域领先的的3232位嵌入式位嵌入式RISCRISC微处微处理器理器结构。结构。ARMARM体系结构目前发展并定义了体系结构目前发展并定义了7 7种不同的版本。从种不同的版本。从版本版本1 1到版本到版本7 7,ARMARM体系的指令集功能不断扩大。体系的指令集功能不断扩大。ARMARM处理器系处理器系列中的各种处理器,虽然在实现技术、应用场合和性能方面都列中的各种处理器,虽然在实现技术、应用场合和性能方面都不相同,但只要支持相同的不相同,但只要支持相同的ARMARM体系版本,基于它们的应用软件体系版本,基于它们的应用软件是兼容的。表是兼容的。表1.

85、3.11.3.1给出了给出了ARMARM体系结构各版本的特点。体系结构各版本的特点。 目前,目前,70%70%的移动电话的移动电话、大量的、大量的游戏机游戏机、手持、手持PCPC和和机顶盒机顶盒等等都已采用了都已采用了ARMARM处理器,许多一流的芯片厂商都是处理器,许多一流的芯片厂商都是ARMARM的授权用的授权用户,如户,如IntelIntel、SamsungSamsung、TITI、FreescaleFreescale、STST等公司。等公司。05:5057ARM体系结构版本及特点版本版本ARM系列系列特点特点ARMv1ARMv1ARM1ARM1该版体系结构只在原型机该版体系结构只在原型

86、机ARM1ARM1出现过,没有用出现过,没有用于商业产品。基本性能:于商业产品。基本性能: 基本的数据处理指令(无乘法)基本的数据处理指令(无乘法) 26 26位寻址位寻址ARMv2ARMv2ARM2ARM2和和ARM3ARM3该版体系结构对该版体系结构对ARMv1ARMv1版进行了扩展,版本版进行了扩展,版本ARMv2aARMv2a是是v2v2版的变种,版的变种,ARM3ARM3芯片采用了芯片采用了ARMv2aARMv2a。ARMv2ARMv2版增加了以下功能:版增加了以下功能: 32 32位乘法和乘加指令位乘法和乘加指令 支持支持3232位协处理器操作指令位协处理器操作指令 快速中断模式快

87、速中断模式05:5058ARM体系结构版本及特点版本版本ARM系列系列特点特点ARMv3ARMv3ARMv3MARMv3MARM6ARM6、ARM7DIARM7DI、ARM7MARM7MARMv3ARMv3版体系结构对版体系结构对ARMv2ARMv2体系结构改动较大体系结构改动较大; ; 寻址空间增至寻址空间增至3232位(位(4GB4GB) 独立的当前程序状态寄存器独立的当前程序状态寄存器CPSRCPSR和程序状态和程序状态保存寄存器保存寄存器SPSRSPSR,保存程序异常中断时的程序,保存程序异常中断时的程序状态,以便于对异常的处理状态,以便于对异常的处理 增加异常中断和未定义两种处理器模

88、式增加异常中断和未定义两种处理器模式 增加了增加了MMUMMU支持支持 ARMv3M ARMv3M增加了有符号和无符号长乘法指令增加了有符号和无符号长乘法指令ARMv4ARMv4ARMv4TARMv4TStrongARMStrongARM、ARM7TDMIARM7TDMI、ARM9TARM9TARMv4ARMv4版体系结构目前应用最广版体系结构目前应用最广, ,在在v3v3版上作了版上作了进一步扩充进一步扩充, ,指令集中增加了以下功能:指令集中增加了以下功能: 增加了系统模式增加了系统模式 增加了增加了1616位位ThumbThumb指令集指令集 完善了软件中断完善了软件中断SWISWI指令

89、的功能指令的功能 不再支持不再支持2626位寻址模式位寻址模式05:5059ARM体系结构版本及特点版本版本ARM系列系列特点特点ARMv5TEARMv5TEJARM9E、ARM10E、Xscale、ARM7EJ、ARM926EJARMv5ARMv5体系结构在体系结构在v4v4基础上增加了指令基础上增加了指令, ,包括包括: : 增加增加ARMARM与与ThumbThumb状态之间切换的指令状态之间切换的指令 增强乘法指令和快速乘累加指令增强乘法指令和快速乘累加指令 增加了数字信号处理指令(增加了数字信号处理指令(ARMv5TEARMv5TE版)版) 增加了增加了JavaJava加速功能加速功

90、能(ARMv5TEJ(ARMv5TEJ版)版)ARMv6ARM11ARMv6ARMv6体系结构发布于体系结构发布于20012001年年, ,先在先在ARM11ARM11中使用。中使用。在在ARMv5ARMv5版基础上增加了以下功能:版基础上增加了以下功能: Thumb-2 Thumb-2 增强代码密度增强代码密度 SIMD SIMD 增强媒体和数字处理功能增强媒体和数字处理功能 TrustZoneTrustZone 提供增强的安全性能提供增强的安全性能 IEM IEM 提供增强的功耗管理功能提供增强的功耗管理功能05:5060ARM体系结构版本及特点版本版本ARM系列系列特点特点ARMv7AR

91、Mv7CortexCortex系系列列ARMv7ARMv7版体系结构定义了版体系结构定义了3 3种不同的微处理器系列:种不同的微处理器系列: A A系列为面向应用的微处理器核,支持复杂操作系系列为面向应用的微处理器核,支持复杂操作系统和用户应用统和用户应用 R R系列为深度嵌入的微处理器核系列为深度嵌入的微处理器核, ,针对实时系统应用针对实时系统应用 M M系列为微控制核系列为微控制核, ,针对成本敏感的嵌入式控制应用针对成本敏感的嵌入式控制应用05:50612.MIPS系列 美国斯坦福大学美国斯坦福大学HennessyHennessy教授领导的研究小组研制的教授领导的研究小组研制的MIPS

92、MIPS(无互锁流水级的微处理器无互锁流水级的微处理器)是世界上很流行的一种)是世界上很流行的一种RISCRISC处理处理器,其机制是尽量利用软件办法器,其机制是尽量利用软件办法避免流水线中的数据相关避免流水线中的数据相关问题。问题。 从从2020世纪世纪8080年代初期年代初期MIPSMIPS处理器发明到现在的处理器发明到现在的2020多年,多年,MIPSMIPS以其高性能的处理能力被广泛应用于以其高性能的处理能力被广泛应用于宽带接入宽带接入、路由器路由器、调制调制解调设备解调设备、电视电视、游戏游戏、打印机打印机、办公用品办公用品、DVDDVD播放播放等领域。等领域。 和和ARMARM公司

93、一样,公司一样,MIPSMIPS公司本身公司本身并不从事芯片的生产活动并不从事芯片的生产活动(只进行设计),不过其他公司如果要生产该芯片,则必须得(只进行设计),不过其他公司如果要生产该芯片,则必须得到到MIPSMIPS公司的许可。公司的许可。 MIPS 32 MIPS 32位处理器内核系列和特点如表位处理器内核系列和特点如表1.3.21.3.2所示。所示。05:5062MIPS 32位处理器内核系列和特点内核内核特点特点M4KM4KTMTM系列系列针对多针对多CPUCPU集成的集成的SOCSOC应用领域为下一代消费应用领域为下一代消费类产品、下一代网络和宽带产品类产品、下一代网络和宽带产品

94、M4KM4KT MT M系列系列4 4KpKpTMTM、4Kc4KcTMTM内核内核针对针对SOCSOC系统优化,其内存、指令缓存和数系统优化,其内存、指令缓存和数据缓存都可以根据具体应用调整大小据缓存都可以根据具体应用调整大小 M4KM4KTMTM系列系列4 4KEpKEpTMTM、4KEm4KEmTMTM和和4 4KEcKEcTMTM内核内核与与4 4K KTMTM系列类似,但能提供更高性能系列类似,但能提供更高性能, ,在同样在同样时钟频率下指令执行周期更短时钟频率下指令执行周期更短 4 4KSKSTMTM系列系列4 4KScKScTMTM和和4 4KSdKSdTMTM内内核核针对数据通

95、信的应用。其特点是采用了针对数据通信的应用。其特点是采用了SmartMIPSSmartMIPSTMTM结构,拥有反黑客的特性,可以结构,拥有反黑客的特性,可以让数据加密更加快速,在网络处理、智能卡、让数据加密更加快速,在网络处理、智能卡、机顶盒等方面有广泛应用机顶盒等方面有广泛应用05:5063MIPS 32位处理器内核系列和特点Pro Pro SeriesSeriesTMTM系列系列M4K ProM4K ProTMTM、4KE Pro4KE ProTMTM、4KEm Pro4KEm ProTMTM、4KEc 4KEc PromsProms和和4 4KSdKSd ProProTMTM内核内核该

96、系列内核允许该系列内核允许SOCSOC的设计者创造自己的的设计者创造自己的CorExtendCorExtendTMTM扩展指令集。这样可以根据具扩展指令集。这样可以根据具体应用设计出性能更好,效率更高的产品体应用设计出性能更好,效率更高的产品2424K KTMTM系列系列针对图形、针对图形、JAVAJAVA应用应用, ,包含了最快的浮点包含了最快的浮点乘法器乘法器, ,也支持也支持CorExtendCorExtendTMTM扩展指令集扩展指令集, ,是是数字电视、机顶盒和数字电视、机顶盒和DVDDVD等多媒体应用的等多媒体应用的理想选择理想选择 05:50643.PowerPC PowerPC

97、PowerPC是是FreescaleFreescale(原原MotorolaMotorola)公司的产品。公司的产品。PowerPC RISCPowerPC RISC处理器采处理器采用了用了超标量处理器设计超标量处理器设计和调整内存缓冲器,修改了指令处理设计,它完成一和调整内存缓冲器,修改了指令处理设计,它完成一个操作所需的指令数比个操作所需的指令数比CISCCISC处理器要多,但完成操作的总时间却减少了。处理器要多,但完成操作的总时间却减少了。 PowerPC PowerPC内核采用内核采用独特分支处理单元独特分支处理单元可以让可以让指令预取效率指令预取效率大大提高大大提高, ,即使即使指令

98、流水线上出现跳转指令指令流水线上出现跳转指令, ,也不会影响到其运算单元的运算效率。也不会影响到其运算单元的运算效率。PowerPC PowerPC RISCRISC处理器设计了处理器设计了多级内存高速缓冲区多级内存高速缓冲区,以便让那些正在访问(或可能会被,以便让那些正在访问(或可能会被访问)的数据和指令总是存储在调整内存中。这种访问)的数据和指令总是存储在调整内存中。这种内存分层内存分层和和内存管理设计内存管理设计,令系统的内存访问性能非常接近调整内存,但其成本却与低速内存相近。而令系统的内存访问性能非常接近调整内存,但其成本却与低速内存相近。而且且PowerPCPowerPC还引入了独立

99、的分支处理器来进一步解决这个问题,这个处理单还引入了独立的分支处理器来进一步解决这个问题,这个处理单元在读入指令队列后,会元在读入指令队列后,会找出其中的跳转指令找出其中的跳转指令,然后预取跳转指令所指向的,然后预取跳转指令所指向的新的内存地址的指令,这样就大大提高了指令预取的效率。新的内存地址的指令,这样就大大提高了指令预取的效率。05:5065PowerPC PowerPC PowerPC内核内核采用超标量采用超标量(SuperscaleSuperscale)设计。在设计。在PowerPCPowerPC内内部,部,集成了多个处理器集成了多个处理器,这些处理器可以,这些处理器可以并行独立工作

100、并行独立工作,这样,这样就可以在一个时钟周期就可以在一个时钟周期执行多条指令执行多条指令。一个标准的。一个标准的601601处理器中处理器中便集成了一个便集成了一个定点处理器定点处理器、一个、一个浮点处理器浮点处理器和一个和一个分支处理器分支处理器,这种超标量设计提供了允许多条指令同时运行的多处理流水线。这种超标量设计提供了允许多条指令同时运行的多处理流水线。显然,这种指令的重叠程度取决于指令的顺序和种类。显然,这种指令的重叠程度取决于指令的顺序和种类。 PowerPC PowerPC具有具有字节非对齐操作字节非对齐操作的兼容特性,可以处理字节非的兼容特性,可以处理字节非对齐的存储器访问,这种

101、特性可以让它兼容许多从对齐的存储器访问,这种特性可以让它兼容许多从CISCCISC处理器处理器移植过来的指令和数据结构。移植过来的指令和数据结构。 PowerPC PowerPC同时同时支持大端小端支持大端小端BigBig/Little-Indian/Little-Indian)数据类型数据类型。因此因此PowerPCPowerPC可以很方便地与可以很方便地与6868K K系列处理器和数据结构兼容。系列处理器和数据结构兼容。PowerPCPowerPC可以通过一些特殊指令访问小端模式的数据。在这种情可以通过一些特殊指令访问小端模式的数据。在这种情况下,况下,PowerPCPowerPC不能访问

102、非字节对齐的数据。不能访问非字节对齐的数据。05:50661.3.3 嵌入式DSP处理器嵌入式嵌入式嵌入式嵌入式DSPDSPDSPDSP处理器(处理器(处理器(处理器(Digital Signal Digital Signal Digital Signal Digital Signal ProcessorProcessorProcessorProcessor,DSPDSPDSPDSP)是专门是专门是专门是专门用于信号处理方面的处理器用于信号处理方面的处理器用于信号处理方面的处理器用于信号处理方面的处理器,芯片内部采用程序和数据分开存,芯片内部采用程序和数据分开存,芯片内部采用程序和数据分开存,

103、芯片内部采用程序和数据分开存储和传输的储和传输的储和传输的储和传输的哈佛结构哈佛结构哈佛结构哈佛结构,具有专门,具有专门,具有专门,具有专门硬件乘法器硬件乘法器硬件乘法器硬件乘法器,采用,采用,采用,采用流水线操作流水线操作流水线操作流水线操作,提供特殊的提供特殊的提供特殊的提供特殊的DSPDSPDSPDSP指令指令指令指令,可用来快速地实现各种数字信号处理算法,可用来快速地实现各种数字信号处理算法,可用来快速地实现各种数字信号处理算法,可用来快速地实现各种数字信号处理算法,使其处理速度比最快的使其处理速度比最快的使其处理速度比最快的使其处理速度比最快的CPUCPUCPUCPU还快还快还快还快

104、10-5010-5010-5010-50倍倍倍倍。 在在DSPDSP处理器上是乘法与加法运算最基本的运算功能,除此处理器上是乘法与加法运算最基本的运算功能,除此之外,之外,DSPDSP处理器还用于如处理器还用于如有限脉冲响应滤波器有限脉冲响应滤波器(FIRFIR)、)、无限无限脉冲响应滤波器脉冲响应滤波器(IIRIIR)、)、离散傅利叶离散傅利叶(Discrete Fourier Discrete Fourier TransformsTransforms)及及离散余弦转换离散余弦转换(Discrete Cosine Discrete Cosine TransformsTransforms)等一

105、些等一些常见算法常见算法的实现。的实现。05:5067嵌入式DSP处理器 从从2020世纪世纪8080年代到现在,缩小年代到现在,缩小DSPDSP芯片尺寸始终是芯片尺寸始终是DSPDSP的技术发展方向。的技术发展方向。DSPDSP处理器已发展到处理器已发展到第第5 5代产品代产品,多数基于精简指令集计算(,多数基于精简指令集计算(RISCRISC)结构,并结构,并将将几个几个DSPDSP芯核芯核、MPUMPU芯核芯核、专用处理单元专用处理单元、外围电路单元和存储单元集成在、外围电路单元和存储单元集成在一个芯片上一个芯片上,成为,成为DSPDSP系统级集成电路。其系统集成度极高,并将系统级集成电

106、路。其系统集成度极高,并将DSPDSP芯核及芯核及外围元件综合集成在单一芯片上。外围元件综合集成在单一芯片上。 DSP DSP运算速度的提高主要依靠运算速度的提高主要依靠新工艺改进芯片结构新工艺改进芯片结构。目前一般的。目前一般的DSPDSP运算运算速度为速度为100100MIPSMIPS(即每秒钟可运算即每秒钟可运算1 1亿条指令)。亿条指令)。TITI的的TM320C6XTM320C6X芯片芯片由于采用由于采用超长指令字(全称为超长指令字(全称为Very Long Instruction Very Long Instruction WordWord,VLIWVLIW)结构设计,其处结构设计

107、,其处理速度已高达理速度已高达20002000MIPSMIPS。按照发展趋势,按照发展趋势,DSPDSP的运算速度完全可能再提高的运算速度完全可能再提高100100倍(达到倍(达到16001600GIPSGIPS)。)。 DSP DSP并行结构可分为并行结构可分为片内并行片内并行和和片间并行片间并行。可编程可编程DSPDSP使生产厂商可在同使生产厂商可在同一个一个DSPDSP平台上开发出各种不同型号的系列产品,以满足不同用户的需求。平台上开发出各种不同型号的系列产品,以满足不同用户的需求。同时,可编程同时,可编程DSPDSP也为广大用户提供了易于升级的良好途径。为缩短软件开也为广大用户提供了易

108、于升级的良好途径。为缩短软件开发的周期,发的周期,DSPDSP软件开发通常使用高级语言进行。软件开发通常使用高级语言进行。05:50681.3.4 嵌入式片上系统嵌入式片上系统(嵌入式片上系统(System On System On ChipChip,SOCSOC)最大的特点是成功实现了最大的特点是成功实现了软硬软硬件无缝结合件无缝结合,直接在,直接在处理器片内嵌入操作系统的代码模块处理器片内嵌入操作系统的代码模块,而且具有极高的,而且具有极高的综合性,在一个芯片内部运用综合性,在一个芯片内部运用VHDLVHDL等等硬件描述语言硬件描述语言,即可实现一个复杂的系,即可实现一个复杂的系统。与传统

109、的系统设计不同,用户不需要绘制庞大复杂的电路板,一点点地统。与传统的系统设计不同,用户不需要绘制庞大复杂的电路板,一点点地连接焊制,只需要使用连接焊制,只需要使用精确的语言精确的语言,综合时序设计综合时序设计直接在器件库中直接在器件库中调用各种调用各种通用处理器通用处理器的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产,的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产,设计生产效率高。设计生产效率高。 在在SOCSOC中,绝大部分系统构件都是在系统内部,系统简洁,系统的中,绝大部分系统构件都是在系统内部,系统简洁,系统的体积体积和和功耗小功耗小,可靠性高可靠性高。SOCSOC多是多

110、是专用的专用的,所以大部分产品都不为用户所知,比,所以大部分产品都不为用户所知,比较典型的较典型的SOCSOC产品如产品如PhilipsPhilips公司的公司的Smart XASmart XA,少数通用系列如少数通用系列如SiemensSiemens公司公司的的TriCoreTriCore、MotorolaMotorola公司的公司的M-CoreM-Core、某些某些ARMARM系列器件、系列器件、EchelonEchelon和和MotorolaMotorola联合研制的联合研制的NeuronNeuron芯片等。芯片等。 SOC SOC已在声音、图像、影视、网络及系统逻辑等应用领域中广泛应用

111、已在声音、图像、影视、网络及系统逻辑等应用领域中广泛应用。05:50691.3.5 多核处理器 双核或多核处理器早已在双核或多核处理器早已在SOCSOC、多媒体、网络等一些嵌入式多媒体、网络等一些嵌入式处理器中采用。但真正引人注目的是多核技术被引入到最高性处理器中采用。但真正引人注目的是多核技术被引入到最高性能的通用处理器中。能的通用处理器中。 将将两个或多个两个或多个CPUCPU核封装在一个芯片内部核封装在一个芯片内部,可节省大量的晶,可节省大量的晶体管和封装成本,同时还能显著提高处理器的性能。另外,由体管和封装成本,同时还能显著提高处理器的性能。另外,由于多核处理器对外的于多核处理器对外的

112、“界面界面”是统一的,用户不会在主板、硬是统一的,用户不会在主板、硬件体系方面做大的改变,从兼容性和系统升级成本方面来考虑件体系方面做大的改变,从兼容性和系统升级成本方面来考虑有诸多的优势。有诸多的优势。05:5070多核处理器 实现两个或实现两个或多个内核协调工作多个内核协调工作通常采用通常采用对称对称(SymmetricSymmetric)多处理技术多处理技术和和非对称多处理非对称多处理(AsymmetricAsymmetric)两种方式。例如两种方式。例如IBM Power 4IBM Power 4处理器处理器采用对称采用对称多处理技术,将多处理技术,将两颗完全一样的处理器封装在一个芯片

113、内两颗完全一样的处理器封装在一个芯片内,达到双倍或接近,达到双倍或接近双倍的处理性能,由于共享了缓存和系统总线,因此这种做法的优点是能节双倍的处理性能,由于共享了缓存和系统总线,因此这种做法的优点是能节省运算资源。例如省运算资源。例如TITI公司的公司的OMAP5910OMAP5910双核处理器双核处理器采用一种采用一种非对称多处理非对称多处理的工的工作方式,即两个处理内核彼此不同,作方式,即两个处理内核彼此不同,各自处理和执行特定的功能各自处理和执行特定的功能,在软件的,在软件的协调下分担协调下分担不同的计算任务不同的计算任务,比如一个执行加密,而另一个执行,比如一个执行加密,而另一个执行T

114、CP/IPTCP/IP协议协议处理。处理。 在在20012001年,年,IBMIBM公司推出了世界上第一款基于双核的公司推出了世界上第一款基于双核的Power 4Power 4处理器的高处理器的高性能服务器处理器;随后性能服务器处理器;随后SunSun和和HPHP公司都先后推出了基于双核体系结构的公司都先后推出了基于双核体系结构的UltraSPARCUltraSPARC及及PA-RISCPA-RISC芯片。当前这些多核处理器主要应用于对提高性能和芯片。当前这些多核处理器主要应用于对提高性能和降低功耗最为迫切的服务器领域。降低功耗最为迫切的服务器领域。05:5071ARM9嵌入式系统设计基础教程

115、河南理工大学计算机学院河南理工大学计算机学院通通 信信 工工 程程 系系赵鸿图赵鸿图E-mail: E-mail: TEL: 13513825210TEL: 1351382521005:5072课程理论教学内容安排课程理论教学内容安排第第1 1章章 嵌入式系统基础知识嵌入式系统基础知识第第2 2章章 ARM ARM体系结构体系结构第第3 3章章 32 Bit RISC32 Bit RISC微处理器微处理器S3C2410AS3C2410A第第4 4章章 嵌入式系统的存储器系统嵌入式系统的存储器系统第第5 5章章 嵌入式系统输入嵌入式系统输入/ /输出设备接口输出设备接口第第6 6章章 嵌入式系

116、统总线接口嵌入式系统总线接口第第7 7章章 嵌入式系统网络接口嵌入式系统网络接口第第8 8章章 嵌入式系统嵌入式系统软件及操作系统基础软件及操作系统基础软件及操作系统基础软件及操作系统基础第第9 9章章 ARMARM汇编语言程序设计基础汇编语言程序设计基础第第1010章章 BootloaderBootloader设计基础设计基础第第1111章章 LinuxLinux操作系统基础操作系统基础第第1212章章 嵌入式嵌入式LinuxLinux软件设计软件设计第第1313章章 图形用户接口(图形用户接口(GUIGUI) 05:5073第2章 ARM体系结构2.1ARM体系结构简介2.2ARM微处理器

117、结构2.3ARM微处理器的寄存器结构 2.4ARM微处理器的异常处理2.5ARM的存储器结构2.6ARM微处理器指令系统2.7ARM微处理器的接口05:50742.1ARM体系结构简介 ARM ARM ARM ARM(Advanced RISC MachinesAdvanced RISC MachinesAdvanced RISC MachinesAdvanced RISC Machines)公司)公司)公司)公司1991199119911991年成立于英国剑年成立于英国剑年成立于英国剑年成立于英国剑桥桥桥桥,专门从事基于,专门从事基于,专门从事基于,专门从事基于RISCRISCRISCRIS

118、C技术芯片设计开发技术芯片设计开发技术芯片设计开发技术芯片设计开发,主要出售芯片设计,主要出售芯片设计,主要出售芯片设计,主要出售芯片设计技术的授权技术的授权技术的授权技术的授权,作为,作为,作为,作为知识产权供应商知识产权供应商知识产权供应商知识产权供应商,不直接芯片生产,不直接芯片生产,不直接芯片生产,不直接芯片生产,转让设转让设转让设转让设计许可计许可计许可计许可由合作公司生产各具特色的芯片,半导体生产商从由合作公司生产各具特色的芯片,半导体生产商从由合作公司生产各具特色的芯片,半导体生产商从由合作公司生产各具特色的芯片,半导体生产商从ARMARMARMARM购购购购买设计的买设计的买设

119、计的买设计的ARMARMARMARM微处理器核,根据不同的应用领域,加入外围电路,微处理器核,根据不同的应用领域,加入外围电路,微处理器核,根据不同的应用领域,加入外围电路,微处理器核,根据不同的应用领域,加入外围电路,形成自己的形成自己的形成自己的形成自己的ARMARMARMARM微处理器芯片进入市场。目前,全世界有几十家微处理器芯片进入市场。目前,全世界有几十家微处理器芯片进入市场。目前,全世界有几十家微处理器芯片进入市场。目前,全世界有几十家大的半导体公司使用大的半导体公司使用大的半导体公司使用大的半导体公司使用ARMARMARMARM公司的授权,使公司的授权,使公司的授权,使公司的授权

120、,使ARMARMARMARM技术获得更多的第技术获得更多的第技术获得更多的第技术获得更多的第三方工具、制造、软件的支持,又使系统成本降低,使产品更三方工具、制造、软件的支持,又使系统成本降低,使产品更三方工具、制造、软件的支持,又使系统成本降低,使产品更三方工具、制造、软件的支持,又使系统成本降低,使产品更容易进入市场,更具有竞争力。目前,容易进入市场,更具有竞争力。目前,容易进入市场,更具有竞争力。目前,容易进入市场,更具有竞争力。目前,ARMARMARMARM已深入到工业控制、已深入到工业控制、已深入到工业控制、已深入到工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品各个无线通

121、讯、网络应用、消费类电子产品、成像和安全产品各个无线通讯、网络应用、消费类电子产品、成像和安全产品各个无线通讯、网络应用、消费类电子产品、成像和安全产品各个领域。领域。领域。领域。05:5075ARM的业务模型授权费授权费IPARM创造和设计创造和设计IP产品,例如:芯片产品,例如:芯片Partner把把ARMIP和和其他其他IP集成进产品集成进产品版权费版权费单价单价OEM用来自用来自ARMPartner的芯片设计的芯片设计制造最终用户产品制造最终用户产品业务拓展业务拓展/市场格局市场格局05:5076业界需要何种服务?无晶圆无晶圆IC设计厂商设计厂商晶圆晶圆代工厂代工厂培训培训大学科研大学

122、科研参考设计参考设计应用软件应用软件软件软件开发工具开发工具05:5077ARMARM在中国在中国: :与国内电子行业紧密合作的知识产权公司与国内电子行业紧密合作的知识产权公司中国无晶圆厂半导体公司中国无晶圆厂半导体公司 中兴集成中兴集成 购买购买 ARM922TARM922T CPU CPU 授权,用于网络系统芯片授权,用于网络系统芯片 上海华虹集成电路上海华虹集成电路 购买购买 ARM SC100ARM SC100 CPU CPU 授权,用于授权,用于JavaJava智能卡智能卡 大唐大唐购买购买 ARM946EARM946E CPU CPU 授权,用于授权,用于SCDMASCDMA基带芯

123、片基带芯片 上海复旦微电子上海复旦微电子购买购买ARM7TDMIARM7TDMI CPU CPU 授权,用于多媒体芯片授权,用于多媒体芯片 上海杰得微电子上海杰得微电子购买购买ARM926ARM926 CPU Prime Starter Kit CPU Prime Starter Kit授权,用于多授权,用于多媒体芯片媒体芯片 华为技术华为技术购买购买 ARM7TDMIARM7TDMI CPU CPU,ARM926ARM926 CPU Prime Starter Kit CPU Prime Starter Kit授授权,用于权,用于WCDMAWCDMA等芯片等芯片晶原代工厂晶原代工厂 中芯国际

124、中芯国际 (0.18um, ARM7TDMI, ARM922T)(0.18um, ARM7TDMI, ARM922T)大学及政府机构大学及政府机构 东南大学东南大学: : ARM7TDMIARM7TDMI 上海集成电路设计研究中心上海集成电路设计研究中心(ICC): (ICC): ARM7TDMIARM7TDMI 上海交通大学上海交通大学: : ARM922TARM922T 北京工业大学北京工业大学: : ARM7TDMIARM7TDMI 香港科技园:香港科技园:ARM7TDMIARM7TDMI05:5078ARM在中国:与国内电子行业紧密合作的知识产权公司 ARM ARM RealViewR

125、ealView 开发工具中国分销商开发工具中国分销商 香港科汇宏盛分部香港科汇宏盛分部、北京旋极北京旋极 ARM Authorized Training CentreARM Authorized Training Centre(ARMARM授权培训中心)授权培训中心) 北京旋极、北京微芯力、深圳英蓓特北京旋极、北京微芯力、深圳英蓓特培训中心培训中心ARM Approved Design Centre ARM Approved Design Centre (ARMARM样品设计中心)样品设计中心) 众华众华RTOS RTOS 公司(实时操作系统开发)公司(实时操作系统开发) 普天慧信普天慧信,

126、,科银京成、北京凯思昊鹏、中科红旗科银京成、北京凯思昊鹏、中科红旗, ,世纪科泰等世纪科泰等 20042004年年9 9月月7 7日,日,ARMARM北京分处成立北京分处成立: : 科银京成和凯思昊鹏与科银京成和凯思昊鹏与ARMARM合作,开发支持合作,开发支持JTEKJTEK和和SWERVESWERVE技术技术 中芯国际拓展中芯国际拓展ARMARM代工计划代工计划, ,获获ARM926EJARM926EJ处理器处理器0.130.13微米工艺授权微米工艺授权 北京振戎融通与北京振戎融通与ARMARM合作合作, ,将将JTEKJTEK集成在中国联通新一代集成在中国联通新一代JavaJava环境中

127、环境中05:5079采用RISC架构的ARM微处理器特点 支持支持支持支持Thumb(6Thumb(6Thumb(6Thumb(6位位位位)/)/)/)/ARM(32ARM(32ARM(32ARM(32位位位位) ) ) )双指令集,兼容双指令集,兼容双指令集,兼容双指令集,兼容8 8 8 8位位位位/16/16/16/16位器件。位器件。位器件。位器件。ThumbThumbThumbThumb指令比指令比指令比指令比8 8 8 8位和位和位和位和16161616位位位位CISC/RISC CPUCISC/RISC CPUCISC/RISC CPUCISC/RISC CPU有更好的代码密度;有

128、更好的代码密度;有更好的代码密度;有更好的代码密度; 指令执行采用指令执行采用3 3级流水线级流水线/5/5级流水线技术;级流水线技术; 具有具有指令指令CacheCache和和数据数据CacheCache,大量大量使用寄存器使用寄存器,指令执行速,指令执行速度更快。大多数数据操作在寄存器中完成。寻址方式灵活简度更快。大多数数据操作在寄存器中完成。寻址方式灵活简单,单,执行效率高执行效率高。指令长度固定指令长度固定( (ARM ARM 3232位,位,Thumb Thumb 1616位位) ); 支持大端格式和小端格式两种方法存储字数据;支持大端格式和小端格式两种方法存储字数据; 支持支持By

129、te(Byte(8 8位位) )、HalfwordHalfword( (1616位位) )和和Word(Word(3232位位) )数据类型数据类型; ; 支持用户、快中断、中断、管理、中止、系统和未定义等支持用户、快中断、中断、管理、中止、系统和未定义等7 7种处理器模式,除用户模式外,其余均为特权模式;种处理器模式,除用户模式外,其余均为特权模式;05:5080采用RISC架构的ARM微处理器特点 处理器芯片上都嵌入了处理器芯片上都嵌入了在线仿真在线仿真ICE-RTICE-RT逻辑逻辑,便于通过,便于通过JTAGJTAG来仿真来仿真调试调试ARMARM体系结构芯片,可以避免使用昂贵的在线仿

130、体系结构芯片,可以避免使用昂贵的在线仿真器。另外,在处理器核中还可以嵌入真器。另外,在处理器核中还可以嵌入跟踪宏单元跟踪宏单元ETMETM,用用于于监控内部总线监控内部总线,实时,实时跟踪跟踪指令和数据的指令和数据的执行执行; 具有具有片上总线片上总线AMBAAMBA(Advanced(Advanced Micro-controller Bus Micro-controller Bus Architecture)Architecture)。AMBAAMBA定义了定义了3 3组总线组总线:先进高性能总线先进高性能总线AHB(AdvancedAHB(Advanced High performanc

131、e Bus) High performance Bus);先进系统总线先进系统总线ASB(AdvancedASB(Advanced System Bus) System Bus);先进外围总线先进外围总线APB(AdvancedAPB(Advanced Peripheral Bus)Peripheral Bus)。通过通过AMBAAMBA可以方便地扩充各种处理器及可以方便地扩充各种处理器及I/OI/O,可以把可以把DSPDSP、其他处理器和其他处理器和I/O(I/O(如如UARTUART、定时器和接口定时器和接口等等) )都集成在一块芯片中;都集成在一块芯片中; 采用采用存储器映像存储器映像I

132、/OI/O方式,方式,I/OI/O端口作为特殊的存储器地址;端口作为特殊的存储器地址;05:5081采用RISC架构的ARM微处理器特点 具有具有协处理器接口协处理器接口。ARMARM允许接允许接1616个协处理器个协处理器,如,如CP15CP15用于用于系统控制,系统控制,CP14CP14用于调试控制器;用于调试控制器; 采用了采用了降低电源电压降低电源电压,可工作在,可工作在3.03.0V V以下;以下;减少门的翻转次减少门的翻转次数数,当某个功能电路不需要时禁止门翻转;,当某个功能电路不需要时禁止门翻转;减少门的数目减少门的数目,即,即降低芯片的集成度;降低芯片的集成度;降低时钟频率降低

133、时钟频率等一些措施降低功耗;等一些措施降低功耗; 体积小体积小、低成本低成本、高性能高性能 ARM ARM微处理器包括微处理器包括ARM7ARM7、ARM9ARM9、ARM9EARM9E、ARM10EARM10E、SecurCoreSecurCore、以及以及IntelIntel的的StrongARMStrongARM、XScaleXScale和其它厂商基于和其它厂商基于ARMARM体系结构的体系结构的处理器,除了具有处理器,除了具有ARMARM体系结构的共同特点以外,每一个系列的体系结构的共同特点以外,每一个系列的ARMARM微处理器都有各自的特点和应用领域。微处理器都有各自的特点和应用领域

134、。05:5082典型的ARM体系结构方框图05:5083典型ARM体系结构的主要部件1.1.ALUALU ARM ARM体系结构的体系结构的ALUALU与常用的与常用的ALUALU逻辑结构基本相同逻辑结构基本相同, ,由两个操由两个操作数锁存器、加法器、逻辑功能、结果及零检测逻辑构成。作数锁存器、加法器、逻辑功能、结果及零检测逻辑构成。2.2.桶形移位寄存器桶形移位寄存器 ARM ARM采用了采用了32323232位桶形移位寄存器位桶形移位寄存器, ,左移左移/ /右移右移n n位、环移位、环移n n位位和算术右移和算术右移n n位等都可一次完成位等都可一次完成, ,可有效减少移位的延迟时间。

135、可有效减少移位的延迟时间。3.3.高速乘法器高速乘法器 ARM ARM为了提高运算速度,采用为了提高运算速度,采用2 2位乘法的方法,位乘法的方法,2 2位乘法可根据位乘法可根据乘数的乘数的2 2位来实现位来实现“加移位加移位”运算。运算。ARMARM的高速乘法器采用的高速乘法器采用32328 8位的结构,完成位的结构,完成32322 2位乘法也只需位乘法也只需5 5个时钟周期。个时钟周期。05:5084典型ARM体系结构的主要部件4.4.浮点部件浮点部件 在在ARMARM体系结构中,浮点部件作为选件可根据需要选用,体系结构中,浮点部件作为选件可根据需要选用,FPA10FPA10浮点加速器以协

136、处理器方式与浮点加速器以协处理器方式与ARMARM相连,并通过协处理相连,并通过协处理器指令的解释来执行。浮点的器指令的解释来执行。浮点的Load/StoreLoad/Store指令使用频度要达指令使用频度要达到到6767,故,故FPA10FPA10内部也采用内部也采用Load/StoreLoad/Store结构,有结构,有8 8个个8080位浮位浮点寄存器组,指令执行也采用流水线结构。点寄存器组,指令执行也采用流水线结构。5.5.控制器控制器 ARM ARM的控制器采用硬接线的可编程逻辑阵列的控制器采用硬接线的可编程逻辑阵列PLAPLA,其输入端有其输入端有1414根、输出端有根、输出端有4

137、040根,分别控制乘法器、协处理器及地址寄根,分别控制乘法器、协处理器及地址寄存器、存器、ALUALU和移位器等。和移位器等。6.6.寄存器寄存器 ARM ARM有有3737个寄存器,个寄存器,3131个通用个通用3232位寄存器和位寄存器和6 6个状态寄存器。个状态寄存器。05:50852.2ARM微处理器结构2.2.12.2.1ARM7ARM7微处理器微处理器 2.2.22.2.2ARM9ARM9微处理器微处理器 2.2.32.2.3ARM9EARM9E微处理器微处理器 2.2.42.2.4ARM10EARM10E微处理器微处理器 2.2.52.2.5SecurCoreSecurCore微

138、处理器微处理器 2.2.62.2.6StrongARMStrongARM微处理器微处理器 2.2.72.2.7XScaleXScale微处理器微处理器05:50862.2.1ARM7微处理器 ARM7 ARM7系列微处理器包括系列微处理器包括ARM7TDMIARM7TDMI、ARM7TDMI-SARM7TDMI-S、ARM720TARM720T、ARM7EJARM7EJ几种类型。其中,几种类型。其中,ARM7TMDIARM7TMDI是目前使用最广泛的是目前使用最广泛的3232位嵌位嵌入式入式RISCRISC处理器,主频最高可达处理器,主频最高可达130 130 MIPSMIPS;采用能够提供采

139、用能够提供0.90.9MIPS/MHzMIPS/MHz的三级流水线结构;内嵌硬件乘法器的三级流水线结构;内嵌硬件乘法器(MultiplierMultiplier););支持支持1616位压缩指令集位压缩指令集ThumbThumb;嵌入式嵌入式ICEICE;支支持片上持片上DebugDebug;支持片上断点和调试点;指令系统与支持片上断点和调试点;指令系统与ARM9ARM9系列、系列、ARM9EARM9E系列和系列和ARM10EARM10E系列兼容;支持系列兼容;支持Windows Windows CECE、LinuxLinux、PalmPalm OSOS等操作系统。典型产品如等操作系统。典型产

140、品如SamsungSamsung公司的公司的S3C4510BS3C4510B。05:50871.ARM7TDMI处理器内核05:5088ARM7TDMI处理器组成主要部件 ARM7TDMI ARM7TDMI提供了存储器接口、提供了存储器接口、MMUMMU接口、协处理器接口和调接口、协处理器接口和调试接口,以及时钟与总线等控制信号,如图试接口,以及时钟与总线等控制信号,如图2.2.22.2.2所示。所示。 存储器接口包括了存储器接口包括了3232位地址位地址A31:0A31:0、双向双向3232位数据总线位数据总线D31:0D31:0、单向单向3232位数据总线位数据总线DIN31:0DIN31

141、:0与与DOUT31:0DOUT31:0、以及存以及存储器访问请求储器访问请求MREQMREQ、地址顺序地址顺序SEQSEQ、存储器访问控制存储器访问控制MAS1:0MAS1:0和和数据锁存控制数据锁存控制BL3:0BL3:0等控制信号。等控制信号。 ARM7TDMI ARM7TDMI处理器内核也可处理器内核也可ARM7TDMI-SARM7TDMI-S软核(软核(SoftcoreSoftcore)形式形式向用户提供。同时,提供多种组合选择,例如可以省去嵌入式向用户提供。同时,提供多种组合选择,例如可以省去嵌入式ICEICE宏单元等。宏单元等。05:5089ARM7TDMI处理器外部引脚组成05

142、:50902.ARM720T/ARM740T处理器内核 ARM720T ARM720T处理器内核是在处理器内核是在ARM7TDMIARM7TDMI处理器内核基础上,增加处理器内核基础上,增加8 8KBKB的数据与指令的数据与指令CacheCache,支持段式和页式存储的支持段式和页式存储的MMU(MemoryMMU(Memory Management Unit)Management Unit)、写缓冲器及写缓冲器及AMBA(AdvancedAMBA(Advanced Microcontroller Bus Architecture)Microcontroller Bus Architectur

143、e)接口而构成接口而构成, ,如下图所示如下图所示. . ARM740T ARM740T处理器内核与处理器内核与ARM720TARM720T处理器内核相比,结构基本相处理器内核相比,结构基本相同,同,ARM740TARM740T处理器核没有存储器管理单元处理器核没有存储器管理单元MMUMMU,不支持虚拟存不支持虚拟存储器寻址,而是用存储器保护单元来提供基本保护和储器寻址,而是用存储器保护单元来提供基本保护和CacheCache的控的控制。合适低价格低功耗的嵌入式应用。制。合适低价格低功耗的嵌入式应用。05:5091ARM720T内核结构05:50922.2.2ARM9微处理器 ARM9 ARM

144、9系列微处理器包含系列微处理器包含ARM920TARM920T、ARM922TARM922T和和ARM940TARM940T几种类几种类型,可以在高性能和低功耗特性方面提供最佳的性能。采用型,可以在高性能和低功耗特性方面提供最佳的性能。采用5 5级级整数流水线整数流水线,指令执行效率更高。提供,指令执行效率更高。提供1.11.1MIPS/MHzMIPS/MHz的的哈佛结构哈佛结构。支持支持数据数据CacheCache和和指令指令CacheCache,具有更高的指令和数据处理能力。具有更高的指令和数据处理能力。 支持支持3232位位ARMARM指令集和指令集和1616位位ThumbThumb指令

145、集。支持指令集。支持3232位的高速位的高速AMBAAMBA总线接口。全性能的总线接口。全性能的MMUMMU,支持支持Windows Windows CECE、LinuxLinux、PalmPalm OS OS等等多种主流嵌入式操作系统。多种主流嵌入式操作系统。MPUMPU支持实时操作系统。支持实时操作系统。 ARM920T ARM920T处理器核在处理器核在ARM9TDMIARM9TDMI处理器内核基础上,增加了分处理器内核基础上,增加了分离式的指令离式的指令CacheCache和数据和数据CacheCache,并带有相应的存储器管理单元并带有相应的存储器管理单元I-MMUI-MMU和和D-

146、MMUD-MMU、写缓冲器及写缓冲器及AMBAAMBA接口等,如图接口等,如图2.2.42.2.4所示。所示。05:5093ARM920T内核结构05:5094ARM940T处理器核 ARM940T ARM940T处理器核采用了处理器核采用了ARM9TDMIARM9TDMI处理器内核,是处理器内核,是ARM920TARM920T处处理器核的简化版本,理器核的简化版本,没有存储器管理单元没有存储器管理单元MMUMMU,不支持虚拟存储不支持虚拟存储器寻址,而是用存储器保护单元来提供存储保护和器寻址,而是用存储器保护单元来提供存储保护和CacheCache控制。控制。 ARM9 ARM9系列微处理器

147、主要应用于系列微处理器主要应用于无线通信设备无线通信设备、仪器仪表仪器仪表、安、安全系统、全系统、机顶盒机顶盒、高端打印机高端打印机、数字照相机数字照相机和和数字摄像机数字摄像机等。等。典型产品如典型产品如SamsungSamsung公司的公司的S3C2410AS3C2410A。05:50952.2.3ARM9E微处理器 ARM9E ARM9E系列微处理器包含系列微处理器包含ARM926EJ-SARM926EJ-S、ARM946E-SARM946E-S和和ARM966E-ARM966E-S S几种类型,使用单一的处理器内核提供了几种类型,使用单一的处理器内核提供了微控制器微控制器、DSPDSP

148、、JavaJava应用系统应用系统的解决方案。的解决方案。ARM9EARM9E系列微处理器提供了增强的系列微处理器提供了增强的DSPDSP处理能力处理能力,很适合于那些需要同时使用,很适合于那些需要同时使用DSPDSP和微控制器的应和微控制器的应用场合。用场合。 ARM9E ARM9E系列微处理器系列微处理器支持支持DSPDSP指令集指令集,适合于需要,适合于需要高速数字信高速数字信号处理的场合号处理的场合。ARM9EARM9E系列微处理器采用系列微处理器采用5 5级整数流水线,支持级整数流水线,支持3232位位ARMARM指令集和指令集和1616位位ThumbThumb指令集,支持指令集,支

149、持3232位的高速位的高速AMBAAMBA总线总线接口,支持接口,支持VFP9VFP9浮点处理协处理器浮点处理协处理器,MMUMMU支持支持Windows Windows CECE、LinuxLinux、PalmPalm OS OS等多种主流嵌入式操作系统,等多种主流嵌入式操作系统,MPUMPU支持实时操作支持实时操作系统,支持数据系统,支持数据CacheCache和指令和指令CacheCache,主频最高可达主频最高可达300300MIPSMIPS。 ARM9 ARM9系列微处理器主要应用于系列微处理器主要应用于无线终端设备无线终端设备、数字消费品、数字消费品、成像设备、工业控制、存储设备和

150、网络设备等领域。成像设备、工业控制、存储设备和网络设备等领域。05:50962.2.4ARM10E微处理器 ARM10E ARM10E系列微处理器包含系列微处理器包含ARM1020EARM1020E、ARM1022EARM1022E和和ARM1026EJ-ARM1026EJ-S S几种类型,由于采用了新的体系结构,与同等的几种类型,由于采用了新的体系结构,与同等的ARM9ARM9器件相比器件相比较,在同样的时钟频率下,较,在同样的时钟频率下,性能提高了近性能提高了近5050。同时采用了两。同时采用了两种先进的种先进的节能方式节能方式,使其,使其功耗极低功耗极低。 ARM10E ARM10E系列

151、微处理器支持系列微处理器支持DSPDSP指令集指令集,适合于需要,适合于需要高速数字高速数字信号处理的场合信号处理的场合。 采用采用6 6级整数流水线级整数流水线,支持,支持3232位位ARMARM指令集和指令集和1616位位ThumbThumb指令集,支持指令集,支持3232位的高速位的高速AMBAAMBA总线接口,支持总线接口,支持VFP10VFP10浮点处理协处理器浮点处理协处理器,MMUMMU支持支持Windows Windows CECE、LinuxLinux、PalmPalm OS OS等多等多种主流嵌入式操作系统,支持数据种主流嵌入式操作系统,支持数据CacheCache和指令和

152、指令CacheCache,内嵌并内嵌并行读行读/ /写操作部件,主频最高可达写操作部件,主频最高可达400400MIPSMIPS。 ARM10E ARM10E系列微处理器主要应用于下一代无线设备、数字消费系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。品、成像设备、工业控制、通信和信息系统等领域。05:50972.2.5SecurCore微处理器 SecurCoreSecurCore系列微处理器包含系列微处理器包含SecurCoreSecurCore SC100 SC100、SecurCore SecurCore SC110SC110、SecurCo

153、re SC200SecurCore SC200和和SecurCoreSecurCore SC210 SC210几种类型,提供了几种类型,提供了完善的完善的3232位位RISCRISC技术的技术的安全解决方案安全解决方案。 SecurCoreSecurCore系列微处理器除了具有系列微处理器除了具有ARMARM体系结构各种主要特点体系结构各种主要特点外,在外,在系统安全系统安全方面:方面: 带有灵活的保护单元,以确保操作系统带有灵活的保护单元,以确保操作系统和应用数据的安全;采用和应用数据的安全;采用软内核技术软内核技术,防止外部对其进行扫描,防止外部对其进行扫描探测;可集成用户自己的安全特性和

154、其他协处理器。探测;可集成用户自己的安全特性和其他协处理器。 SecurCoreSecurCore系列微处理器主要应用于如电子商务、电子政务、系列微处理器主要应用于如电子商务、电子政务、电子银行业务、网络和认证系统等一些对安全性要求较高的应电子银行业务、网络和认证系统等一些对安全性要求较高的应用产品及应用系统。用产品及应用系统。05:50982.2.6StrongARM微处理器 Intel Intel StrongARMStrongARM处理器是采用处理器是采用ARMARM体系结构高度集成的体系结构高度集成的3232位位RISCRISC微处理器,采用在软件上兼容微处理器,采用在软件上兼容ARM

155、v4ARMv4体系结构、同时采用具体系结构、同时采用具有有IntelIntel技术技术优点的优点的体系结构体系结构。典型产品如。典型产品如SA110 SA110 处理器、处理器、SA1100SA1100、SA1110PDASA1110PDA系统芯片和系统芯片和SA1500SA1500多媒体处理器芯片等。例多媒体处理器芯片等。例如其中的如其中的Intel Intel StrongARMStrongARM SA-1110 SA-1110 微处理器是一款集成了微处理器是一款集成了3232位位StrongARMStrongARM RISC RISC处理器核、系统支持逻辑、处理器核、系统支持逻辑、多通信

156、通道多通信通道、LCDLCD控制器、存储器和控制器、存储器和PCMCIAPCMCIA控制器以及通用控制器以及通用I/OI/O口的高集成度通信口的高集成度通信控制器。该处理器最高可在控制器。该处理器最高可在206 206 MHzMHz下运行。下运行。SA-1110SA-1110有一个大有一个大的指令的指令CacheCache和数据和数据CacheCache、内存管理单元(内存管理单元(MMUMMU)和读和读/ /写缓存。写缓存。存储器总线可以和包括存储器总线可以和包括SDRAMSDRAM、SMROM SMROM 和类似和类似SRAMSRAM的许多器件相的许多器件相接。软件与接。软件与ARM V4

157、ARM V4结构处理器家族相兼容。结构处理器家族相兼容。 Intel Intel StrongARMStrongARM处理器是便携式通讯产品和消费类电子产处理器是便携式通讯产品和消费类电子产品的理想选择。品的理想选择。05:50992.2.7XScale微处理器 Intel Intel XScaleXScale微体系结构提供了一种全新的、微体系结构提供了一种全新的、高性价比高性价比、低、低功耗且基于功耗且基于ARMv5TEARMv5TE体系结构体系结构的解决方案,支持的解决方案,支持1616位位ThumbThumb指令指令和和DSPDSP扩充。基于扩充。基于XScaleXScale技术开发的微

158、处理器,可用于技术开发的微处理器,可用于手机手机、便便携式终端携式终端( (PDA)PDA)、网络存储设备网络存储设备、骨干网、骨干网( (BackBoneBackBone) )路由器等。路由器等。 XScaleXScale处理器的处理速度是处理器的处理速度是Intel Intel StrongARMStrongARM处理速度的处理速度的两两倍倍,数据,数据CacheCache的容量从的容量从8 8KBKB增加到增加到3232KBKB,指令指令CacheCache的容量从的容量从1616KBKB增加到增加到3232KBKB,微小数据微小数据CacheCache的容量从的容量从512512B B

159、增加到增加到2 2KBKB;为为了提高指令的执行速度,了提高指令的执行速度,超级流水线结构超级流水线结构由由5 5级增至级增至7 7级级;新增;新增乘乘/ /加法器加法器MACMAC和特定的和特定的DSPDSP型协处理器,以提高对型协处理器,以提高对多媒体技术多媒体技术的的支持;支持;动态电源管理动态电源管理,使,使XScaleXScale处理器的时钟可达处理器的时钟可达1 1GHzGHz、功耗功耗1.61.6W W,并能达到并能达到12001200MIPSMIPS。05:50100XScale微处理器 XScaleXScale微处理器架构经过专门设计,核心采用了英特尔先进微处理器架构经过专门

160、设计,核心采用了英特尔先进的的0.180.18mm工艺技术制造;具备低功耗特性,适用范围从工艺技术制造;具备低功耗特性,适用范围从0.10.1mWmW1.6W1.6W。同时,它的时钟工作频率将接近同时,它的时钟工作频率将接近1 1GHzGHz。XScaleXScale与与StrongARMStrongARM相比,可大幅降低工作电压并且获得更高的性能。具相比,可大幅降低工作电压并且获得更高的性能。具体来讲,在目前的体来讲,在目前的StrongARMStrongARM中,在中,在1.551.55V V下可以获得下可以获得133133MHzMHz的的工作频率,在工作频率,在2.02.0V V下可以获

161、得下可以获得206206MHzMHz的工作频率;而采用的工作频率;而采用XScaleXScale后,在后,在0.750.75V V时工作频率达到时工作频率达到150150MHzMHz,在在1.01.0V V时工作频率时工作频率可以达到可以达到400400MHzMHz,在在1.651.65V V下工作频率则可高达下工作频率则可高达800800MHzMHz。超低功超低功率与高性能的组合使率与高性能的组合使Intel Intel XScaleXScale适用于广泛的适用于广泛的互联网接入设互联网接入设备备,在因特网的各个环节中,从手持互联网设备到互联网基础,在因特网的各个环节中,从手持互联网设备到互

162、联网基础设施产品,设施产品,Intel Intel XScaleXScale都表现出了令人满意的处理性能。都表现出了令人满意的处理性能。 Intel Intel采用采用XScaleXScale架构的嵌入式处理器典型产品有架构的嵌入式处理器典型产品有PXA25xPXA25x、PXA26xPXA26x和和PXA27xPXA27x系列。系列。05:501012.3ARM微处理器的寄存器结构2.3.12.3.1处理器的运行模式处理器的运行模式2.3.22.3.2处理器的工作状态处理器的工作状态2.3.32.3.3处理器的寄存器组织处理器的寄存器组织2.3.42.3.4ThumbThumb状态的寄存器集

163、状态的寄存器集05:50102ARM微处理器的寄存器结构 ARMARM处理器共有处理器共有3737个寄存器个寄存器,被分为若干个组(,被分为若干个组(BANKBANK),),这这些寄器包括:些寄器包括: 3131个通用寄存器个通用寄存器,包括程序计数器(,包括程序计数器(PCPC指针),均为指针),均为3232位位的寄存器。的寄存器。 6 6个状态寄存器个状态寄存器,用以标识,用以标识CPUCPU的的工作状态工作状态及程序的及程序的运行状运行状态,均为态,均为3232位,目前只使用了其中的一部分。位,目前只使用了其中的一部分。05:501032.3.1处理器的运行模式 ARM ARM微处理器支

164、持微处理器支持7 7种运行模式种运行模式,分别为:,分别为: usrusr( (用户模式用户模式) ):ARMARM处理器正常程序执行模式。处理器正常程序执行模式。 fiqfiq( (快速中断模式快速中断模式) ):用于高速数据传输或通道处理:用于高速数据传输或通道处理 irqirq( (外部中断模式外部中断模式) ):用于通用的中断处理:用于通用的中断处理 svc(svc(管理模式管理模式) ):操作系统使用的保护模式:操作系统使用的保护模式 abtabt ( (数据访问终止模式数据访问终止模式) ):当数据或指令预取终止时进入该:当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

165、模式,可用于虚拟存储及存储保护。 sys(sys(系统模式系统模式) ):运行具有特权的操作系统任务。:运行具有特权的操作系统任务。 und(und(未定义指令中止模式未定义指令中止模式) ):当未定义的指令执行时进入该:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。模式,可用于支持硬件协处理器的软件仿真。05:50104ARM微处理器支持7种运行模式CPSRCPSR4:04:0模式模式用途用途可访问的寄存器可访问的寄存器1000010000用户用户正常用户模式,正常用户模式,程序正常执行模式程序正常执行模式PCPC,R14-R0R14-R0,CPSRCPSR1000110

166、001FIQFIQ处理快速中断处理快速中断, ,支持高速数据支持高速数据传送或通道处理传送或通道处理PCPC,R14_fiq-R8_fiqR14_fiq-R8_fiq,R7-R0R7-R0,CPSRCPSR,SPSR_fiqSPSR_fiq1001010010IRQIRQ处理普通中断处理普通中断PCPC,R14_irq-R13_fiqR14_irq-R13_fiq,R12-R0R12-R0,CPSRCPSR,SPSR_irqSPSR_irq1001110011SVCSVC操作系统保护模式操作系统保护模式处理软件中断(处理软件中断(SWISWI)PCPC,R14_svc-R13_svcR14_s

167、vc-R13_svc,R12-R0R12-R0,CPSRCPSR,SPSR_svcSPSR_svc1011110111中止中止处理存储器故障、实现虚拟存处理存储器故障、实现虚拟存储器和存储器保护储器和存储器保护PCPC,R14_abt-R13_abtR14_abt-R13_abt,R12-R0R12-R0,CPSRCPSR,SPSR_abtSPSR_abt1101111011未定义未定义处理未定义的指令陷阱,支持处理未定义的指令陷阱,支持硬件协处理器的软件仿真硬件协处理器的软件仿真PCPC,R14_und-R13_undR14_und-R13_und,R12-R0R12-R0,CPSRCPSR

168、,SPSR_undSPSR_und1111111111系统系统运行特权操作系统任务运行特权操作系统任务PCPC,R14-R0R14-R0,CPSRCPSR05:50105处理器的运行模式 ARM ARM微处理器的微处理器的运行模式运行模式可以通过软件改变,也可以通过外可以通过软件改变,也可以通过外部中断或异常处理改变。部中断或异常处理改变。 大多数的大多数的应用程序运行在用户模式应用程序运行在用户模式下,当处理器运行在用户下,当处理器运行在用户模式下时,某些模式下时,某些被保护的系统资源是不能被访问被保护的系统资源是不能被访问的。的。 除用户模式除用户模式外,其余所有外,其余所有6 6种模式称

169、为非用户模式种模式称为非用户模式, ,或或特权模特权模式式; ;其中除去用户模式和系统模式外的其中除去用户模式和系统模式外的5 5种又称为种又称为异常模式异常模式, ,常用常用于处理中断或异常于处理中断或异常, ,以及需要访问受保护的系统资源等情况。以及需要访问受保护的系统资源等情况。 ARM ARM处理器在每种模式下均有一组相应的寄存器与之对应。处理器在每种模式下均有一组相应的寄存器与之对应。在任意一种处理器模式下,可访问的寄存器包括在任意一种处理器模式下,可访问的寄存器包括1515个通用寄存个通用寄存器器( (R0R0R14)R14)、一至二个一至二个状态寄存器状态寄存器和和程序计数器程序

170、计数器。在所有寄存。在所有寄存器中,有些是在器中,有些是在7 7种处理器模式下共用的同一个物理寄存器,而种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。有些寄存器则是在不同的处理器模式下有不同的物理寄存器。05:501062.3.2处理器的工作状态 ARM ARM处理器有处理器有3232位位ARMARM和和1616位位ThumbThumb两种工作状态。两种工作状态。ARMARM状态下状态下执行字执行字ARMARM指令,在指令,在ThumbThumb状态下执行半字状态下执行半字ThumbThumb指令。指令。ARMARM处理处理器可切换两种工作状态器

171、可切换两种工作状态, ,不影响处理器的模式或寄存器内容。不影响处理器的模式或寄存器内容。 (1 1)当操作数寄存器的状态位(位)当操作数寄存器的状态位(位00)为为1 1时时, ,执行执行BXBX指令指令进入进入ThumbThumb状态状态。如处理器在。如处理器在ThumbThumb状态进入异常状态进入异常, ,则当异常处理则当异常处理( (IRQIRQ、FIQFIQ、UndefUndef、AbortAbort和和SWI)SWI)返回时返回时, ,自动转到自动转到ThumbThumb状态。状态。 (2 2)当操作数寄存器的状态位(位)当操作数寄存器的状态位(位0 0)为为0 0时时,执行,执行

172、BXBX指指令令进入进入ARMARM状态状态,处理器进行异常处理(,处理器进行异常处理(IRQIRQ、FIQFIQ、ResetReset、UndefUndef、AbortAbort和和SWISWI)。)。在此情况下,把在此情况下,把PCPC放入异常模式链接寄放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入存器中。从异常向量地址开始执行也可以进入ARMARM状态。状态。05:501072.3.3处理器的寄存器组织 ARM ARM处理器的处理器的3737个寄存器被安排成部分重叠的组,不能在任个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用与处理器状态和工作模式有何模式

173、都可以使用,寄存器的使用与处理器状态和工作模式有关。如图关。如图2.3.12.3.1所示,每种处理器模式使用不同的寄存器组。其所示,每种处理器模式使用不同的寄存器组。其中中1515个通用寄存器(个通用寄存器(R0R0R14R14)、)、1 1或或2 2个状态寄存器和程序计数个状态寄存器和程序计数器是通用的。器是通用的。05:50108处理器的寄存器组织05:501091.通用寄存器 通用寄存器(通用寄存器(R0R0R15R15)可分成不分组寄存器可分成不分组寄存器R0R0R7R7、分组分组寄存器寄存器R8R8R14R14和程序计数器和程序计数器R15R15三类。三类。(1 1)不分组寄存器不分

174、组寄存器R0R0R7R7 不分组寄存器不分组寄存器R0R0R7R7是是真正的通用寄存器真正的通用寄存器,可以工作在所有,可以工作在所有的处理器模式下,没有隐含的特殊用途。的处理器模式下,没有隐含的特殊用途。(2 2)分组寄存器分组寄存器R8R8R14R14 分组寄存器分组寄存器R8R8R14R14取决于当前的处理器模式,每种模式有取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。专用的分组寄存器用于快速异常处理。 寄存器寄存器R8R8Rl2Rl2可分为两组物理寄存器。一组用于可分为两组物理寄存器。一组用于FIQFIQ模式,模式,另一组用于除另一组用于除FIQFIQ以外的其他模

175、式。第以外的其他模式。第1 1组访问组访问R8_fiqR8_fiqR12_fiqR12_fiq,允许快速中断处理。第二组访问允许快速中断处理。第二组访问R8_usrR8_usrR12_usrR12_usr,寄存器寄存器R8R8R12R12没有任何指定的特殊用途。没有任何指定的特殊用途。05:50110通用寄存器 寄存器寄存器R13R13R14R14可分为可分为6 6个分组的物理寄存器。个分组的物理寄存器。1 1个用于用户个用于用户模式和系统模式,而其他模式和系统模式,而其他5 5个分别用于个分别用于svcsvc、abtabt、undund、irqirq和和fiqfiq五种异常模式。访问时需要指

176、定它们的模式,如:五种异常模式。访问时需要指定它们的模式,如:R13_R13_modemode,R14_R14_modemode;其中:其中:modemode可以从可以从usrusr、svcsvc、abtabt、undund、irqirq和和fiqfiq六种模式中选取一个。六种模式中选取一个。 寄存器寄存器R13R13通常用作通常用作堆栈指针堆栈指针,称作,称作SPSP。每种异常模式都有每种异常模式都有自己的分组自己的分组R13R13。通常通常R13R13应当被初始化成指向异常模式分配的应当被初始化成指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存堆栈。在入口处,异常处

177、理程序将用到的其他寄存器的值保存到堆栈中;返回时,重新将这些值加载到寄存器。这种异常处到堆栈中;返回时,重新将这些值加载到寄存器。这种异常处理方法保证了异常出现后不会导致执行程序的状态不可靠。理方法保证了异常出现后不会导致执行程序的状态不可靠。 寄存器寄存器R14R14用作用作子程序链接寄存器子程序链接寄存器, ,也称为链接寄存器也称为链接寄存器LKLK。当当执行带链接分支(执行带链接分支(BLBL)指令时,得到指令时,得到R15R15的备份。的备份。05:50111通用寄存器 在其他情况下,将在其他情况下,将R14R14当做通用寄存器。类似地,当中断或当做通用寄存器。类似地,当中断或异常出现

178、时,或当中断或异常程序执行异常出现时,或当中断或异常程序执行BLBL指令时,相应的分组指令时,相应的分组寄存器寄存器R14_svcR14_svc、R14_irqR14_irq、R14_fiqR14_fiq、R14_abtR14_abt和和R14_undR14_und用来保用来保存存R15R15的返回值。的返回值。 FIQFIQ模式模式有有7 7个分组的寄存器个分组的寄存器R8R8R14R14,映射为映射为R8_fiqR8_fiqR14_fiqR14_fiq。在在ARMARM状态下,许多状态下,许多FIQFIQ处理没必要保存任何寄存器。处理没必要保存任何寄存器。UserUser、IRQIRQ、S

179、upervisorSupervisor、AbortAbort和和UndefinedUndefined模式每一种都包含模式每一种都包含两个分组的寄存器两个分组的寄存器R13R13和和R14R14的映射,允许每种模式都有自己的的映射,允许每种模式都有自己的堆栈和链接寄存器。堆栈和链接寄存器。05:50112(3)程序计数器R15 寄存器寄存器R15R15为为程序计数器程序计数器( (PC)PC)。ARMARM状态状态, ,位位1:01:0为为0 0, ,位位31:231:2保存保存PCPC。 在在ThumbThumb状态状态, ,位位0 0为为0 0,位,位31:131:1保存保存PCPC。R15

180、R15虽然也可用作通用寄虽然也可用作通用寄存器,但一般不这么使用,因为对存器,但一般不这么使用,因为对R15R15的使用有一些特殊的限制,当违反了的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。这些限制时,程序的执行结果是未知的。 读程序计数器。指令读出的读程序计数器。指令读出的R15R15的值是指令地址加上的值是指令地址加上8 8字节。由于字节。由于ARMARM指令始终是字对齐的,所以读出结果值的位指令始终是字对齐的,所以读出结果值的位1:01:0总是总是0 0(在(在ThumbThumb状态下,状态下,情况有所变化)。读情况有所变化)。读PCPC主要用于快速地对临近的指

181、令和数据进行位置无关寻主要用于快速地对临近的指令和数据进行位置无关寻址,包括程序中的位置无关转移。址,包括程序中的位置无关转移。 写程序计数器。写写程序计数器。写R15R15的通常结果是将写到的通常结果是将写到R15R15中的值作为指令地址,中的值作为指令地址,并以此地址发生转移。由于并以此地址发生转移。由于ARMARM指令要求字对齐,通常希望写到指令要求字对齐,通常希望写到R15R15中值的位中值的位1:0=01:0=0b00b00。 由于由于ARMARM体系结构采用体系结构采用多级流水线多级流水线技术技术, ,对于对于ARMARM指令集而言指令集而言, ,PCPC总是指向总是指向当前指令的

182、当前指令的下两条指令的地址下两条指令的地址,即,即PCPC的值为当前指令的的值为当前指令的地址值加地址值加8 8个字节个字节。05:501132.程序状态寄存器 寄存器寄存器R16R16用作程序用作程序状态寄存器状态寄存器CPSRCPSR(CurrentCurrent Program Program Status RegisterStatus Register,当前程序状态寄存器)。在所有处理器模式当前程序状态寄存器)。在所有处理器模式下都可以访问下都可以访问CPSRCPSR。CPSRCPSR包含包含条件码标志条件码标志、中断禁止位中断禁止位、当前、当前处理器模式处理器模式及其他及其他状态状态

183、和和控制信息控制信息。每种异常模式都有一个程。每种异常模式都有一个程序状态保存寄存器序状态保存寄存器SPSRSPSR(SavedSaved Program Status Register Program Status Register)。)。当异常出现当异常出现SPSRSPSR用于保留用于保留CPSRCPSR的状态。的状态。 CPSR CPSR和和SPSRSPSR的格式如下:的格式如下:05:50114程序状态寄存器N Z C V . .IFT M4M3M2M1M0M4:00b100000b100010b100100b10011模式模式用户用户FIQIRQ管理管理0b101110b11011中

184、止中止未定义未定义0b11111系统系统模式位模式位工作状态位工作状态位1 1:ThumbThumb0 0:ARMARMFIQFIQ中断禁止位中断禁止位1 1:禁止:禁止0 0:允许:允许IRQIRQ中断禁止位中断禁止位1 1:禁止:禁止0 0:允许:允许OverflowOverflowCarryCarryZeroZeroNegativeNegative条件码标志位条件码标志位保留位保留位控制位控制位05:50115(1)条件码标志 N N、Z Z、C C、V V(NegativeNegative、ZeroZero、CarryCarry、oVerflowoVerflow)为为条件条件码标志位码

185、标志位,内容可被算术或逻辑运算的结果改变,并决定某内容可被算术或逻辑运算的结果改变,并决定某条指令是否被执行。条指令是否被执行。ARMARM状态下,状态下,绝大多数的指令都是有条绝大多数的指令都是有条件执行件执行的。的。ThumbThumb状态状态下,仅有下,仅有分支指令是有条件执行分支指令是有条件执行的。的。 通常条件码标志通过执行比较指令(通常条件码标志通过执行比较指令(CMNCMN、CMPCMP、TEQTEQ、TSTTST)、)、一些算术运算、逻辑运算和传送指令进行修改。一些算术运算、逻辑运算和传送指令进行修改。 条件码标志的通常含义如下:条件码标志的通常含义如下: N N:如果结果是带

186、符号二进制补码,那么,若结果为如果结果是带符号二进制补码,那么,若结果为负数负数,则则N=1N=1;若结果为若结果为正数正数或或0 0,则,则N N0 0。 Z Z:若指令的若指令的结果为结果为0 0,则置,则置1 1(通常表示比较的结果为(通常表示比较的结果为“相相等等”),否则置),否则置0 0。05:50116条件码标志 C C:可用如下可用如下4 4种方法之一设置:种方法之一设置: 加法加法(包括比较指令(包括比较指令CMNCMN)。)。若加法产生进位(即无符号溢若加法产生进位(即无符号溢出),则出),则C C置置1 1;否则置;否则置0 0。 减法减法(包括比较指令(包括比较指令CM

187、PCMP)。)。若减法产生借位(即无符号溢若减法产生借位(即无符号溢出),则出),则C C置置0 0;否则置;否则置1 1。 对于结合对于结合移位移位操作的非加法减法指令,操作的非加法减法指令,C C置为移出值的最置为移出值的最后后1 1位。位。 对于对于其他其他非加法减法指令,非加法减法指令,C C通常不改变。通常不改变。 V V:可用如下两种方法设置,即可用如下两种方法设置,即 对于加法或减法指令,当发生对于加法或减法指令,当发生带符号溢出带符号溢出时,时,V V置置1 1,认为操,认为操作数和结果是补码形式的带符号整数。作数和结果是补码形式的带符号整数。 对于非加法减法指令,对于非加法减

188、法指令,V V通常不改变。通常不改变。05:50117(2)控制位 程序状态寄存器程序状态寄存器PSRPSR(ProgramProgram Status Register Status Register)的最低的最低8 8位位I I、F F、T T和和M4M4:00用作控制位。当异常出现时改变控制位。用作控制位。当异常出现时改变控制位。处理器在特权模式下时也可由软件改变。处理器在特权模式下时也可由软件改变。 a.a.中断禁止位中断禁止位 I I:置置1 1,则禁止,则禁止IRQIRQ中断;中断;F F:置置1 1,则禁止,则禁止FIQFIQ中断。中断。 b.Tb.T位位 T=0 T=0 指示指

189、示ARMARM执行;执行;T=1 T=1 指示指示ThumbThumb执行。执行。 c.c.模式控制位模式控制位 M4M4、M3M3、M2M2、MlMl和和M0M0(M4:0M4:0)是模式位,决定处理器的是模式位,决定处理器的工作模式,如表工作模式,如表2.3.12.3.1所列。所列。05:501182.3.4Thumb状态的寄存器集 Thumb Thumb状态下的寄存器集如下图所示,是状态下的寄存器集如下图所示,是ARMARM状态下的寄存器状态下的寄存器集的子集。程序员可以直接访问集的子集。程序员可以直接访问8 8个通用寄存器(个通用寄存器(R0R0R7R7)、)、PCPC、SPSP、LR

190、LR和和CPSRCPSR。每一种特权模式都有一组每一种特权模式都有一组SPSP、LRLR和和SPSRSPSR。 Thumb Thumb状态状态R0R0R7R7与与ARMARM状态状态R0R0R7R7是一致的。是一致的。 ThumbThumb状态状态CPSRCPSR和和SPSRSPSR与与ARMARM的状态的状态CPSRCPSR和和SPSRSPSR是一致的。是一致的。 ThumbThumb状态状态SPSP映射到映射到ARMARM状态状态R13R13。 Thumb Thumb状态状态LRLR映射到映射到ARMARM状态状态R14R14。 Thumb Thumb状态状态PCPC映射到映射到ARMAR

191、M状态状态PCPC(R15R15)。)。05:50119Thumb状态下寄存器组织05:50120Thumb状态与ARM状态的寄存器关系05:501212.4ARM微处理器的异常处理2.4.12.4.1ARMARM体系结构的异常类型体系结构的异常类型2.4.22.4.2异常类型的含义异常类型的含义2.4.32.4.3异常的响应过程异常的响应过程2.4.42.4.4应用程序中的异常处理应用程序中的异常处理05:50122ARM微处理器的异常处理 在一个正常的程序流程执行过程中,由内部或外部源产生的在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件一个事件使正常的使正常的程序产生暂时的停

192、止程序产生暂时的停止时,称之为时,称之为异常异常。异常。异常是由是由内部内部或或外部源产生外部源产生并引起处理器处理一个并引起处理器处理一个事件事件,例如一个,例如一个外部的中断请求外部的中断请求。在处理异常之前,当前处理器的。在处理异常之前,当前处理器的状态必须保状态必须保留留,当异常处理,当异常处理完成完成之后,之后,恢复保留恢复保留的当前处理器状态,继续的当前处理器状态,继续执行当前程序。执行当前程序。多个异常多个异常同时发生时,处理器将会按固定的同时发生时,处理器将会按固定的优优先级先级进行进行处理处理。 ARM ARM体系结构中的异常,与单片机的中断有相似之处,但异体系结构中的异常,

193、与单片机的中断有相似之处,但异常与中断的概念并不完全等同,例如外部中断或试图执行未定常与中断的概念并不完全等同,例如外部中断或试图执行未定义指令都会引起异常。义指令都会引起异常。05:501232.4.1ARM体系结构的异常类型 ARM ARM体系结构支持体系结构支持7 7种类型的异常,异常类型、异常处理模式种类型的异常,异常类型、异常处理模式和优先级如下表所示。异常出现后,强制从异常类型对应的固和优先级如下表所示。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量定存储器地址开始执行程序。这些固定的地址称为异常向量。异常类型异常类型异常异常进入模式进入模式

194、地址地址( (异常向量异常向量) )优先级优先级复位复位复位复位管理模式管理模式0 0x0000,0000x0000,00001(1(最高最高) )未定义指令未定义指令未定义指令未定义指令未定义模式未定义模式0 0x0000,0004x0000,00046(6(最低最低) )软件中断软件中断软件中断软件中断管理模式管理模式0 0x0000,0008x0000,00086(6(最低最低) )指令预取中止指令预取中止中止中止( (预取指令预取指令) )中止模式中止模式0 0x0000,000Cx0000,000C5 5数据中止数据中止中止(数据)中止(数据)中止模式中止模式0 0x0000,001

195、0x0000,00102 2IRQ(IRQ(外部中断请求外部中断请求) )IRQIRQIRQIRQ0 0x0000,0018x0000,00184 4FIQ(FIQ(快速中断请求快速中断请求) )FIQFIQFIQFIQ0 0x0000,001Cx0000,001C3 305:501242.4.2异常类型的含义(1 1)复位)复位 当处理器的当处理器的复位电平有效时复位电平有效时,产生复位异常,产生复位异常,ARMARM处理器立处理器立刻刻停止执行当前指令停止执行当前指令。复位后,。复位后,ARMARM处理器在禁止中断的管理模处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行(从地

196、址式下,程序跳转到复位异常处理程序处执行(从地址0 0x00000000x00000000或或0 0xFFFF0000xFFFF0000开始执行指令)。开始执行指令)。(2 2)未定义指令异常)未定义指令异常 当当ARMARM处理器或协处理器遇到处理器或协处理器遇到不能处理的指令时不能处理的指令时,产生未定,产生未定义指令异常。当义指令异常。当ARMARM处理器执行协处理器指令时,它必须等待任处理器执行协处理器指令时,它必须等待任一一外部协处理器应答后外部协处理器应答后,才能真正,才能真正执行这条指令执行这条指令。若协处理器。若协处理器没有响应,就会出现没有响应,就会出现未定义指令异常未定义指

197、令异常。若试图执行未定义的指。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于在没有令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对物理协处理器(硬件)的系统上,对协处理器进行软件仿真协处理器进行软件仿真,或在软件仿真时进行指令扩展。或在软件仿真时进行指令扩展。05:50125异常类型的含义(3 3)软件中断异常)软件中断异常(SoftWareSoftWare InterruptInterrupt,SWISWI) 软件中断异常由软件中断异常由执行执行SWISWI指令产生指令产生,可使用该异常机制实现,可使用该异常机制实现系统功能调用,用

198、于用户模式下的程序调用特权操作指令,系统功能调用,用于用户模式下的程序调用特权操作指令,以请求特定的管理(操作系统)函数。以请求特定的管理(操作系统)函数。(4 4)指令预取中止)指令预取中止 若处理器若处理器预取指令的地址不存在预取指令的地址不存在,或该地址不允许当前指令,或该地址不允许当前指令访问,存储器会向处理器发出存储器中止(访问,存储器会向处理器发出存储器中止(AbortAbort)信号,信号,但当预取的指令被执行时,才会产生指令预取中止异常。但当预取的指令被执行时,才会产生指令预取中止异常。(5 5)数据中止)数据中止(数据访问存储器中止)(数据访问存储器中止) 若处理器数据若处理

199、器数据访问指令的地址不存在访问指令的地址不存在,或该,或该地址不允许当前地址不允许当前指令访问指令访问时,产生数据中止异常。存储器系统发出存储器中时,产生数据中止异常。存储器系统发出存储器中止信号。响应数据访问(加载或存储)激活中止,标记数据止信号。响应数据访问(加载或存储)激活中止,标记数据为无效。在后面的任何指令或异常改变为无效。在后面的任何指令或异常改变CPUCPU状态之前,数据状态之前,数据中止异常发生。中止异常发生。05:50126异常类型的含义(6 6)外部中断请求)外部中断请求(IRQIRQ)异常异常 当处理器的当处理器的外部中断请求引脚有效外部中断请求引脚有效,且,且CPSRC

200、PSR中的中的I I位为位为0 0时时,产生产生IRQIRQ异常。系统的外设可通过该异常请求中断服务。异常。系统的外设可通过该异常请求中断服务。IRQIRQ异异常的优先级比常的优先级比FIQFIQ异常的低。当进入异常的低。当进入FIQFIQ处理时,会屏蔽掉处理时,会屏蔽掉IRQIRQ异异常。常。(7 7)快速中断请求)快速中断请求(FIQFIQ)异常异常 当处理器的当处理器的快速中断请求引脚有效快速中断请求引脚有效,且,且CPSRCPSR中的中的F F位为位为0 0时,时,产生产生FIQFIQ异常。异常。FIQFIQ支持数据传送和通道处理,并有足够的私有支持数据传送和通道处理,并有足够的私有寄

201、存器。寄存器。05:501272.4.3异常的响应过程 当一个异常出现以后,当一个异常出现以后,ARMARM微处理器会执行以下几步操作:微处理器会执行以下几步操作: 将下一条指令的地址存入相应将下一条指令的地址存入相应连接寄存器连接寄存器LRLR,以便程序以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从在处理异常返回时能从正确的位置重新开始执行。若异常是从ARMARM状态进入,状态进入,LRLR寄存器中保存的是下一条指令的地址(当前寄存器中保存的是下一条指令的地址(当前PCPC4 4或或PCPC8 8,与异常的类型有关);若异常是从与异常的类型有关);若异常是从ThumbThum

202、b状态进入,状态进入,则在则在LRLR寄存器中保存当前寄存器中保存当前PCPC的偏移量的偏移量; ; 将将CPSRCPSR状态状态传送到相应的传送到相应的SPSRSPSR中中; ; 根据异常类型,强制设置根据异常类型,强制设置CPSRCPSR的的运行模式位运行模式位; ; 强制强制PCPC从相关的异常向量地址从相关的异常向量地址下一条指令执行下一条指令执行,转到相,转到相应的应的异常处理程序异常处理程序。还可设置中断禁止位,禁止中断发生。还可设置中断禁止位,禁止中断发生。05:50128异常的响应过程 如果异常发生时,处理器处于如果异常发生时,处理器处于ThumbThumb状态,则当异常向量地

203、状态,则当异常向量地址加载入址加载入PCPC时,处理器时,处理器自动切换到自动切换到ARMARM状态状态。 异常处理完毕之后,异常处理完毕之后,ARMARM微处理器会执行以下几步操作微处理器会执行以下几步操作从异从异常返回常返回: 将连接寄存器将连接寄存器LRLR的值减去相应的偏移量后送到的值减去相应的偏移量后送到PCPC中。中。 将将SPSRSPSR内容送回内容送回CPSRCPSR中。中。 若在进入异常处理时设置了若在进入异常处理时设置了中断禁止位中断禁止位,要在此清除。,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因可以认为应用程序总是从复位异常处理程序开始执行的,因此

204、复位异常处理程序不需要返回。此复位异常处理程序不需要返回。05:501292.4.4应用程序中的异常处理 在在应用程序的设计中应用程序的设计中,异常处理采用的方式是在异常向量表,异常处理采用的方式是在异常向量表中的特定位置中的特定位置放置一条跳转指令放置一条跳转指令,跳转到,跳转到异常处理异常处理程序。当程序。当ARMARM处理器发生异常时,程序计数器处理器发生异常时,程序计数器PCPC会被强制设置为对应的异常会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理向量,从而跳转到异常处理程序,当异常处理完成以后完成以后,返回返回到主程序继续执行到主程序继续执行。05:501302.5

205、ARM的存储器结构 ARM ARM体系结构允许使用现有的存储器和体系结构允许使用现有的存储器和I/OI/O器件进行各种存储器系统设计。器件进行各种存储器系统设计。1 1地址空间地址空间 ARM ARM体系结构使用体系结构使用2 23232个字节的单一、个字节的单一、线性地址空间线性地址空间。将字节地址做为无符。将字节地址做为无符号数看待,范围为号数看待,范围为0 02 232321 1。2 2存储器格式存储器格式 对于字对齐的地址对于字对齐的地址A A,地址空间规则要求如下:地址空间规则要求如下: 地址位于地址位于A A的字由地址为的字由地址为A A、A A1 1、A A2 2和和A A3 3

206、的字节组成;的字节组成; 地址位于地址位于A A的半字由地址为的半字由地址为A A和和A A1 1的字节组成;的字节组成; 地址位于地址位于A A2 2的半字由地址为的半字由地址为A A2 2和和A A3 3的字节组成;的字节组成; 地址位于地址位于A A的字由地址为的字由地址为A A和和A A2 2的半字组成。的半字组成。 ARM ARM存储系统可使用小端或大端存储两种方法,大端存储和小端存储格式存储系统可使用小端或大端存储两种方法,大端存储和小端存储格式如下图所示。如下图所示。05:50131大端存储和小端存储格式 ARM ARM体系结构通常希望所有的存储器访问能适当地对齐。特别是用于体系

207、结构通常希望所有的存储器访问能适当地对齐。特别是用于字访问的地址通常应当字对齐,用于半字访问的地址通常应当半字对齐。字访问的地址通常应当字对齐,用于半字访问的地址通常应当半字对齐。未按这种方式对齐的存储器访问称作未按这种方式对齐的存储器访问称作非对齐的存储器访问非对齐的存储器访问。05:50132ARM的存储器结构3.3.ARMARM存储器结构存储器结构 ARM ARM处理器有的带有指令处理器有的带有指令CacheCache和数据和数据CacheCache,但但不带有片内不带有片内RAMRAM和片内和片内ROMROM。系统所需的系统所需的RAMRAM和和ROMROM(包括包括FlashFlas

208、h)都都通过总线通过总线外接外接。由于系统的地址范围较大(。由于系统的地址范围较大(2 232324 4GBGB),),有的片内还带有有的片内还带有存储器管理单元存储器管理单元MMUMMU(MemoryMemory Management Management UnitUnit)。)。ARMARM架构处架构处理器还理器还允许外接允许外接PCMCIAPCMCIA。4.4.存储器映射存储器映射I/OI/O ARM ARM系统系统使用存储器映射使用存储器映射I/OI/O。I/OI/O口使用特定的存储器地址,口使用特定的存储器地址,当从这些地址加载(用于输入)或向这些地址存储(用于输出)当从这些地址加载

209、(用于输入)或向这些地址存储(用于输出)时,完成时,完成I/OI/O功能。加载和存储也可用于执行控制功能,代替或功能。加载和存储也可用于执行控制功能,代替或者附加到正常的输入或输出功能。者附加到正常的输入或输出功能。05:501332.7ARM微处理器的接口2.7.12.7.1ARMARM协处理器接口协处理器接口2.7.22.7.2ARMARMAMBAAMBA接口接口2.7.32.7.3ARMARMI/OI/O结构结构2.7.42.7.4ARMARMJTAGJTAG调试接口调试接口05:501342.7.1ARM协处理器接口 为便于为便于SoCSoC的设计,的设计,ARMARM可通过协处理器可

210、通过协处理器(CP)(CP)支持通用指令集支持通用指令集的扩充,增加系统的功能。逻辑上,的扩充,增加系统的功能。逻辑上,ARMARM可扩展可扩展1616个个(CP15(CP15CP0)CP0)协处理器协处理器,其中:,其中:CP15CP15为系统控制为系统控制,CP14CP14为调试控制器为调试控制器,CP7CP74 4为为用户控制器用户控制器,CP13CP138 8和和CP3CP30 0保留保留。每个。每个CPCP有有1616个寄个寄存器存器。例如。例如MMUMMU和保护单元的系统控制都采用和保护单元的系统控制都采用CP15CP15;JTAGJTAG调试中调试中的的CPCP为为CP14CP1

211、4,即调试通信通道,即调试通信通道DCCDCC。 ARM ARM处理器内核与协处理器处理器内核与协处理器接口接口有以下有以下4 4类类。 时钟时钟和和时钟控制时钟控制信号:信号:MCLKMCLK、nWAITnWAIT、nRESETnRESET; 流水线跟随流水线跟随信号:信号:nMREQnMREQ、SEQSEQ、nTRANSnTRANS、nOPCnOPC、TBITTBIT; 应答应答信号:信号:nCPInCPI、CPACPA、CPBCPB; 数据数据信号:信号:D31:0D31:0、DIN31:0DIN31:0、DOUT31:0DOUT31:0。05:50135ARM协处理器接口 协处理器的应

212、答信号中:协处理器的应答信号中: nCPInCPI为为ARMARM处理器至处理器至CPnCPn协处理器信号,该信号低电压有效协处理器信号,该信号低电压有效代表代表“协处理器指令协处理器指令”,表示,表示ARMARM处理器内核标识了处理器内核标识了1 1条协处理条协处理器指令,希望协处理器器指令,希望协处理器去执行去执行它。它。 CPACPA为协处理器至为协处理器至ARMARM处理器内核信号,表示处理器内核信号,表示协处理器不存协处理器不存在在,目前协处理器,目前协处理器无能力执行无能力执行指令。指令。 CPBCPB为协处理器至为协处理器至ARMARM处理器内核信号,表示处理器内核信号,表示协处

213、理器忙协处理器忙,还不能够开始执行指令。还不能够开始执行指令。05:50136ARM协处理器接口 协处理器协处理器也也采用流水线结构采用流水线结构,为了保证与,为了保证与ARMARM处理器内核中处理器内核中的流水线的流水线同步同步,在每一个,在每一个协处理器内协处理器内需有需有1 1个个流水线跟随器流水线跟随器(Pipeline FollowerPipeline Follower),用来跟踪),用来跟踪ARMARM处理器内核流水线中的处理器内核流水线中的指令。由于指令。由于ARMARM的的ThumbThumb指令集指令集无协处理器指令无协处理器指令,协处理器还必,协处理器还必须监视须监视TBI

214、TTBIT信号的状态信号的状态, ,以确保以确保不把不把ThumbThumb指令指令误解为误解为ARMARM指令。指令。 协处理器也采用协处理器也采用Load/StoreLoad/Store结构,用指令来执行寄存器的内结构,用指令来执行寄存器的内部操作,从存储器取数据至寄存器或把寄存器中的数保存至存部操作,从存储器取数据至寄存器或把寄存器中的数保存至存储器中,以及实现储器中,以及实现与与ARMARM处理器内核中寄存器处理器内核中寄存器之间的数据之间的数据传送传送。而这些指令都由协处理器指令来实现。而这些指令都由协处理器指令来实现。05:501372.7.2ARMAMBA接口 ARM ARM处理

215、器内核可通过先进的微控制器总线架构处理器内核可通过先进的微控制器总线架构AMBAAMBA来来扩展扩展不同体系架构的不同体系架构的宏单元宏单元及及I/OI/O部件部件。AMBAAMBA已成为事实上的片上总已成为事实上的片上总线线OCBOCB(On Chip BusOn Chip Bus)标准。)标准。 AMBA AMBA有有AHBAHB(Advanced High-performance BusAdvanced High-performance Bus,先进高性能先进高性能总线总线)、)、ASBASB(Advanced System BusAdvanced System Bus,先进系统总线先进

216、系统总线)和)和APBAPB(Advanced Peripheral BusAdvanced Peripheral Bus,先进外围总线先进外围总线)等三类总线。)等三类总线。 AHB AHB不但支持突发方式的数据传送,还不但支持突发方式的数据传送,还支持分离式总线事务支持分离式总线事务处理处理,进一步提高总线的,进一步提高总线的利用效率利用效率。在高性能的。在高性能的ARMARM架构系统中,架构系统中,AHBAHB有逐步取代有逐步取代ASBASB的趋势,例如在的趋势,例如在ARM1020EARM1020E处理器核中。处理器核中。 ASBASB是目前是目前ARMARM常用的常用的系统总线系统总

217、线,用来连接高性能系统模块,用来连接高性能系统模块,支持突发方式支持突发方式数据传送数据传送。05:50138一个基于AMBA的典型系统05:50139ARMAMBA接口 APBAPB为外围宏单元提供了为外围宏单元提供了简单的接口简单的接口,也可以把,也可以把APBAPB看作看作ASBASB的余部。的余部。 AMBA AMBA通过测试接口控制器通过测试接口控制器TICTIC(Test Interface Test Interface ControllerController)提供了)提供了模块测试的途径模块测试的途径,允许外部测试者作为,允许外部测试者作为ASBASB总线的主设备来分别总线的主

218、设备来分别测试测试AMBAAMBA上的各个模块。上的各个模块。 AMBA AMBA中的中的宏单元宏单元也可以通过也可以通过JTAGJTAG方式进行测试方式进行测试。虽然。虽然AMBAAMBA的的测试方式通用性稍差些,但其通过并行口的测试比测试方式通用性稍差些,但其通过并行口的测试比JTAGJTAG的测试的测试代价也要低些。代价也要低些。05:501402.7.3ARMI/O结构 ARM ARM处理器内核一般都没有处理器内核一般都没有I/OI/O的部件和模块,的部件和模块,ARMARM处理器中处理器中的的I/OI/O可可通过通过AMBAAMBA总线来扩充总线来扩充。 ARM ARM采用了存储器映

219、像采用了存储器映像I/OI/O的方式,即把的方式,即把I/OI/O端口地址端口地址作为作为特特殊的存储器地址殊的存储器地址。一般的。一般的I/OI/O,如串行接口,它有若干个寄存器,如串行接口,它有若干个寄存器,包括发送数据寄存器(只写)、数据接收寄存器(只读)、控包括发送数据寄存器(只写)、数据接收寄存器(只读)、控制寄存器、状态寄存器(只读)和中断允许寄存器等。这些寄制寄存器、状态寄存器(只读)和中断允许寄存器等。这些寄存器都需相应的存器都需相应的I/OI/O端口地址。应注意的是存储器的单元可以重端口地址。应注意的是存储器的单元可以重复读多次,其读出的值是一致的;而复读多次,其读出的值是一

220、致的;而I/OI/O设备的连续设备的连续2 2次输入,次输入,其其输入值可能不同输入值可能不同。 在许多在许多ARMARM体系结构中体系结构中I/OI/O单元对于用户是不可访问的,只可单元对于用户是不可访问的,只可以以通过系统管理调用通过系统管理调用或通过或通过C C的库函数的库函数来访问。来访问。05:50141ARMI/O结构 ARM ARM架构的处理器一般都没有架构的处理器一般都没有DMADMA(直接存储器存取)部件,(直接存储器存取)部件,只有一些只有一些高档的高档的ARMARM架构架构处理器处理器才具有才具有DMADMA的功能。的功能。 为了能提高为了能提高I/OI/O的处理能力,对

221、于一些要求的处理能力,对于一些要求I/OI/O处理处理速率比较速率比较高的事件高的事件,系统安排了,系统安排了快速中断快速中断FIQFIQ(Fast Interrupt Fast Interrupt reQuestreQuest),而对其余的),而对其余的I/OI/O源仍安排一般中断源仍安排一般中断IRQIRQ。 为为提高中断响应的速度提高中断响应的速度,在设计中可以采用以下办法:,在设计中可以采用以下办法: 提供提供大量后备寄存器大量后备寄存器,在中断响应及返回时,作为保护现,在中断响应及返回时,作为保护现场和恢复现场的上下文切换(场和恢复现场的上下文切换(Context Switching

222、Context Switching)之用。)之用。 用用片内片内RAMRAM结构结构,可加速异常处理,可加速异常处理( (包括中断包括中断) )的进人时间。的进人时间。 快存快存CacheCache和地址变换后备缓冲器和地址变换后备缓冲器TLBTLB(Translation Translation Lookaside BufferLookaside Buffer)采用锁住)采用锁住 (Locked downLocked down)方式以确保临)方式以确保临界代码段不受界代码段不受“不命中不命中”的影响。的影响。05:501422.7.4ARMJTAG调试接口1.1.JTAGJTAG接口接口 J

223、TAG JTAG(Joint Test Action GroupJoint Test Action Group,联合测试行动小组联合测试行动小组)是一种)是一种国际标准国际标准测试协议测试协议,主要用于芯片,主要用于芯片内部测试内部测试及对系统进行及对系统进行仿真仿真、调试调试。JTAGJTAG技术是一技术是一种种嵌入式调试技术嵌入式调试技术,它在芯片,它在芯片内部封装内部封装了专门的了专门的测试电路测试电路TAPTAP( (测试访问口测试访问口) ),通过专用的,通过专用的JTAGJTAG测试工具测试工具对内部节点进行对内部节点进行测试测试。目前大多数比较复杂的器。目前大多数比较复杂的器件都

224、支持件都支持JTAGJTAG协议,如协议,如ARMARM、DSPDSP、FPGAFPGA器件等。器件等。 JTAG JTAG测试允许测试允许多个器件通过多个器件通过JTAGJTAG接口串联接口串联在一起,形成一个在一起,形成一个JTAGJTAG链链,能,能实现对各个器件分别测试。实现对各个器件分别测试。JTAGJTAG接口还常用于实现接口还常用于实现ISPISP(In-System (In-System ProgrammableProgrammable在在系统编程系统编程)功能,如对)功能,如对Flash Flash 器件进行器件进行编程编程等。等。 通过通过JTAGJTAG接口,可对芯片内部

225、的接口,可对芯片内部的所有部件进行访问所有部件进行访问,因而是开发调试嵌,因而是开发调试嵌入式系统的一种入式系统的一种简洁高效的手段简洁高效的手段。 标准的标准的JTAGJTAG接口是接口是4 4线式线式,TMSTMS( (测试模式选择测试模式选择) )、TCKTCK( (测试时钟测试时钟) )、TDITDI( (测测试数据输入试数据输入) )和和TDOTDO( (测试数据输出测试数据输出).).JTAGJTAG接口连接有接口连接有1414针针和和2020针针两种标准。两种标准。 05:5014314针JTAG接口定义未连接未连接NCNC1212测试数据串行输出测试数据串行输出TDOTDO11

226、11测试时钟测试时钟TCKTCK9 9测试模式选择测试模式选择TMSTMS7 7测试数据串行输入测试数据串行输入TDITDI5 5测试系统复位信号测试系统复位信号nTRSTnTRST3 3接地接地GNDGND2 2,4 4,6 6,8 8,1010,1414接电源接电源VCCVCC1 1、1313描描 述述名名 称称引脚引脚05:5014420针JTAG接口定义未连接未连接NCNC1717、1919目标系统复位信号目标系统复位信号nRESETnRESET1515测试数据串行输出测试数据串行输出TDOTDO1313测试时钟返回信号测试时钟返回信号RTCKRTCK1111测试时钟测试时钟TCKTC

227、K9 9测试模式选择测试模式选择TMSTMS7 7测试数据串行输入测试数据串行输入TDITDI5 5接地接地GNDGND4 4,6 6,8 8,1010,1212,1414,1616,1818,2020测试系统复位信号测试系统复位信号nTRSTnTRST3 3接电源接电源VCCVCC2 2目标板参考电压,接电源目标板参考电压,接电源VTrefVTref1 1描描 述述名名 称称引脚引脚05:501452.ARM JTAG调试接口 ARM JTAG ARM JTAG调试接口的结构如下图所示。它由测试访问端口调试接口的结构如下图所示。它由测试访问端口TAPTAP(Test Access PortT

228、est Access Port)控制器控制器、旁路旁路(BypassBypass)寄存器寄存器、指指令寄存器令寄存器、数据寄存器数据寄存器以及与以及与JTAGJTAG接口兼容的接口兼容的ARMARM架构处理器架构处理器组组成。处理器的成。处理器的每个引脚每个引脚都有一个都有一个移位寄存单元移位寄存单元(边界扫描单元(边界扫描单元(BSCBSC,Boundary Scan CellBoundary Scan Cell),),它将它将JTAGJTAG电路与处理器核逻电路与处理器核逻辑电路联系起来,同时,隔离了处理器核逻辑电路与芯片引脚。辑电路联系起来,同时,隔离了处理器核逻辑电路与芯片引脚。所有边

229、界扫描单元构成了所有边界扫描单元构成了边界扫描寄存器边界扫描寄存器BSRBSR,该寄存器电路仅该寄存器电路仅在进行在进行JTAGJTAG测试时有效,在处理器核正常工作时无效。测试时有效,在处理器核正常工作时无效。05:50146JTAG调试接口示意图05:50147(1)JTAG的控制寄存器 测试访问端口测试访问端口TAPTAP控制器控制器对嵌入在对嵌入在ARMARM处理器核内部的测试功处理器核内部的测试功能电路进行能电路进行访问控制访问控制,是一个,是一个同步状态机同步状态机。通过测试模式选。通过测试模式选择择TMSTMS和时钟信号和时钟信号TCKTCK来控制其来控制其状态转移状态转移,实现

230、,实现IEEE1149.1IEEE1149.1标标准所确定的测试逻辑电路的工作时序;准所确定的测试逻辑电路的工作时序; 指令寄存器指令寄存器是是串行移位寄存器串行移位寄存器,通过它可以串行输入执行各,通过它可以串行输入执行各种种操作的指令操作的指令; 数据寄存器组数据寄存器组数据寄存器组数据寄存器组是一组是一组是一组是一组串行移位寄存器串行移位寄存器串行移位寄存器串行移位寄存器。操作指令被串行装入。操作指令被串行装入。操作指令被串行装入。操作指令被串行装入由当前指令所选择的数据寄存器,随着操作的进行,由当前指令所选择的数据寄存器,随着操作的进行,由当前指令所选择的数据寄存器,随着操作的进行,由

231、当前指令所选择的数据寄存器,随着操作的进行,测试结测试结测试结测试结果果果果被串行移出。被串行移出。被串行移出。被串行移出。05:50148JTAG测试信号、TAP状态机(2 2)JTAGJTAG测试信号测试信号 JTAG JTAG包含有包含有TRSTTRST、TCKTCK、TMSTMS、TDITDI、TDOTDO五个测试信号;五个测试信号; JTAG JTAG可对同一电路板上多块芯片进行测试。可对同一电路板上多块芯片进行测试。TRSTTRST、TCKTCK和和TMSTMS信号并行至各个芯片,而一块芯片的信号并行至各个芯片,而一块芯片的TDOTDO接至下一芯片的接至下一芯片的TDITDI。(3

232、 3)TAPTAP状态机状态机 测试访问端口测试访问端口TAPTAP控制器是一个控制器是一个1616状态的有限状态机状态的有限状态机,为,为JTAGJTAG提供提供逻辑控制逻辑控制,控制进人,控制进人JTAGJTAG结构中各种寄存器内数据的结构中各种寄存器内数据的扫描扫描与与操作操作。在。在TCKTCK同步时钟上升沿的同步时钟上升沿的TMSTMS引脚的逻辑电压决定引脚的逻辑电压决定状态转移的过程。状态转移的过程。 由由TDITDI引脚输入到器件的扫描信号有引脚输入到器件的扫描信号有2 2个状态变化路径:用于个状态变化路径:用于指令移入至指令寄存器指令移入至指令寄存器,或用于,或用于数据移入数据

233、移入至相应的数据寄存器至相应的数据寄存器(该数据寄存器由当前指令确定)。(该数据寄存器由当前指令确定)。05:50149(4)JTAG接口控制指令 控制指令用于控制控制指令用于控制JTAGJTAG接口各种操作,控制指令包括接口各种操作,控制指令包括公用公用( (Public)Public)指令和指令和私有私有( (Private)Private)指令。最基本的指令。最基本的公用指令公用指令有:有: BYPASSBYPASS:旁路片上系统逻辑指令旁路片上系统逻辑指令,用于未被测试的芯片,即,用于未被测试的芯片,即把把TDITDI与与TPOTPO旁路(旁路(1 1个时钟延迟)。个时钟延迟)。 EX

234、TESTEXTEST:片外电路测试指令片外电路测试指令,测试电路板上芯片间互连。,测试电路板上芯片间互连。 IDCODEIDCODE:读芯片读芯片IDID码指令码指令,用于识别电路板上的芯片。,用于识别电路板上的芯片。 INTESTINTEST:片内测试指令片内测试指令,边界扫描寄存器位于,边界扫描寄存器位于TDITDI与与TDOTDO引脚引脚之间,处理器核逻辑输入和输出状态被该寄存器捕获和控制。之间,处理器核逻辑输入和输出状态被该寄存器捕获和控制。 ARM ARM公司提供的标准公司提供的标准2020脚脚JTAGJTAG仿真调试接口电路如下图所示,仿真调试接口电路如下图所示,可通过外部可通过外

235、部JTAGJTAG调试电缆或仿真器与开发系统连接调试。调试电缆或仿真器与开发系统连接调试。05:50150JTAG仿真调试接口电路05:5005:50河南理工大学通信工程河南理工大学通信工程151ARMARM指令系统指令系统q1.ARM1.ARM处理器寻址方式处理器寻址方式4q2.ARM2.ARM指令集指令集1705:5005:50河南理工大学通信工程河南理工大学通信工程152ARMARM指令系统指令系统简介简介 ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代码密度低;而T

236、humb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。 05:5005:50河南理工大学通信工程河南理工大学通信工程153ARMARM指令集与指令集与ThumbThumb指令集的关系指令集的关系Thumb指令集具有灵活、小巧的特点ARM指令集支持ARM核所有的特性,具有高效、快速的特点05:5005:50河南理工大学通信工程河南理工大学通信工程1543.1 ARM3.1 ARM处理器寻址方式处理器寻址

237、方式寻址方式分类寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。1.寄存器寻址;2.立即寻址;3.3.寄存器移位寻址;寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.6.多寄存器寻址;多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。05:5005:50河南理工大学通信工程河南理工大学通信工程155 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: MOVR1,R2 ;将R2的值存入R1 SUBR0,R1,R2;将R1的值减去R2的值,结果保存

238、到R0 0xAA0x55R2R1寻址方式分类寻址方式分类寄存器寻址寄存器寻址MOVR1,R20xAA05:5005:50河南理工大学通信工程河南理工大学通信工程156 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOVR0,#0xFF000 ;将立即数0xFF000装入R0寄存器 0x55R0MOV R0,#0xFF00程序存储寻址方式分类寻址方式分类立即寻址立即寻址MOVR0,#0xFF000x

239、FF00从代码中获得数据05:5005:50河南理工大学通信工程河南理工大学通信工程157 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL#3 ;R2的值左移3位,结果放入R0, ;即是R0=R28 ANDS R1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相 ;“与”操作,结果放入R10x55R0R20x01寻址方式分类寻址方式分类寄存器移位寻址寄存器移位寻址MOVR0,R2,LSL#30x080x08逻辑左移3位05:5005:50河

240、南理工大学通信工程河南理工大学通信工程158 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中 SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换 0x55R0R2 0x400000000xAA0x40000000寻址方式分类寻址方式分类寄存器间接寻址寄存器间接寻址LDRR0,R20xAA05:5005:50河南理工大学通信工程河南理工大学通信工程159 基址寻址就是将基址寄存器的内容与指令中给出的

241、偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: LDRR2,R3,#0x0C;读取R3+0x0C地址上的存储单元 ;的内容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值保存到 ; R0指定的存储单元 寻址方式分类寻址方式分类基址寻址基址寻址0x55R2R3 0x400000000xAA0x4000000CLDRR2,R3,#0x0C0xAA将R3+0x0C作为地址装载数据05:5005:50河南理工大学通信工程河南理工大学通信工程160 多寄存器寻址一次可传送几个寄存器值,允许

242、一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIAR1!,R2-R7,R12;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加1) STMIAR0!,R2-R7,R12;将寄存器R2R7、R12的值保 ;存到R0指向的存储; 单元中 ;(R0自动加1)0x40000000R1R20x?0x010x400000000x?R3R40x?R60x?0x020x030x040x400000040x400000080x4000000C存储器寻址方式分类寻址方式分类多寄存器寻址多寄存器寻址LDMIAR1!,R2-R4,R60x010x020x030x04

243、0x4000001005:5005:50河南理工大学通信工程河南理工大学通信工程161 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈寻址方式分类寻址方式分类堆栈寻址堆栈寻址05:5005:50河南理工大学通信工程河南理工大学通信工程162寻址方式分类寻址方式分类堆栈寻址堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0x123456780x1

244、2345678堆栈压栈堆栈压栈05:5005:50河南理工大学通信工程河南理工大学通信工程163栈顶SP栈顶SP栈底空堆栈栈底满堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 寻址方式分类寻址方式分类堆栈寻址堆栈寻址0x123456780x12345678栈顶SP0x12345678栈顶SP压栈压栈05:5005:50河南理工大学通信工程河南理工大学通信工程164所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第

245、一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 寻址方式分类寻址方式分类堆栈寻址堆栈寻址05:5005:50河南理工大学通信工程河南理工大学通信工程165 块拷贝寻址LDM/STM指令可把存储器中的一个数据块加载到多个寄存器中,也可把多个寄存器中的内容保存到存储器中。 如:STMIA R0!,R1-R7 ;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。STMIB R0!,R1-

246、R7 ;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之前增加,;增长方向为向上增长。 寻址方式分类寻址方式分类块拷贝寻址块拷贝寻址05:5005:50河南理工大学通信工程河南理工大学通信工程166 相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOP MOVR6,#1.SUBR1. 寻址方式分类寻址方式分类相对寻址相对寻址05:5005:50河南理工大学通信工程河南理工大学通信工程167ARMA

247、RM指令系统指令系统q 3.1 ARM 3.1 ARM处理器寻址方式处理器寻址方式q 3.2 ARM3.2 ARM指令集指令集05:5005:50河南理工大学通信工程河南理工大学通信工程168 ARM指令的基本格式如下:ARMARM指令格式指令格式S, 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;operand2:第2个操作数;05:5005:50河南理工大学通信工程河南理工大学通信工程169简单的简单的ARMARM程序程序;文件名:TEST1.S ;功能:

248、实现两个寄存器相加 ;说明:使用ARMulate软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束 使用“;”进行注释标号顶格写实际代码段声明文件结束05:5005:50河南理工大学通信工程河南理工大学通信工程1703.2

249、ARM3.2 ARM指令指令1.1.指令格式指令格式202.2.条件码条件码293.3.存储器访问指令存储器访问指令324.4.数据处理指令数据处理指令515.5.乘法指令乘法指令786.ARM6.ARM分支指令分支指令887.7.协处理器指令协处理器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程171 ARM指令的基本格式如下:第第2 2个操作数个操作数S, 灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:#immed_8r常数表达式;Rm寄存器方式;Rm,shift寄存器移位方式;05

250、:5005:50河南理工大学通信工程河南理工大学通信工程172#immed_8r常数表达式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。循环右移10位0x120 0 0 1 0 0 1 00x000 0 0 0 0 0 0 00x000 0 0 0 0 0 0 00x000 0 0 0 0 0 0 00x000 0 0 0 0 0 0 00x000 0 0 0 0 0 0 00x801 0 0 0 0 0 0 00x040 0 0 0 0 1 0 08位常数第第2 2个操作数个操作数05:5005:50河南理工大学通信工程河南理工大学通信工程173#immed_8r常数表达

251、式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。例如:MOVR0,#1ANDR1,R2,#0x0F第第2 2个操作数个操作数05:5005:50河南理工大学通信工程河南理工大学通信工程174Rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。例如:SUBR1,R1,R2MOVPC,R0第第2 2个操作数个操作数05:5005:50河南理工大学通信工程河南理工大学通信工程175Rm,shift寄存器移位方式 将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下:操作码说明操作码说明ASR#n算术右移n位ROR#n循环右移n位LSL#n逻辑左移n位RRX带扩展的循环

252、右移1位LSR#n逻辑右移n位TypeRsType为移位的一种类型,Rs为偏移量寄存器,低8位有效。第第2 2个操作数个操作数05:5005:50河南理工大学通信工程河南理工大学通信工程176LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C第第2 2个操作数个操作数05:5005:50河南理工大学通信工程河南理工大学通信工程177Rm,shift寄存器移位方式例如:ADDR1,R1,R1,LSL#3;R1=R1+R1*8=9R1SUBR1,R1,R2,LSRR3;R1=R1-(R2/2R3)第第2 2个操作数个操作数05:5005:50河南理工大学通信工程

253、河南理工大学通信工程1783.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码293.3.存储器访问指令存储器访问指令334.4.数据处理指令数据处理指令525.5.乘法指令乘法指令786.ARM6.ARM分支指令分支指令887.7.协处理器指令协处理器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程179 ARM指令的基本格式如下:条件码条件码S, 使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。 所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行功

254、能。如果指令不标明条件代码,将默认为无条件(AL)执行。05:5005:50河南理工大学通信工程河南理工大学通信工程180条件码条件码条件助记符条件助记符标志标志含义含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001LSC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于1011LTN!=V有符号数小于1100GTZ=0,N=V有符号数大于1101LEZ=1,N

255、!=V有符号数小于或等于1110AL任何无条件执行(指令默认条件)1111NV任何从不执行(不要使用)指令条件码表指令条件码表05:5005:50河南理工大学通信工程河南理工大学通信工程181C代码:If(a b)a+;Elseb+;对应的汇编代码:CMPR0,R1 ;R0与R1比较ADDHI R0,R0,#1 ;若R0R1,则R0=R0+1ADDLS R1,R1,#1 ;若R01,则R1=R1+1示例:条件码条件码05:5005:50河南理工大学通信工程河南理工大学通信工程1823.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指

256、令334.4.数据处理指令数据处理指令525.5.乘法指令乘法指令786.ARM6.ARM分支指令分支指令887.7.协处理器指令协处理器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程183存储器访问指令存储器访问指令 ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM处理器是冯诺依曼存储结构,程序空间、RAM空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。 存储器访问指令分为单寄存器操作指令和多寄存器操作指令。05:5005:

257、50河南理工大学通信工程河南理工大学通信工程184助记符助记符说明说明操作操作条件码位置条件码位置LDRRd,addressing加载字数据Rdaddressing,addressing索引LDRcondLDRBRd,addressing加载无符号字节数据Rdaddressing,addressing索引LDRcondBLDRTRd,addressing以用户模式加载字数据Rdaddressing,addressing索引LDRcondTLDRBTRd,addressing以用户模式加载无符号字节数据Rdaddressing,addressing索引LDRcondBTLDRHRd,addres

258、sing加载无符号半字数据Rdaddressing,addressing索引LDRcondHLDRSBRd,addressing加载有符号字节数据Rdaddressing,addressing索引LDRcondSBLDRSHRd,addressing加载有符号半字数据Rdaddressing,addressing索引LDRcondSH单寄存器加载指令单寄存器加载指令05:5005:50河南理工大学通信工程河南理工大学通信工程185助记符说明操作条件码位置STRRd,addressing存储字数据addressingRd,addressing索引STRcondSTRBRd,addressing存

259、储字节数据addressingRd,addressing索引STRcondBSTRTRd,addressing以用户模式存储字数据addressingRd, addressing索引STRcondTSTRBTRd,addressing以用户模式存储字节数据addressingRd,addressing索引STRcondBTSTRHRd,addressing存储半字数据addressing Rd,addressing索引STRcondH LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现

260、了程序散转。 所有单寄存器加载/存储指令可分为“字和无符号字节加载存储指令”和“半字和有符号字节加载存储指令。单寄存器存储指令单寄存器存储指令05:5005:50河南理工大学通信工程河南理工大学通信工程186LDR和STR字和无符号字节加载/存储指令 LDR指令用于从内存中读取单一字或字节数据存入寄存器中,STR指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下:单寄存器操作指令单寄存器操作指令 LDRcondTRd, ;将指定地址上的字数据读入Rd STRcondTRd, ;将Rd中的字数据存入指定地址 LDRcondBTRd, ;将指定地址上的字节数据读入Rd STRcondBT

261、Rd, ;将Rd中的字节数据存入指定地址 其中,T为可选后缀。若指令有T,那么即使处理器是在特权模式下,存储系统也将访问看成是在用户模式下进行的。T在用户模式下无效,不能与前索引偏移一起使用T。 05:5005:50河南理工大学通信工程河南理工大学通信工程187LDR和STR字和无符号字节加载/存储指令编码指令执行的条件码I为0时,偏移量为12位立即数,为1时,偏移量为寄存器移位P表示前/后变址U表示加/减B为1表示字节访问,为0表示字访问W表示回写为指令的寻址方式Rd为源/目标寄存器Rn为基址寄存器L用于区别加载(L为1)或存储(L为0)单寄存器操作指令单寄存器操作指令05:5005:50河

262、南理工大学通信工程河南理工大学通信工程188LDR和STR字和无符号字节加载/存储指令 LDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: 立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,#0x12 寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,R2 寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0

263、,R2,LSL #2 单寄存器操作指令单寄存器操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程189 从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: 零偏移。如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0x04!程序相对偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#0x04注意:大多数情况下,必须保证字数据操作的地址是32位对齐的。LDR和STR字和无符号字节加载/存储指令单寄存器操作指令单寄存器操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程190LDR和STR半字和有符号字节加载/存储指令 这

264、类LDR/STR指令可加载有符号半字或字节,可加载/存储无符号半字。偏移量格式、寻址方式与加载/存储字和无符号字节指令相同。 LDRcondSBRd,;将指定地址上的有符号字节读入将指定地址上的有符号字节读入RdLDRcondSHRd,;将指定地址上的有符号半字读入将指定地址上的有符号半字读入RdLDRcondHRd,;将指定地址上的半字数据读入将指定地址上的半字数据读入RdSTRcondHRd,;将将Rd中的半字数据存入指定地址中的半字数据存入指定地址注意注意:1.1.有有符符号号位位半半字字/ /字字节节加加载载是是指指用用符符号号位位加加载载扩扩展展到到3232位位,无无符符号号半半字加

265、载是指用零扩展到字加载是指用零扩展到3232位;位;2.2.半字读写的指定地址必须为偶数,否则将产生不可靠的结果;半字读写的指定地址必须为偶数,否则将产生不可靠的结果;单寄存器操作指令单寄存器操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程191LDR和STR半字和有符号字节加载/存储指令编码指令执行的条件码I为0时,偏移量为12位立即数,为1时,偏移量为寄存器移位P表示前/后变址U表示加/减W表示回写为指令的寻址方式Rd为源/目标寄存器Rn为基址寄存器L用于区别加载(L为1)或存储(L为0)S为1表示有符号访问,为0表示无符号访问H为1表示半字访问,为0表示字节访问单寄存

266、器操作指令单寄存器操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程192LDR和STR指令应用示例:1.1.加载加载/ /存储字和无符号字节指令存储字和无符号字节指令LDRR2,R5;将将R5指向地址的字数据存入指向地址的字数据存入R2STRR1,R0,#0x04;将将R1的数据存储到的数据存储到R0+0x04地址地址LDRBR3,R2,#1;将将R2指向地址的字节数据存入指向地址的字节数据存入R3,R2R2+1STRBR6,R7;将将R6的字节数据存储到的字节数据存储到R7指向的地址指向的地址2.2.加载加载/ /存储半字和有符号字节指令存储半字和有符号字节指令LDRSB

267、R1,R0,R3;将将R0+R3地址上的字节数据存入地址上的字节数据存入R1,;高高24位用符号扩展位用符号扩展LDRHR6,R2,#2;将将R2指向地址的半字数据存入指向地址的半字数据存入R6,高,高16位用位用0扩展扩展;读出后,读出后,R2=R2+2STRHR1,R0,#2!;将将R1的半字数据保存到的半字数据保存到R0+2地址,地址,;只修改低只修改低2字节数据,字节数据,R0=R0+2单寄存器操作指令单寄存器操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程193助记符助记符说明说明操作操作条件码位置条件码位置LDMmodeRn!,reglist 多寄存器加载多寄存

268、器加载reglistRn.reglistRn.,RnRn回写等回写等LDMcondmodeLDMcondmodeSTMmodeRn!,reglist 多寄存器存储多寄存器存储Rn.reglist,RnRn.reglist,Rn回写等回写等STMcondmodeSTMcondmode多寄存器存取指令多寄存器存取指令 多寄存器加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。LDM为加载多个寄存器;STM为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现场保护、数据复制、常数传递等。05:5005:50河南理工大学通信工程河南理工大学通信工程19

269、4 多寄存器加载/存储指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令执行的条件;模式:控制地址的增长方式,一共有8种模式;!:表示在操作结束后,将最后的地址写回Rn中;reglist :表示寄存器列表,可以包含多个寄存器,它们使用“,”隔开,如R1,R2,R6-R9,寄存器由小到大排列;:加入该后缀后,进行数据传送且寄存器列表不包含PC时,加载/存储的寄存器是用户模式下的,而不是当前模式的寄存器。若在LDM指令且寄存器列表中包含有PC时使用,那么除了正常的多寄存器传送外,还将SPSR也拷贝到CPSR中,这可用于异常处理返回。注意:该

270、后缀不允许在用户模式或系统模式下使用。多寄存器存取指令多寄存器存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程195LDM和STM多寄存器加载/存储指令编码指令执行的条件码S对应于指令中的”符号P表示前/后变址U表示加/减W表示回写寄存器列表Rn为基址寄存器L用于区别加载(L为1)或存储(L为0)多寄存器存取指令多寄存器存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程196 多多寄寄存存器器加加载载/ /存存储储指指令令的的8 8种种模模式式如如下下表表所所示示,右右边边四四种种为为堆堆栈操作、左边四种为数据传送操作栈操作、左边四种为数据传送操作(p10

271、9)。模式模式说明说明模式模式说明说明IAIA每次传送后地址加每次传送后地址加4 4FDFD满递减堆栈满递减堆栈IBIB每次传送前地址加每次传送前地址加4 4EDED空递减堆栈空递减堆栈DADA每次传送后地址减每次传送后地址减4 4FAFA满递增堆栈满递增堆栈DBDB每次传送前地址减每次传送前地址减4 4EAEA空递增堆栈空递增堆栈数据块传送操作数据块传送操作堆栈操作堆栈操作 进进行行数数据据复复制制时时,先先设设置置好好源源数数据据指指针针和和目目标标指指针针,然然后后使使用用块块 拷拷 贝贝 寻寻 址址 指指 令令 LDMIA/STMIALDMIA/STMIA、 LDMIB/STMIBLD

272、MIB/STMIB、 LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB进行读取和存储进行读取和存储 。 进进行行堆堆栈栈操操作作操操作作时时,要要先先设设置置堆堆栈栈指指针针(SPSP),然然后后使使用用堆堆栈栈 寻寻 址址 指指 令令 STMFD/LDMFD STMFD/LDMFD 、 STMED/LDMEDSTMED/LDMED、 STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA实现堆栈操作。实现堆栈操作。多寄存器存取指令多寄存器存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程197数

273、数据据块块传传送送指指令令操操作作过过程程如如右右图图所所示示,其其中中R1R1为为指指令令执执行行前前的的基基址址寄寄存存器器,R1R1则则为为指指令令执执行行后后的基址寄存器。的基址寄存器。R5R6R7R1R1指令指令STMIAR1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1R1指令指令STMDAR1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1R1指令指令STMIBR1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1R1指令指令STMDBR1!,R5-R74

274、008H4004H4000H4014H4010H400CH多寄存器存取指令多寄存器存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程198数据块传送存储堆栈操作压栈说明数据块传送加载堆栈操作出栈说明STMDASTMED空递减LDMDALDMFA满递增STMIASTMEA空递增LDMIALDMFD满递减STMDBSTMFD满递减LDMDBLDMEA空递增STMIBSTMFA满递增LDMIBLDMED空递减;使用数据块传送指令进行堆栈操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆栈指令进行堆栈操作STMEDR0!,R5-R6. . .LDMEDR0

275、!,R5-R6 两两段段代代码码的的执执行行结结果果是是一一样样的的,但但是是使使用用堆堆栈栈指指令令的的压压栈栈和和出出栈栈操操作作编编程程很很简简单单(只只要要前前后后一一致致即即可可),而而使使用用数数据据块块指指令令进进行行压压栈栈和和出栈操作则需要考虑空与满、加与减对应的问题。出栈操作则需要考虑空与满、加与减对应的问题。 堆堆栈栈操操作作和和数数据据块块传传送送指指令令类类似似,也也有有4 4种种模模式式,如如下下表表所所示示(p109) :多寄存器存取指令多寄存器存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程199助记符助记符说明说明操作操作条件码位置条件码位

276、置SWPRd,Rm,Rn寄存器和存储器字数据交换寄存器和存储器字数据交换RdRnRdRn,RnRm (RnRdRnRm (RnRd或或Rm)Rm)SWPcondSWPcondSWPBRd,Rm,Rn 寄存器和存储器字节数据交换寄存器和存储器字节数据交换RdRnRdRn,RnRm (RnRdRnRm (RnRd或或Rm)Rm)SWPcondBSWPcondB寄存器和存储器交换指令寄存器和存储器交换指令 SWPSWP指指令令用用于于将将一一个个内内存存单单元元( (该该单单元元地地址址放放在在寄寄存存器器RnRn中中) )的的内内容容读读取取到到一一个个寄寄存存器器RdRd中中,同同时时将将另另一

277、一个个寄寄存存器器RmRm的的内内容容写写入入到到该该内内存存单单元元中。使用中。使用SWPSWP可实现信号量操作。可实现信号量操作。 指令格式如下:指令格式如下:SWPcondBRd,Rm,Rn 其其中中,B B为为可可选选后后缀缀,若若有有B B,则则交交换换字字节节,否否则则交交换换3232位位字字;RdRd用用于于保保存存从从存存储储器器中中读读入入的的数数据据;RmRm的的数数据据用用于于存存储储到到存存储储器器中中,若若RmRm与与RnRn相相同同,则则为为寄寄存存器器与与存存储储器器内内容容进进行行交交换换;RnRn为为要要进进行行数数据据交交换换的的存存储储器器地址,地址,Rn

278、Rn不能与不能与RdRd和和RmRm相同。相同。 05:5005:50河南理工大学通信工程河南理工大学通信工程200SWP和SWPB寄存器和存储器交换指令编码指令执行的条件码B用于区别无符号字节(B为1)或字(B为0)Rm源寄存器Rd目标寄存器Rn为基址寄存器SWP指令应用示例:SWPR1,R1,R0;将R1的内容与R0指向的存储单元的内容进行交换 SWPBR1,R2,R0;将R0指向的存储单元内的容读取一字节数据到R1中;(高24位清零),并将R2的内容写入到该内存单元中;(最低字节有效) 寄存器和存储器交换指令寄存器和存储器交换指令05:5005:50河南理工大学通信工程河南理工大学通信工

279、程2013.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令525.5.乘法指令乘法指令786.ARM6.ARM分支指令分支指令887.7.协处理器指令协处理器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程202ARMARM数据处理指令数据处理指令 数据处理指令大致可分为3类: 数据传送指令;算术逻辑运算指令;比较指令。 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使

280、用S后缀,并影响状态标志。 05:5005:50河南理工大学通信工程河南理工大学通信工程203数据处理指令编码数据处理指令编码指令执行的条件码I用于区别立即数(I为1)和寄存器移位(I为0)opcode数据处理指令操作码第二操作数Rd目标寄存器Rn第一操作数寄存器S设置条件码,与指令中的S位对应带进位加法ADC0101带进位减法指令SBC0110带进位逆向减法指令RSC0111位测试指令TST1000相等测试指令TEQ1001比较指令CMP1010负数比较指令CMN1011逻辑或操作指令ORR1100数据传送MOV1101位清除指令BIC1110数据非传送MVN1111加法运算指令ADD010

281、0逆向减法指令RSB0011减法运算指令SUB0010逻辑异或操作指令EOR0001逻辑与操作指令AND0000说明指令助记符操作码opcode操作码功能表05:5005:50河南理工大学通信工程河南理工大学通信工程204助记符说明操作条件码位置MOV Rd,operand2数据传送Rdoperand2 MOVcondSMVN Rd,operand2数据非传送Rd(operand2)MVNcondS数据传送指令05:5005:50河南理工大学通信工程河南理工大学通信工程205助记符说明操作条件码位置MOV Rd,operand2MOV Rd,operand2数据传送Rdoperand2 MOV

282、condSMVN Rd,operand2数据非传送Rd(operand2)MVNcondS MOV指令将8位图立即数(参看“第2操作数:#immed_8r常数表达式”)或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令举例如下: MOVR1,#0x10;R1=0x10 MOVR0,R1;R0=R1 MOVSR3,R1,LSL #2;R3=R12,并影响标志位 MOVPC,LR;PC=LR,子程序返回 数据传送指令05:5005:50河南理工大学通信工程河南理工大学通信工程206助记符说明操作条件码位置MOV Rd,ope

283、rand2数据传送Rdoperand2 MOVcondSMVN Rd,operand2MVN Rd,operand2数据非传送Rd(operand2)MVNcondS MVN指令将8位图立即数(参看“第2操作数:#immed_8r常数表达式 ”)或寄存器(operand2)按位取反后传送到目标寄存器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数。指令格式如下: MVNcondS Rd,operand2 MVN指令举例如下: MVNR1,#0xFF;R1=0xFFFFFF00 MVNR1,R2;将R2取反,结果存到R1数据传送指令05:5005:50河南理工大学通信工程河南理工大学通

284、信工程207助记符说明操作条件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2带进位逆向减法指令R

285、doperand2-Rn-(NOT)CarryRSCcondS算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程208助记符说明操作条件码位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2 加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2 减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2 逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2 带进位加法RdRn+operand2+CarryADC

286、condSSBC Rd, Rn, operand2 带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2 带进位逆向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 加加法法运运算算指指令令ADDADD指指令令将将operand2operand2的的值值与与RnRn的的值值相相加加,结结果果保保存到存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADDcondSRd,Rn,operand2 应用示例:应用示例:ADDSR1,R1,#1;R1=R1+1;R1=R1+1,并影响标志位,并影响标志位A

287、DDR1,R1,R2;R1=R1+R2;R1=R1+R2 算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程209助记符说明操作条件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法RdRn+operand2+CarryADCcondSS

288、BC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2带进位逆向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 减减法法运运算算指指令令SUBSUB指指令令用用寄寄存存器器RnRn减减去去operand2operand2,结结果果保保存存到到RdRd中。指令格式如下:中。指令格式如下: SUBcondSRd,Rn,operand2 应用示例:应用示例:SUBSR0,R0,#1;R0=R0-1 ;R0=R0-1 ,并影响标志位,并影响标志位SUBSR2,R1,R2;R2

289、=R1-R2;R2=R1-R2 ,并影响标志位,并影响标志位 算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程210助记符说明操作条件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法RdRn+operand2+CarryADCcond

290、SSBC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2带进位逆向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 逆逆向向减减法法运运算算指指令令RSBRSB指指令令将将operand2operand2的的值值减减去去RnRn,结结果果保保存存到到RdRd中。指令格式如下:中。指令格式如下: RSBcondSRd,Rn,operand2 应用示例:应用示例:RSBR3,R1,#0xFF00;R3=0xFF00-R1;R3=0xFF00-R1RSBSR1,R2,R2,

291、LSL#2;R1=(R22)-R2=R2;R1=(R22)-R2=R23 3 算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程211助记符说明操作条件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法RdRn+operand2+Carr

292、yADCcondSSBC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2带进位逆向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 带带进进位位加加法法指指令令ADCADC将将operand2operand2的的值值与与RnRn的的值值相相加加,再再加加上上CPSRCPSR中的中的C C条件标志位,结果保存到条件标志位,结果保存到RdRd寄存器。指令格式如下:寄存器。指令格式如下: ADCcondSRd,Rn,operand2 应用示例(使用应用示例(使用ADCADC

293、实现实现6464位加法,结果存于位加法,结果存于R1R1、R0R0中):中):ADDSR0,R0,R2;R0;R0等于低等于低3232位相加,并影响标志位位相加,并影响标志位ADCR1,R1,R3;R1;R1等于高等于高3232位相加,并加上低位进位位相加,并加上低位进位算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程212助记符说明操作条件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, o

294、perand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2带进位逆向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 带带进进位位减减法法指指令令SBCSBC用用寄寄存存器器RnRn减减去去operand2operand2,再再减减去去CPSRCPSR中中的的C

295、C条条件件标标志志位位的的非非( (即即若若C C标标志志清清零零,则则结结果果减减去去1)1),结结果果保保存存到到RdRd中中。指指令格式如下:令格式如下: SBCcondSRd,Rn,operand2 应用示例(使用应用示例(使用SBCSBC实现实现6464位减法,结果存于位减法,结果存于R1R1、R0R0中):中):SUBSR0,R0,R2; ; 低低3232位相减,并影响标志位位相减,并影响标志位SBCR1,R1,R3; ;高高3232位相减,并减去低位借位位相减,并减去低位借位算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程213助记符说明操作条

296、件码位置ADD Rd, Rn, operand2加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2带进位减法指令RdRn-operand2-(NOT)CarrySBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2带进位逆

297、向减法指令Rdoperand2-Rn-(NOT)CarryRSCcondS 带带进进位位逆逆向向减减法法指指令令RSCRSC指指令令用用寄寄存存器器operand2operand2减减去去RnRn,再再减减去去CPSRCPSR中的中的C C条件标志位,结果保存到条件标志位,结果保存到RdRd中。指令格式如下:中。指令格式如下: RSCcondSRd,Rn,operand2 应用示例(使用应用示例(使用RSCRSC指令实现求指令实现求6464位数值的负数位数值的负数 ):):RSBSR2,R0,#0RSCR3,R1,#0算术运算指令算术运算指令05:5005:50河南理工大学通信工程河南理工大学

298、通信工程214助记符说明操作条件码位置AND Rd, Rn, operand2逻辑与操作指令RdRn & operand2ANDcondSORR Rd, Rn, operand2逻辑或操作指令RdRn | operand2ORRcondSEOR Rd, Rn, operand2逻辑异或操作指令RdRn operand2EORcondSBIC Rd, Rn, operand2位清除指令RdRn & (operand2)BICcondS逻辑运算指令逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程215助记符说明操作条件码位置AND Rd, Rn, operand2AND R

299、d, Rn, operand2逻辑与操作指令RdRn & operand2ANDcondSORR Rd, Rn, operand2逻辑或操作指令RdRn | operand2ORRcondSEOR Rd, Rn, operand2逻辑异或操作指令RdRn operand2EORcondSBIC Rd, Rn, operand2位清除指令RdRn & (operand2)BICcondS 逻逻辑辑与与操操作作指指令令ANDAND指指令令将将operand2operand2的的值值与与寄寄存存器器RnRn的的值值按按位位作逻辑作逻辑“与与”操作,结果保存到操作,结果保存到RdRd中。指令格式如下:

300、中。指令格式如下: ANDcondSRd,Rn,operand2 应用示例:应用示例:ANDSR0,R0,#0x01 ;R0=R0&0x01;R0=R0&0x01,取出最低位数据,取出最低位数据ANDR2,R1,R3;R2=R1&R3;R2=R1&R3 逻辑运算指令逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程216助记符说明操作条件码位置AND Rd, Rn, operand2逻辑与操作指令RdRn & operand2ANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2逻辑或操作指令RdRn | operand2ORRc

301、ondSEOR Rd, Rn, operand2逻辑异或操作指令RdRn operand2EORcondSBIC Rd, Rn, operand2位清除指令RdRn & (operand2)BICcondS 逻逻辑辑或或操操作作指指令令ORRORR指指令令将将operand2operand2的的值值与与寄寄存存器器RnRn的的值值按按位位作逻辑作逻辑“或或”操作,结果保存到操作,结果保存到RdRd中。指令格式如下:中。指令格式如下: ORRcondSRd,Rn,operand2 应用示例:应用示例: ORRR0,R0,#0x0F; ;将将R0R0的低的低4 4位置位置1 1 MOVR1,R2,

302、LSR#24; ;使用使用ORRORR指令将指令将R2R2的高的高8 8位位ORRR3,R1,R3,LSL#8; ;数据移入到数据移入到R3R3低低8 8位中位中 逻辑运算指令逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程217助记符说明操作条件码位置AND Rd, Rn, operand2逻辑与操作指令RdRn & operand2ANDcondSORR Rd, Rn, operand2逻辑或操作指令RdRn | operand2ORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2逻辑异或操作指令RdRn operand2

303、EORcondSBIC Rd, Rn, operand2位清除指令RdRn & (operand2)BICcondS 逻逻辑辑异异或或操操作作指指令令EOREOR指指令令将将operand2operand2的的值值与与寄寄存存器器RnRn的的值值按按位作逻辑位作逻辑“异或异或”操作,结果保存到操作,结果保存到RdRd中。指令格式如下:中。指令格式如下: EORcondSRd,Rn,operand2 应用示例:应用示例:EORR1,R1,#0x0F; ;将将R1R1的低的低4 4位取反位取反 EORR2,R1,R0;R2=R1R0;R2=R1R0 EORSR0,R5,#0x01; ; 将将R5R

304、5和和0x010x01进行逻辑异或,进行逻辑异或,; ;结果保存到结果保存到R0R0,并影响标志位,并影响标志位 逻辑运算指令逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程218助记符说明操作条件码位置AND Rd, Rn, operand2逻辑与操作指令RdRn & operand2ANDcondSORR Rd, Rn, operand2逻辑或操作指令RdRn | operand2ORRcondSEOR Rd, Rn, operand2逻辑异或操作指令RdRn operand2EORcondSBIC Rd, Rn, operand2BIC Rd, Rn, opera

305、nd2位清除指令RdRn &(operand2)BICcondS 位位清清除除指指令令BICBIC指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值的的反反码码按按位位作逻辑作逻辑“与与”操作,结果保存到操作,结果保存到RdRd中。指令格式如下:中。指令格式如下: BICcondSRd,Rn,operand2 应用示例:应用示例:BICR1,R1,#0x0F ; ;将将R1R1的低的低4 4位清零,其它位不变位清零,其它位不变 BIC R1,R2,R3 ; ;将将R3R3的反码和的反码和R2R2相逻辑相逻辑“与与”,结果保存到,结果保存到R1R1中中逻辑运算指

306、令逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程219助记符说明操作条件码位置CMP Rn, operand2比较指令标 志 N、 Z、 C、 VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程220助记符说明操作

307、条件码位置CMP Rn, operand2CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn&operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRnoperand2TEQcond 比比较较指指令令CMPCMP指指令令将将寄寄存存器器RnRn的的值值减减去去operand2operand2的的值值,根根据据操操作作的的结结果果更更新新CPSRCPSR中

308、中的的相相应应条条件件标标志志位位,以以便便后后面面的的指指令令根根据据相相应应的的条条件件标志来判断是否执行。指令格式如下:标志来判断是否执行。指令格式如下: CMPcondRn,operand2 应用示例:应用示例:CMPR1,#10; R1; R1与与1010比较,设置相关标志位比较,设置相关标志位CMPR1,R2; ; R1R1与与R2R2比较,设置相关标志位比较,设置相关标志位 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程221助记符说明操作条件码位置CMP Rn, operand2CMP Rn, operand2比较指令标 志 N、 Z、 C、 VR

309、n-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 比比较较指指令令CMPCMP指指令令将将寄寄存存器器RnRn的的值值减减去去operand2operand2的的值值,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的的指指令令根根据据相相应应的的条条件件标志

310、来判断是否执行。指令格式如下:标志来判断是否执行。指令格式如下: CMPcondRn,operand2 注注意意:CMPCMP指指令令与与SUBSSUBS指指令令的的区区别别在在于于CMPCMP指指令令不不保保存存运运算算结结果果。在在进进行行两两个数据的大小判断时,常用个数据的大小判断时,常用CMPCMP指令及相应的条件码来操作。指令及相应的条件码来操作。 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程222助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2CMN

311、 Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 负负数数比比较较指指令令CMNCMN指指令令使使用用寄寄存存器器RnRn的的值值加加上上operand2operand2的的值值,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的的指指令令根根据据相相应应的的条件标志来判断是否执行。指令格式如下:条

312、件标志来判断是否执行。指令格式如下: CMNcondRn,operand2 应用示例:应用示例:CMN R0,#1; R0+1; R0+1,判断,判断R0R0是否为是否为1 1的补码的补码, ,如是,置如是,置Z Z标志位标志位比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程223助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2CMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令

313、标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 负负数数比比较较指指令令CMNCMN指指令令使使用用寄寄存存器器RnRn的的值值加加上上operand2operand2的的值值,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的的指指令令根根据据相相应应的条件标志来判断是否执行。指令格式如下:的条件标志来判断是否执行。指令格式如下: CMPcondRn,operand2注注意意:CMNCMN指指令令与与ADDSADDS指指令令的

314、的区区别别在在于于CMNCMN指指令令不不保保存存运运算算结结果果。CMNCMN指指令令可可用用于于负负数数比比较较,比比如如CMN CMN R0,#1R0,#1指指令令则则表表示示R0R0与与-1-1比比较较,若若R0R0为为-1(-1(即即1 1的的补码补码) ),则,则Z Z置位;否则置位;否则Z Z复位。复位。 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程224助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+opera

315、nd2CMNcondTST Rn, operand2TST Rn, operand2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 位位测测试试指指令令TSTTST指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值按按位位作作逻逻辑辑“与与”操操作作,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的指令根据相应的条件标志来判断是否执行。指令格式如下:的指令根据相应的条件标志来判断是否

316、执行。指令格式如下: TSTcondRn,operand2 应用示例:应用示例:TSTR0,#0x01; ; 判断判断R0R0的最低位是否为的最低位是否为0 0 TSTR1,#0x0F; ; 判断判断R1R1的低的低4 4位是否为位是否为0 0 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程225助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2TST Rn, oper

317、and2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 位位测测试试指指令令TSTTST指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值按按位位作作逻逻辑辑“与与”操操作作,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的指令根据相应的条件标志来判断是否执行。指令格式如下:的指令根据相应的条件标志来判断是否执行。指令格式如下: TSTcondRn,operand2注注意意:TSTT

318、ST指指令令与与ANDSANDS指指令令的的区区别别在在于于TSTTST指指令令不不保保存存运运算算结结果果。TSTTST指指令令通通常常与与EQEQ、NENE条条件件码码配配合合使使用用,当当所所有有测测试试位位均均为为0 0时时,EQEQ有有效效,而而只只要要有有一一个测试位不为个测试位不为0 0,则,则NENE有效。有效。 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程226助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+

319、operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn & operand2TSTcondTEQ Rn, operand2TEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 相相等等测测试试指指令令TEQTEQ指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值按按位位作作逻逻辑辑“异异或或”操操作作,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:后面的指令根据相应的

320、条件标志来判断是否执行。指令格式如下: TEQcondRn,operand2 应用示例:应用示例:TEQR0,R1; ; 比较比较R0R0与与R1R1是否相等是否相等 ( (不影响不影响V V位和位和C C位位) )比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程227助记符说明操作条件码位置CMP Rn, operand2比较指令标志N、Z、C、VRn-operand2CMPcondCMN Rn, operand2负数比较指令标志N、Z、C、VRn+operand2CMNcondTST Rn, operand2位测试指令标志N、Z、C、VRn & operand2

321、TSTcondTEQ Rn, operand2TEQ Rn, operand2相等测试指令标志N、Z、C、VRn operand2TEQcond 相相等等测测试试指指令令TEQTEQ指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值按按位位作作逻逻辑辑“异异或或”操操作作,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:后面的指令根据相应的条件标志来判断是否执行。指令格式如下: TEQcondRn,operand2注注意意:TEQTEQ指指令令与与EOR

322、SEORS指指令令的的区区别别在在于于TEQTEQ指指令令不不保保存存运运算算结结果果。使使用用TEQTEQ进进行行相相等等测测试试时时,常常与与EQEQ、NENE条条件件码码配配合合使使用用。当当两两个个数数据据相相等等时时,EQEQ有有效效;否则否则NENE有效。有效。 比较指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程2283.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令5.5.乘法指令乘法指令796.ARM6.ARM分支指令分支指令887.7.协处理器指令协处理

323、器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程229乘法指令乘法指令 ARM7TDMI具有三种乘法指令,分别为:3232位乘法指令;32 32位乘加指令;32 32位结果为64位的乘/乘加指令。05:5005:50河南理工大学通信工程河南理工大学通信工程230乘法指令编码指令执行的条件码Opcode乘法指令操作码S设置条件码,与指令中的S位对应Rm为被乘数寄存器Rd/RdLo为MLA指令相加的寄存器或64位乘法指令的目标寄存器(低32位)Rn/RdHi为目标寄存器或64位乘法指令的目标寄存器(高32位)Rs为乘数寄

324、存器64位有符号乘加指令SMLAL11164位有符号乘法指令SMULL11064位无符号乘加指令UMLAL10164位无符号乘法指令UMULL10032位乘加指令MLA00132位乘法指令MUL000说明指令助记符操作码opcode操作码功能表乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程231助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无

325、符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程232助记符助记符说明说明操作操作条件码位置条件码位置MUL

326、 Rd,Rm,RsMUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,

327、Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS 3232位位乘乘法法指指令令MULMUL指指令令将将RmRm和和RsRs中中的的值值相相乘乘,结结果果的的低低3232位位保保存到存到RdRd中。指令格式如下:中。指令格式如下:MULcondSRd,Rm,Rs 应用示例:应用示例:MULR1,R2,R3;R1=R2;R1=R2R3R3MULSR0,R3,R7;R0=R3;R0=R3R7R7,同时影响,同时影响CPSRCPSR中的中的N N位和位和Z Z位位 乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程2

328、33助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,RnMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi)

329、 Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS 3232位位乘乘加加指指令令MLAMLA指指令令将将RmRm和和RsRs中中的的值值相相乘乘,再再将将乘乘积积加加上上第第3 3个操作数,结果的低个操作数,结果的低3232位保存到位保存到RdRd中。指令格式如下:中。指令格式如下: MLAcondSRd,Rm,Rs,Rn 应用示例:应用示例:MLAR1,R2,R3,R0; R1=R2; R1=R2R3+R0R3+R0乘法指令乘法指令05:5005:50河南理工大学通信工程

330、河南理工大学通信工程234助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,RsUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有

331、符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS 6464位位无无符符号号乘乘法法指指令令UMULLUMULL指指令令将将RmRm和和RsRs中中的的值值作作无无符符号号数数相相乘,结果的低乘,结果的低3232位保存到位保存到RdLoRdLo中,而高中,而高3232位保存到位保存到RdHiRdHi中。指令格式如下:中。指令格式如下: UMULLcondSRdLo,RdHi,Rm,Rs 应用示例:应用示例:UMULLR0,R1,R5,R8;

332、 (R1; (R1、R0)=R5R0)=R5R8R8 乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程235助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,RsUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdH

333、i) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS 6464位位无无符符号号乘乘加加指指令令UMLALUMLAL指指令令将将RmRm和和RsRs中中的的值值作作无无符符号号数数相相乘乘,6464位位乘乘积积与与RdHiRdHi、RdLoRdLo相相加加,结结果果的的低低3232位位保保存存到到RdLoRdLo中中,而而高高3232位

334、位保存到保存到RdHiRdHi中。指令格式如下:中。指令格式如下: UMLALcondSRdLo,RdHi,Rm,Rs 应用示例:应用示例:UMLALR0,R1,R5,R8;(R1;(R1、R0)=R5R0)=R5R8+(R1R8+(R1、R0) R0) 乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程236助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,

335、Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,RsSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS 6464位位有有符符号号乘乘法法指指令令SMULLSMULL指指令令将将RmRm

336、和和RsRs中中的的值值作作有有符符号号数数相相乘,结果的低乘,结果的低3232位保存到位保存到RdLoRdLo中,而高中,而高3232位保存到位保存到RdHiRdHi中。指令格式如下:中。指令格式如下: SMULLcondSRdLo,RdHi,Rm,Rs 应用示例:应用示例:SMULLR2,R3,R7,R6; (R3; (R3、R2)=R7R2)=R7R6R6 乘法指令乘法指令05:5005:50河南理工大学通信工程河南理工大学通信工程237助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,R

337、s,Rn32位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,RsSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,R

338、dHi)SMLALcondS 6464位位有有符符号号乘乘加加指指令令SMLALSMLAL指指令令将将RmRm和和RsRs中中的的值值作作有有符符号号数数相相乘乘,6464位位乘乘积积与与RdHiRdHi、RdLoRdLo相相加加,结结果果的的低低3232位位保保存存到到RdLoRdLo中中,而而高高3232位位保存到保存到RdHiRdHi中。指令格式如下:中。指令格式如下: SMLALcondSRdLo,RdHi,Rm,Rs 应用示例:应用示例:SMLALR2,R3,R7,R6; (R3; (R3、R2)=R7R2)=R7R6+(R3R6+(R3、R2)R2) 乘法指令乘法指令05:5005

339、:50河南理工大学通信工程河南理工大学通信工程2383.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令5.5.乘法指令乘法指令6.6.ARMARM分支指令分支指令897.7.协处理器指令协处理器指令978.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程239分支指令分支指令 在在ARMARM中中有有两两种种方方式式可可以以实实现现程程序序的的跳跳转转,一一种种是是使使用用分分支支指指令令直直接接跳跳转转,另另一一种种则则是是直直接接

340、向向PCPC寄寄存存器器赋赋值实现跳转。值实现跳转。 分支指令有以下三种:分支指令有以下三种:分支指令分支指令B B;带链接的分支指令带链接的分支指令BLBL;带状态切换的分支指令带状态切换的分支指令BXBX。05:5005:50河南理工大学通信工程河南理工大学通信工程240分支指令B/BL指令编码格式指令执行的条件码L区别B指令(L为0)和BL指令(L为1)24位有符号立即数(偏移量)分支指令BX指令编码格式指令执行的条件码Rm目标地址寄存器,该寄存器装载跳转地址分支指令编码分支指令编码05:5005:50河南理工大学通信工程河南理工大学通信工程241助记符助记符说明说明操作操作条件码位置条

341、件码位置B label分支指令PClabelBcondBL label带链接的分支指令LRPC-4,PClabelBLcondBX Rm带状态切换的分支指令 PClabel,切换处理器状态 BXcond分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程242助记符助记符说明说明操作操作条件码位置条件码位置B labelB label分支指令PClabelBcondBL label带链接的分支指令LRPC-4,PClabelBLcondBX Rm带状态切换的分支指令PClabel,切换处理器状态BXcond 分分支支指指令令B B指指令令,该该指指令令跳跳转转范范围围限

342、限制制在在当当前前指指令令的的32M32M字字节地址内节地址内(ARM(ARM指令为字对齐,最低指令为字对齐,最低2 2位地址固定为位地址固定为0)0)。指令格式如下:。指令格式如下:BcondLabel 应用示例:应用示例:BWAITA; ; 跳转到跳转到WAITAWAITA标号处标号处B0x1234; ; 跳转到绝对地址跳转到绝对地址0x12340x1234处处 分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程243BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC助记符助记符说明说明操作操作条件码位置条件码位

343、置B label分支指令PClabelBcondBL labelBL label带链接的分支指令LRPC-4,PClabelBLcondBX Rm带状态切换的分支指令PClabel,切换处理器状态BXcond 带带链链接接的的分分支支指指令令BLBL指指令令适适用用于于子子程程序序调调用用,使使用用该该指指令令后后,下下一一条条指指令令的的地地址址被被拷拷贝贝到到R14(R14(即即LR) LR) 连连接接寄寄存存器器中中,然然后后跳跳转转到到指指定定地地址运行程序。跳转范围限制在当前指令的址运行程序。跳转范围限制在当前指令的32M32M字节地址内。指令格式如下:字节地址内。指令格式如下:BL

344、condLabelAddr1LabelAddr2Addr21.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR寄存器,并把跳转地址装入程序计数器(PC)2. 程序跳转到目标地址Label继续执行,当子程序执行结束后,将LR寄存器内容存入PC,返回调用函数继续执行分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程244助记符助记符说明说明操作操作条件码位置条件码位置B label分支指令PClabelBcondBL labelBL label带链接的分支指令LRPC-4,PClabelBLcondBX Rm带状态切换的分支指令PClabel,切换处理

345、器状态BXcond 带带链链接接的的分分支支指指令令BLBL指指令令适适用用于于子子程程序序调调用用,使使用用该该指指令令后后,下下一一条条指指令令的的地地址址被被拷拷贝贝到到R14(R14(即即LR) LR) 连连接接寄寄存存器器中中,然然后后跳跳转转到到指指定定地地址运行程序。跳转范围限制在当前指令的址运行程序。跳转范围限制在当前指令的32M32M字节地址内。指令格式如下:字节地址内。指令格式如下:BLcondLabel 应用示例:应用示例:BLDELAY; ; 调用子程序调用子程序DELAYDELAY分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程245助记符

346、助记符说明说明操作操作条件码位置条件码位置B label分支指令PClabelBcondBL label带链接的分支指令LRPC-4,PClabelBLcondBX RmBX Rm带状态切换的分支指令PClabel,切换处理器状态BXcond 带带状状态态切切换换的的分分支支指指令令BXBX指指令令,该该指指令令可可以以根根据据跳跳转转地地址址(RmRm)的的最最低低位位来来切切换换处处理理器器状状态态。其其跳跳转转范范围围限限制制在在当当前前指指令令的的32M32M字字节地址内节地址内(ARM(ARM指令为字对齐,最低指令为字对齐,最低2 2位地址固定为位地址固定为0)0)。指令格式如下:。

347、指令格式如下:BXcondRm跳转地址Rm0跳转后跳转后CPSR标志T位处理器状态00ARM11Thumb分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程246助记符助记符说明说明操作操作条件码位置条件码位置B label分支指令PClabelBcondBL label带链接的分支指令LRPC-4,PClabelBLcondBX RmBX Rm带状态切换的分支指令PClabel,切换处理器状态BXcond 带带状状态态切切换换的的分分支支指指令令BXBX指指令令,该该指指令令可可以以根根据据跳跳转转地地址址(RmRm)的的最最低低位位来来切切换换处处理理器器状状态态

348、。其其跳跳转转范范围围限限制制在在当当前前指指令令的的32M32M字字节地址内节地址内(ARM(ARM指令为字对齐,最低指令为字对齐,最低2 2位地址固定为位地址固定为0)0)。指令格式如下:。指令格式如下:BXcondRm 应用示例:应用示例:ADRLR0,ThumbFun+1; ;将将ThumbThumb程序的入口地址加程序的入口地址加1 1存入存入R0R0BXR0 ; ; 跳转到跳转到R0R0指定的地址,指定的地址, ; ;并根据并根据R0R0的最低位来切换处理器状的最低位来切换处理器状态态分支指令分支指令05:5005:50河南理工大学通信工程河南理工大学通信工程2473.2 ARM3

349、.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令5.5.乘法指令乘法指令6.ARM6.ARM分支指令分支指令7.7.协处理器指令协处理器指令988.8.杂项指令杂项指令1089.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程248协处理器指令协处理器指令 ARM内核支持协处理器操作,协处理器的控制要通过协处理器命令实现。ARM内核与协处理器的关系ARM内核协处理器A协处理器B握手信号数据地址总线05:5005:50河南理工大学通信工程河南理工大学通信工程249助记符助记符说明

350、说明操作操作条件码位置条件码位置CDP coproc,opcode1,CRd,CRn,CRm,opcode2协处理器数据操作指令取决于协处理器CDPcondLDCLcoproc, CRd, 协处理器数据读取指令取决于协处理器LDCcondLSTCL coproc, CRd,协处理器数据写入指令取决于协处理器STCcondLMCR coproc,opcode1,Rd,CRn,CRm,opcode2ARM寄存器到协处理器寄存器的数据传送指令取决于协处理器MCRcondMRC coproc,opcode1,Rd,CRn,CRm,opcode2协处理器寄存器到ARM寄存器到的数据传送指令取决于协处理器

351、MCRcond协处理器指令协处理器指令05:5005:50河南理工大学通信工程河南理工大学通信工程250协处理器协处理器数据操作指令数据操作指令 ARMARM处处理理器器通通过过CDPCDP指指令令通通知知ARMARM协协处处理理器器执执行行特特定定的的操操作作。该该操操作作由由协协处处理理器器完完成成,即即对对命命令令的的参参数数的的解解释释与与协协处处理理器器有有关关,指指令令的的使使用用取取决决于于协协处处理理器器。若若协协处处理理器器不不能能成成功功地地执执行行该该操操作作,将将产产生生未未定定义义指指令令异异常中断。指令格式如下:常中断。指令格式如下: 指令执行的条件码协处理器的特定

352、操作码存放第1个源操作数的协处理器寄存器作为目标寄存器的协处理器寄存器指令操作的协处理器名可选的协处理器特定操作码存放第2个源操作数的协处理器寄存器CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2数据操作指令编码05:5005:50河南理工大学通信工程河南理工大学通信工程251 ARM处理器通过CDP指令通知ARM协处理器执行特定的操作。该操作由协处理器完成,即对命令的参数的解释与协处理器有关,指令的使用取决于协处理器。若协处理器不能成功地执行该操作,将产生未定义指令异常中断

353、。指令格式如下: CDPcond coproc,opcode1,CRd,CRn,CRm,opcode2 应用示例: CDP p7,0,c0,c2,c3,0;对协处理器7操作,操作码为0,;可选操作码为0 CDP p6,1,c3,c4,c5;对协处理器6操作,操作码为1 协处理器协处理器数据操作指令数据操作指令05:5005:50河南理工大学通信工程河南理工大学通信工程252协处理器协处理器数据存取指令数据存取指令 协处理器数据存取指令LDC/STC指令可以将某一连续内存单元的数据读取到协处理器的寄存器中,或者将协处理器的寄存器数据写入到某一连续的内存单元中,传送的字数由协处理器来控制。若协处理

354、器不能成功地执行该操作,将产生未定义指令异常中断。LDCcondLcoproc, CRd, 数据存储指令格式STCcondLcoproc, CRd, 数据读取指令格式05:5005:50河南理工大学通信工程河南理工大学通信工程253 协处理器数据存取指令LDC/STC指令可以将某一连续内存单元的数据读取到协处理器的寄存器中,或者将协处理器的寄存器数据写入到某一连续的内存单元中,传送的字数由协处理器来控制。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。数据操作指令编码指令执行的条件码P表示前/后变址U表示加/减W表示回写N表示数据大小L表示该指令是读取(为0)还是写入(为1)8位立即

355、数偏移协处理器编号协处理器中的目标寄存器基址寄存器协处理器协处理器数据存取指令数据存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程254 协协处处理理器器数数据据存存取取指指令令LDC/STCLDC/STC指指令令可可以以将将某某一一连连续续内内存存单单元元的的数数据据读读取取到到协协处处理理器器的的寄寄存存器器中中,或或者者将将协协处处理理器器的的寄寄存存器器数数据据写写入入到到某某一一连连续续的的内内存存单单元元中中,传传送送的的字字数数由由协协处处理理器器来来控控制制。若若协协处处理理器器不不能能成成功功地地执行该操作,将产生未定义指令异常中断。执行该操作,将产生未定

356、义指令异常中断。 应用示例:应用示例:LDCp5,c2,R2,#4; ;读取读取R2+4R2+4指向的内存单元的数据,指向的内存单元的数据, ; ;传传送送到到协协处处理理器器p5p5的的c2c2寄寄存存器器中中 STCp5,c1,R0; ;将协处理器将协处理器p5p5的的C1C1寄存器内数据寄存器内数据 ; ;传送到传送到R0R0指向的内存单元指向的内存单元数据操作指令编码数据操作指令编码协处理器协处理器数据存取指令数据存取指令05:5005:50河南理工大学通信工程河南理工大学通信工程255协处理器协处理器寄存器传送指令寄存器传送指令 如果需要在ARM处理器中的寄存器与协处理器中的寄存器之

357、间进行数据传送,那么可以使用MCR/MRC指令。MCR指令用于将ARM处理器的寄存器中的数据传送到协处理器的寄存器。MRC指令用于将协处理器的寄存器中的数据传送到ARM处理器的寄存器中。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。 MCRcond coproc,opcode1,Rd,CRn,CRm,opcode2 MRC指令格式(协处理器 ARM )MCR指令格式(ARM协处理器)MRCcond coproc,opcode1,Rd,CRn,CRm,opcode2 05:5005:50河南理工大学通信工程河南理工大学通信工程256 如果需要在ARM处理器中的寄存器与协处理器中的寄存

358、器之间进行数据传送,那么可以使用MCR/MRC指令。MCR指令用于将ARM处理器的寄存器中的数据传送到协处理器的寄存器。MRC指令用于将协处理器的寄存器中的数据传送到ARM处理器的寄存器中。若协处理器不能成功地执行该操作,将产生未定义指令异常中断。 寄存器传送指令编码指令执行的条件码表示协处理器特定操作码L表 示 数 据 是 传 入ARM(为0)还是传入协处理器(为1)存放第2个操作数的协处理器寄存器在ARM中的寄存器存放第1个操作数的协处理器寄存器协处理器编号可选的协处理器特定操作码协处理器协处理器寄存器传送指令寄存器传送指令05:5005:50河南理工大学通信工程河南理工大学通信工程257

359、 如如果果需需要要在在ARMARM处处理理器器中中的的寄寄存存器器与与协协处处理理器器中中的的寄寄存存器器之之间间进进行行数数据据传传送送,那那么么可可以以使使用用MCR/MRCMCR/MRC指指令令。MCRMCR指指令令用用于于将将ARMARM处处理理器器的的寄寄存存器器中中的的数数据据传传送送到到协协处处理理器器的的寄寄存存器器。MRCMRC指指令令用用于于将将协协处处理理器器的的寄寄存存器器中中的的数数据据传传送送到到ARMARM处处理理器器的的寄寄存存器器中中。若若协协处处理理器器不不能能成成功功地地执执行行该该操操作作,将将产产生未定义指令异常中断。生未定义指令异常中断。 寄存器传送

360、指令编码 应用示例:应用示例:MCRp6,2,R7,c1,c2 ; ;将将ARMARM中的中的R7R7寄存器内容传递寄存器内容传递; ; 到协处理器到协处理器6 6的的C1C1和和C2C2寄存器寄存器MRCp5,2,R2,c3,c2; ;将协处理器将协处理器5 5的的C3C3和和C2C2寄存器寄存器; ;内容传递到内容传递到ARMARM中的中的R2R2寄存器寄存器协处理器协处理器寄存器传送指令寄存器传送指令05:5005:50河南理工大学通信工程河南理工大学通信工程2583.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.

361、数据处理指令数据处理指令5.5.乘法指令乘法指令6.ARM6.ARM分支指令分支指令7.7.协处理器指令协处理器指令8.8.杂项指令杂项指令1099.9.伪指令伪指令11805:5005:50河南理工大学通信工程河南理工大学通信工程259杂项指令杂项指令 ARM指令集中有三条指令作为杂项指令,实际上这三条指令非常重要。它们如下所示:助记符助记符说明说明操作操作条件码位置条件码位置SWIimmed_24软中断指令产生软中断,处理器进入管理模式SWIcondMRSRd,psr读状态寄存器指令Rdpsr,psr为CPSR或SPSRMRScondMSRpsr_fields,Rd/#immed_8r写状

362、态寄存器指令psr_fieldsRd/#immed_8r,psr为CPSR或SPSRMSRcond05:5005:50河南理工大学通信工程河南理工大学通信工程260软中断指令软中断指令 SWISWI指指令令用用于于产产生生软软中中断断,从从而而实实现现在在从从户户模模式式变变换换到到管管理理模模式式,并并且且将将CPSRCPSR保保存存到到管管理理模模式式的的SPSRSPSR中中,然然后后程程序序跳跳转转到到SWISWI异异常常入入口口。在在其其它模式下也可使用它模式下也可使用SWISWI指令,处理器同样地切换到管理模式。指令,处理器同样地切换到管理模式。 该该指指令令主主要要用用于于用用户户

363、程程序序调调用用操操作作系系统统的的系系统统服服务务,操操作作系系统统在在SWISWI异常处理程序中进行相应的系统服务。异常处理程序中进行相应的系统服务。SWIcondimmed_24SWI指令格式SWI指令编码指令执行的条件码指令传递的参数(24位立即数)05:5005:50河南理工大学通信工程河南理工大学通信工程261 根根据据SWISWI指指令令传传递递的的参参数数SWISWI异异常常处处理理程程序序可可以以作作出出相相应应的的处处理理。SWISWI指令传递参数有以下两种方法,指令传递参数有以下两种方法,指指令令中中的的2424位位立立即即数数指指定定了了用用户户请请求求的的服服务务类类

364、型型,参参数数通通过过通通用用寄寄存存器传递。器传递。 MOVR0,#34; ;设置子功能号为设置子功能号为34 34 SWI12; ;调用调用1212号软中断号软中断 指指令令中中的的2424位位立立即即数数被被忽忽略略,用用户户请请求求的的服服务务类类型型由由寄寄存存器器R0R0的的值值决决定,参数通过其它的通用寄存器传递。定,参数通过其它的通用寄存器传递。 MOVR0,#12; ;调用调用1212号软中断号软中断 MOVR1,#34; ;设置子功能号为设置子功能号为34 34 SWI0 软中断指令软中断指令05:5005:50河南理工大学通信工程河南理工大学通信工程262 在在SWISW

365、I异常中断处理程序中,取出异常中断处理程序中,取出SWISWI指令中立即数的步骤为:指令中立即数的步骤为:首首先先确确定定引引起起软软中中断断的的SWISWI指指令令是是ARMARM指指令令还还是是ThumbThumb指指令令,这这可可通通过过对对SPSRSPSR访问得到;访问得到;然后取得该然后取得该SWISWI指令的地址,这可通过访问指令的地址,这可通过访问LRLR寄存器得到;寄存器得到;接着读出该接着读出该SWISWI指令,分解出立即数。指令,分解出立即数。 SWI_Handler STMFD SP!, R0-R3, R12, LR; 现场保护 MRS R0, SPSR ; 读取SPSR

366、 STMFD SP!, R0 ; 保存SPSR TST R0, #0x20 ; 测试T标志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,读取指令码(16位) BICNE R0, R0, #0xFF00; 取得Thumb指令的8位立即数 LDREQ R0, LR,#-4 ; 若是ARM指令,读取指令码(32位) BICEQ R0, R0, #0xFF000000 ; 取得ARM指令的24位立即数 . LDMFD SP!, R0-R3, R12, PC; SWI异常中断返回 软中断指令软中断指令05:5005:50河南理工大学通信工程河南理工大学通信工程263状态寄存器读指令状态

367、寄存器读指令 在在ARMARM处处理理器器中中,只只有有MRSMRS指指令令可可以以对对状状态态寄寄存存器器CPSRCPSR和和SPSRSPSR进进行行读读操操作作。通通过过读读CPSRCPSR可可以以了了解解当当前前处处理理器器的的工工作作状状态态。读读SPSRSPSR寄寄存存器器可可以以了了解到进入异常前的处理器状态。解到进入异常前的处理器状态。MRScond Rd,psrMRS指令格式指令对应编码指令执行的条件码目标寄存器,不能为R15区别CPSR(为0)和SPSR(为1)寄存器05:5005:50河南理工大学通信工程河南理工大学通信工程264 在ARM处理器中,只有MRS指令可以对状态

368、寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。MRScond Rd,psrMRS指令格式 应用示例: MRS R1,CPSR; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR; 将SPSR状态寄存器读取,保存到R2中状态寄存器读指令状态寄存器读指令05:5005:50河南理工大学通信工程河南理工大学通信工程265状态寄存器写指令状态寄存器写指令 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可

369、以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。MSRcond psr_fields,#immed_8rMSR指令格式1MSRcond psr_fields,RmMSR指令格式2指令执行的条件码CPSR或SPSR指定传送的区域,可以为以下字母(必须小写)的一个或者组合:c 控制域屏蔽字节(psr7.0)x 扩展域屏蔽字节(psr15.8)s 状态域屏蔽字节(psr23.16)f 标志域屏蔽字节(psr31.24)保存要传送到状态寄存器指定域数据的源寄存器要传送到状态寄存器指定域的立即数05:5005:50河南理工大学通信工程河南理工大学通信工程266保存要传送到状态寄存器指定域数据的源寄

370、存器 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。指令执行的条件码CPSR或SPSR指定传送的区域,可以为以下字母(必须小写)的一个或者组合:c 控制域屏蔽字节(psr7.0)x 扩展域屏蔽字节(psr15.8)s 状态域屏蔽字节(psr23.16)f 标志域屏蔽字节(psr31.24)要传送到状态寄存器指定域的立即数MSR指令1编码MSR指令2编码Rotate: 立即数对齐8_bit_immediate:8位立即数状态寄存器写指令状

371、态寄存器写指令05:5005:50河南理工大学通信工程河南理工大学通信工程267(1)(2)(3)(4) 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。 应用示例1:;子程序:使能IRQ中断ENABLE_IRQ MRS R0, CPSR BIC R0, R0,#0x80 MSR CPSR_c,R0 MOV PC,LR 应用示例2:;子程序:禁能IRQ中断DISABLE_IRQ MRS R0 CPSR ORR R0, R0,#0x80 M

372、SR CPSR_c,R0 MOV PC,LR 1.将CPSR寄存器内容读出到R0;2.修改对应于CPSR中的I控制位;3.将修改后的值写回 CPSR寄存器的对应控制域;4.返回上一层函数;状态寄存器写指令状态寄存器写指令05:5005:50河南理工大学通信工程河南理工大学通信工程2683.2 ARM3.2 ARM指令指令1.1.指令格式指令格式2.2.条件码条件码3.3.存储器访问指令存储器访问指令4.4.数据处理指令数据处理指令5.5.乘法指令乘法指令6.ARM6.ARM分支指令分支指令7.7.协处理器指令协处理器指令8.8.杂项指令杂项指令9.9.伪指令伪指令11905:5005:50河南

373、理工大学通信工程河南理工大学通信工程269ARMARM伪指令伪指令 ARM伪指令不属于ARM指令集中的指令,是为了编程方便而定义的。伪指令可以像其它ARM指令一样使用,但在编译时这些指令将被等效的ARM指令代替。ARM伪指令有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。 05:5005:50河南理工大学通信工程河南理工大学通信工程270小范围的地址读取伪指令小范围的地址读取伪指令 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令

374、来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。ADRcond register,exprADR伪指令格式指令执行的条件码加载的目标寄存器地址表达式 地址表达式expr的取指范围:当地址值不是字对齐时,其取指范围为-255255;当地址值是字对齐时,其取指范围为-10201020;当地址值是16字节对齐时,其取指范围将更大。05:5005:50河南理工大学通信工程河南理工大学通信工程271小范围的地址读取伪指令小范围的地址读取伪指令 应用示例(源程序):使 用 伪 指 令 将 程 序 标 号Delay的地址存入R0 . ADR R0,Delay .Delay MOV R

375、0,r14 .05:5005:50河南理工大学通信工程河南理工大学通信工程272 . ADR R0,Delay .Delay MOV R0,r14 .应用示例(源程序):编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0 .0x20 ADD r1,pc,#0x3c . .0x64 MOV r0,r14 .地址程序代码小范围的地址读取伪指令小范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程273应用示例(源程序):编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0 . ADR R0,Delay .Delay MOV R0,r14 . .

376、0x20 ADD r1,pc,#0x3c . .0x64 MOV r0,r14 .ADR伪指令被汇编成一条指令小范围的地址读取伪指令小范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程274 应用示例2(查表): ADR R0,DISP_TAB; 加载转换表地址 LDRB R1,R0,R2; 使用R2作为参数,进行查表 DISP_TAB DCB 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8小范围的地址读取伪指令小范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程275中等范围的地址读取伪指令中等范围

377、的地址读取伪指令 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。ADRL伪指令格式ADRLcond register,expr指令执行的条件码加载的目标寄存器地址表达式 地址表达式expr的取指范围:当地址值不是字对齐时,其取指范围为-64K64K;当地址值是字对齐时,其取指范围为-256K256K;当地址值是16字节对齐时,其取指范围将更大。05:5005:50河南理工大学通信工程河南理工大学通信工程2

378、76 应用示例(源程序):使用伪指令将程序标号Delay的地址存入R0 . ADRL R0,Delay .Delay MOV R0,r14 .中等范围的地址读取伪指令中等范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程277 . ADRL R0,Delay .Delay MOV R0,r14 .应用示例(源程序):编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0 .0x20 ADD r1,pc,#400x24 ADD r1,r1,#0 .0x68 MOV r0,r14 .地址程序代码中等范围的地址读取伪指令中等范围的地址读取伪指令05:5005:

379、50河南理工大学通信工程河南理工大学通信工程278 应用示例(源程序):编译后的反汇编代码: . ADRL R0,Delay .Delay MOV R0,r14 . .0x20 ADD r1,pc,#400x24 ADD r1,r1,#0 .0x68 MOV r0,r14 .使用伪指令将程序标号Delay的地址存入R0ADRL伪指令被汇编成两条指令,尽管第2条指令并没有意义中等范围的地址读取伪指令中等范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程279大范围的地址读取伪指令大范围的地址读取伪指令 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇

380、编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。LDR伪指令格式LDRcond register,=expr指令执行的条件码加载的目标寄存器基于PC的地址表达式或外部表达式05:5005:50河南理工大学通信工程河南理工大学通信工程280 应用示例(源程序):使用伪指令将程序标号InitStack的地址存入R1 . LDR R1,=InitStack .InitStack MOV R0, LR .大范围的地址读取伪指令大范

381、围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程281 应用示例(源程序):编译后的反汇编代码:使用伪指令将程序标号InitStack的地址存入R1 . LDR R1,=InitStack .InitStack MOV R0, LR . .0x60 LDR R1,0xb4 .0x64 MOV R0, LR .0xb4 DCD 0x64地址程序代码大范围的地址读取伪指令大范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程282 应用示例(源程序):编译后的反汇编代码:使 用 伪 指 令 将 程 序 标 号InitStack的地址存入R1

382、 . LDR R1,=InitStack .InitStack MOV R0, LR . .0x60 LDR R1,0xb4 .0x64 MOV R0, LR .0xb4 DCD 0x64LDR伪指令被汇编成一条LDR指令,并在文字池中定义了一个常量,该常量为InitStack标号的地址大范围的地址读取伪指令大范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程283 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪

383、指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。注意:1.从指令位置到文字池的偏移量必须小于4KB;2.与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。大范围的地址读取伪指令大范围的地址读取伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程284空操作伪指令空操作伪指令 NOP伪指令在汇编时将会被代替成ARM中的空操作,比如可能是“MOV R0,R0”指令等。NOP可用于延时操作。NOPNOP伪指令格式应用示例(延时子程序):Delay NOP;空操作 NOP NOP SUBS R1,R1,#1;循环次数减一 BNE Delay;

384、如果循环没有结束,跳转Delay继续 MOV PC,LR;子程序返回05:5005:50河南理工大学通信工程河南理工大学通信工程2855.2.5 ARM汇编程序实例例例1.1.数据块复制数据块复制例例2.2.数据简单运算数据简单运算05:5005:50河南理工大学通信工程河南理工大学通信工程286数据块复制数据块复制 例例1 1:程序将数据从源数据区:程序将数据从源数据区srcsrc复制到目标数据区复制到目标数据区dstdst复复制时,以制时,以8 8个字为单位进行。对于最后所剩不足个字为单位进行。对于最后所剩不足8 8个字的数据,个字的数据,以字为单位进行复制,这时程序跳转到以字为单位进行复

385、制,这时程序跳转到copywordscopywords处执行。处执行。在进行以在进行以8 8个字为单位的数据复制时,保存了所用的个字为单位的数据复制时,保存了所用的8 8个工作个工作寄存器。寄存器。 在在ADSADS编译环境下,程序如下:编译环境下,程序如下:05:5005:50河南理工大学通信工程河南理工大学通信工程287数据块复制汇编程序实例数据块复制汇编程序实例AREAAREAB1ockB1ock,CODECODE,READONLY READONLY ;设置本段程序的名称及属性;设置本段程序的名称及属性NUMNUMEQU 20 EQU 20 ;设置将要复制的字数;设置将要复制的字数 EN

386、TRY ENTRY ;标识程序人口点;标识程序人口点 LDR R0LDR R0,src src ;R0R0寄存器指向源数据区寄存器指向源数据区srcsrc LDR R1LDR R1,dst dst ;RlRl寄存器指向目标数据区寄存器指向目标数据区dstdst MOVMOV R2 R2,# NUM # NUM ;R2R2指定将要复制的宇数指定将要复制的宇数 MOVMOV SP SP,#&400 #&400 ;设置数据栈指针,用于保存工作寄存器数值;设置数据栈指针,用于保存工作寄存器数值BcopyBcopy MOVS R3MOVS R3,R2R2,LSR #3 LSR #3 ;需要进行的以;需要

387、进行的以8 8个字为单位的复制次数个字为单位的复制次数 BEQ Cwotd BEQ Cwotd ;不足;不足8 8个字的数据,跳转到个字的数据,跳转到CwordCword以字为单位复制以字为单位复制 STMFD SP!STMFD SP!,R4-R11 R4-R11 ;保存工作寄存器;保存工作寄存器Ocopy LDMIA R0!Ocopy LDMIA R0!,R4-R11 R4-R11 ;从源数据区读取;从源数据区读取8 8个字的数据,放到个字的数据,放到8 8个寄个寄 ;存器中,并更新目标数据区指针;存器中,并更新目标数据区指针R0R0 STMIA R1STMIA R1!,!,R4-R11 R

388、4-R11 ;将这;将这8 8个字数据写入到目标数据区中并更新个字数据写入到目标数据区中并更新 ;目标数据区指针;目标数据区指针R1R1 SUBS R3SUBS R3,R3R3,#l #l ;将块复制次数减;将块复制次数减l l BNEBNE Ocopy Ocopy ;循环,直到完成以;循环,直到完成以8 8个字为单位的块复制个字为单位的块复制 LTMFD SP!LTMFD SP!,R4-R11 R4-R11 ;恢复工作寄存器值;恢复工作寄存器值05:5005:50河南理工大学通信工程河南理工大学通信工程288数据块复制汇编程序实例数据块复制汇编程序实例CwordCword ANDS R2AN

389、DS R2,R2R2,#7 #7 ;剩下不足;剩下不足8 8个字的数据的字数个字的数据的字数 BEQBEQ stop stop ;数据复制完成;数据复制完成WcopyWcopy LDRLDR R3 R3,R0R0,#4 #4 ;读取剩下的数据放到;读取剩下的数据放到R3 R3 ,并更新目标数据区指针,并更新目标数据区指针R0R0STRSTR R3 R3,R1R1,#4 #4 ;将这;将这R3R3中数据写入到目标数据区中中数据写入到目标数据区中 ;并更新目标数据区指针;并更新目标数据区指针R1R1 SUBS R2SUBS R2,R2R2,#l #l ;将字数减;将字数减l l BNEBNE Wc

390、opy Wcopy ;循环,直到完成以字为单位的数据复制;循环,直到完成以字为单位的数据复制Stop Stop ;程序结束处理;程序结束处理 MOVMOV R0 R0,#0x18 #0x18 ;本条与下条指令的作用是参数传递;本条与下条指令的作用是参数传递 LDRLDR R1 R1,&20026&20026 SWlSWl 0x123456 0x123456 ;将;将CPUCPU的控制权交给调试器的控制权交给调试器AREAAREABdataBdata,DATADATA,READWRITE READWRITE ;定义数据区;定义数据区BdataBdatasrc DCD 1src DCD 1,2 2

391、,3 3,4 4,5 5,6 6,7 7,8 8,1 1,2 2,3 3,4 4,5 5,6 6,? ?,8 8,1 1,2 2,3 3,4 4dst DCD 0dst DCD 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0 ;这里的;这里的DCDDCD定义源数据区定义源数据区srcsrc及目标数据区及目标数据区dstdstEND END ;结束汇编;结束汇编05:5005:50河南理工大学通信工程河南理工大学通信工程289数据简单运算数据简单运算例例2 2:编写程序循环对:编写程序循环

392、对R4-R11R4-R11进行累加进行累加8 8次起始值,次起始值,R4-R4-R11R11起始值分别为起始值分别为1 18 8,每次累加操作后把,每次累加操作后把R4-R11R4-R11的内容的内容放入放入SPSP堆栈中,堆栈中,SPSP初始设置为初始设置为0x400000000x40000000。最后把。最后把R4-R4-R11R11用用LDMFDLDMFD指令清空赋值为指令清空赋值为0 0。05:5005:50河南理工大学通信工程河南理工大学通信工程290数据简单运算汇编程序实例数据简单运算汇编程序实例start:ldrr0,=srcldrr1,=resetmovsp,#0x400000

393、00ldmiar0!,r4-r11movr2,#7DoAdd:addr4,r4,#1addr5,r5,#2addr6,r6,#3addr7,r7,#4addr8,r8,#5addr9,r9,#6addr10,r10,#7addr11,r11,#8stmiasp!,r4-r11subr2,r2,#1cmpr2,#0bneDoAddldmfdr1!,r4-r11stop:bstopdatasrc:.long1,2,3,4,5,6,7,8reset:.long0,0,0,0,0,0,0,0end05:5005:50河南理工大学通信工程河南理工大学通信工程291ThumbThumb指令集指令集05:5

394、005:50河南理工大学通信工程河南理工大学通信工程292ThumbThumb指令指令 ThumbThumb指指令令集集可可以以看看作作是是ARMARM指指令令压压缩缩形形式式的的子子集集,它它是是为为减减小小代代码码量量而而提提出出的的,具具有有1616位位的的代代码码密密度度。ThumbThumb指指令令体体系系不不完完整整,只只支支持持通通用用功功能能。必必要要时时仍仍需需要要使用使用ARMARM指令,如进入异常时。指令,如进入异常时。05:5005:50河南理工大学通信工程河南理工大学通信工程293简单的简单的ThumbThumb程序程序;功能:使用功能:使用BX指令切换处理器状态指令

395、切换处理器状态AREAExample8,CODE,READONLYENTRYCODE32ARM_CODEADRR0,THUMB_CODE+1BXR0;跳转并切换处理器状态跳转并切换处理器状态CODE16THUMB_CODEMOVR0,#10;R0=10MOVR1,#20;R1=20ADDR0,R1;R0=R0+R1B.END在Thumb程序段之前要用CODE16声明。05:5005:50河南理工大学通信工程河南理工大学通信工程294ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别52.2.存储器访问指令存储器访问指令73.3.数据

396、处理指令数据处理指令254.4.分支指令分支指令575.5.杂项指令杂项指令626.6.伪指令伪指令6405:5005:50河南理工大学通信工程河南理工大学通信工程295ThumbThumb指令集与指令集与ARMARM指令集的区别指令集的区别 ThumbThumb指令集较指令集较ARMARM指令集有如下限制:指令集有如下限制:只有只有B B指令可以条件执行,其它指令都不能条件执行;指令可以条件执行,其它指令都不能条件执行;分支指令的跳转范围有更多限制;分支指令的跳转范围有更多限制;数据处理指令的操作结果必须放入其中一个;数据处理指令的操作结果必须放入其中一个;单寄存器访问指令,只能操作单寄存器

397、访问指令,只能操作R0R0R7R7;LDMLDM和和STMSTM指令可以对指令可以对R0R0R7R7的任何子集进行操作;的任何子集进行操作;05:5005:50河南理工大学通信工程河南理工大学通信工程296ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程297ThumbThumb存储器访问指令存储器访问指令助记符助记符说明说明操作操作影响

398、标志影响标志LDR/STRRd,addressing加载加载/ /存储字数据存储字数据RdRn,#immed_5RdRn,#immed_544,RdRd、RnRn为为R0R0R7R7无无LDRH/STRHRd,addressing加载加载/ /存储无符号半字数据存储无符号半字数据RdRn,#immed_5RdRn,#immed_522,RdRd、RnRn为为R0R0R7R7无无LDRB/STRBRd,addressing加载加载/ /存储无符号字节数据存储无符号字节数据RdRn,#immed_5RdRn,#immed_511,RdRd、RnRn为为R0R0R7R7无无LDRSHRd,addre

399、ssing 加载有符号半字数据加载有符号半字数据RdRn,RmRdRn,Rm , RdRd、 RnRn、RmRm为为R0R0R7R7无无LDRSBRd,addressing加载有符号字节数据加载有符号字节数据RdRn,RmRdRn,Rm , RdRd、 RnRn、RmRm为为R0R0R7R7无无单寄存器访问指令单寄存器访问指令05:5005:50河南理工大学通信工程河南理工大学通信工程298LDRLDR和和STRSTR加载加载/ /存储指令存储指令 根根据据指指令令的的寻寻址址方方式式不不同同,可可以以分分为为以以下下三三类:类:立即数偏移寻址;立即数偏移寻址;寄存器偏移寻址;寄存器偏移寻址;

400、PCPC或或SPSP相对偏移寻址;相对偏移寻址;ThumbThumb存储器访问指令存储器访问指令05:5005:50河南理工大学通信工程河南理工大学通信工程299单寄存器访问指令单寄存器访问指令立即数偏移寻址立即数偏移寻址 以以这这种种寻寻址址方方式式对对存存储储器器访访问问时时,存存储储器器的的地地址址以以一一个个寄寄存存器器的的内内容容为为基基址址,再再偏偏移移一一个个立立即即数数后后指指明明。指指令令格式如下:格式如下:LDRLDRRd,Rn,#immed_5Rd,Rn,#immed_54 4 ; ;加载内存中的加载内存中的字字数据到寄存器数据到寄存器RdRd中中STRSTRRd,Rn,

401、#immed_5Rd,Rn,#immed_544 ; ;将将RdRd中的中的字字数据存储到指定地址的内存中数据存储到指定地址的内存中LDRH LDRH Rd,Rn,#immed_5Rd,Rn,#immed_522 ; ;加载内存中的加载内存中的半字半字数据到寄存器数据到寄存器RdRd的低的低1616位中位中STRHSTRHRd,Rn,#immed_5Rd,Rn,#immed_522 ; ;存储存储RdRd中的低中的低1616位位半字半字数据到指定的内存单元数据到指定的内存单元LDRBLDRBRd,Rn,#immed_5Rd,Rn,#immed_511 ; ;加载内存中的加载内存中的字节字节数据

402、到寄存器数据到寄存器RdRd中中STRBSTRBRd,Rn,#immed_5Rd,Rn,#immed_511 ; ;存储存储RdRd中的低中的低8 8位位字节字节数据到指定的内存单元数据到指定的内存单元 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。 RnRn 表示基址寄存器。必须为表示基址寄存器。必须为R0R0R7R7。 immed_5immed_5N N 表示立即数偏移量,其取值范围为表示立即数偏移量,其取值范围为(0(031)31)N N。05:5005:50河南理工大学通信工程河南理工大学通信工程300单寄存器访问指令单寄存器访问指

403、令立即数偏移指令编码立即数偏移指令编码指令执行的操作码:0110b:LDR/STR指令;1000b:LDRH/STRH指令;0111b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Immed_5:5位无符号立即数偏移Rn:基址寄存器Rd:源或目标寄存器05:5005:50河南理工大学通信工程河南理工大学通信工程301单寄存器访问指令单寄存器访问指令立即数偏移寻址立即数偏移寻址注注意意:进进行行字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为3232位位对对齐齐。进行半字数据访问时,必须保证传送地址为进行半字数据访问时,必须保证传送地址为1616位对齐。位对齐。

404、 应用示例:应用示例:LDRR0,R1,#0x4STRR3,R4LDRHR5,R0,#0x02STRHR1,R0,#0x08LDRBR3,R6,#20STRBR1,R0,#3105:5005:50河南理工大学通信工程河南理工大学通信工程302单寄存器访问指令单寄存器访问指令寄存器偏移寻址寄存器偏移寻址 这这种种寻寻址址方方式式是是以以一一个个寄寄存存器器的的内内容容为为基基址址, ,以以另另一一个个寄寄存存器器的的内内容容为为偏偏移移量量, ,两两者者相相加加作作为为存存储储器器的的地地址址。指指令令格格式式如如下:下:LDRLDRRd,Rn,RmRd,Rn,Rm; ;加载一个加载一个字字数据

405、数据STRSTRRd,Rn,RmRd,Rn,Rm; ;存储一个存储一个字字数据数据LDRHLDRHRd,Rn,RmRd,Rn,Rm; ;加载一个加载一个无符号半字无符号半字数据数据STRHSTRHRd,Rn,RmRd,Rn,Rm; ;存储一个存储一个无符号半字无符号半字数据数据LDRBLDRBRd,Rn,RmRd,Rn,Rm; ;加载一个加载一个无符号字节无符号字节数据数据STRBSTRBRd,Rn,RmRd,Rn,Rm; ;存储一个存储一个无符号字节无符号字节数据数据LDRSHLDRSHRd,Rn,RmRd,Rn,Rm; ;加载一个加载一个有符号半字有符号半字数据数据LDRSBLDRSBRd

406、,Rn,RmRd,Rn,Rm; ;存储一个存储一个有符号半字有符号半字数据数据 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。 RnRn 表示基址寄存器。必须为表示基址寄存器。必须为R0R0R7R7。 Rm Rm 表示内含数偏移量的寄存器,必须为表示内含数偏移量的寄存器,必须为R0R0R7 R7 。05:5005:50河南理工大学通信工程河南理工大学通信工程303单寄存器访问指令单寄存器访问指令寄存器偏移指令编码寄存器偏移指令编码指令执行的操作码:00b:LDR/STR指令;01b:LDRH/STRH指令;10b:LDRB/STRB指令;L

407、用于区别加载(L为1)或存储(L为0)Rm:偏移量寄存器Rn:基址寄存器Rd:源或目标寄存器说明:当opcode位为11b时 , L位 为 0代 表 指 令“LDRSB“,L位为1代表指令“LDRSH”05:5005:50河南理工大学通信工程河南理工大学通信工程304单寄存器访问指令单寄存器访问指令寄存器偏移寻址寄存器偏移寻址注注意意:进进行行字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为3232位位对对齐齐。进行半字数据访问时,必须保证传送地址为进行半字数据访问时,必须保证传送地址为1616位对齐。位对齐。 应用示例:应用示例:LDRR3,R1,R0STRR1,R0,R2LD

408、RHR6,R0,R1STRHR0,R4,R5LDRBR2,R5,R1STRBR1,R3,R2LDRSHR7,R6,R3LDRSBR5,R7,R205:5005:50河南理工大学通信工程河南理工大学通信工程305单寄存器访问指令单寄存器访问指令相对偏移寻址相对偏移寻址 这这种种寻寻址址方方式式是是以以PCPC或或SPSP寄寄存存器器的的内内容容为为基基址址,以以一一个个立立即即数数为为偏偏移移量量,两两者者相相加加作作为为存存储储器器的的地地址址。指指令令格格式式如如下:下:LDRLDRRd,PC,#immed_8Rd,PC,#immed_844LDRLDRRd,labelRd,labelLDR

409、LDRRd,SP,#immed_8Rd,SP,#immed_844STRSTRRd,SP,#immed_8Rd,SP,#immed_844 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。 immed_8immed_84 4 表示偏移量,取值范围是表示偏移量,取值范围是(0(0255)255)4 4 。 label label 表示程序相对偏移表达式表示程序相对偏移表达式,Label,Label必须在当前指令之后的必须在当前指令之后的1KB1KB范围内。范围内。05:5005:50河南理工大学通信工程河南理工大学通信工程306单寄存器访问指令

410、单寄存器访问指令相对偏移指令编码相对偏移指令编码L:用于区别加载(L为1)或存储(L为0)Rd:目标或源寄存器immed8:偏移量PC相对偏移相对偏移LDR指令编码指令编码SP相对偏移相对偏移LDR/STR指令编码指令编码05:5005:50河南理工大学通信工程河南理工大学通信工程307注注意意:以以PCPC作作为为基基地地址址的的相相对对偏偏移移寻寻址址指指令令只只有有LDRLDR,而而没没有有STRSTR指令。指令。 应用示例:应用示例:LDRR0,PC,#0x08; ;读取读取PC+0x08PC+0x08地址上的字数据,地址上的字数据,; ;保存到保存到R0R0中中LDRR7,LOCAL

411、DAT; ;读取读取LOCALDATLOCALDAT地址上的地址上的; ;字数据,保存到字数据,保存到R7R7中中LDRR3,SP,#1020; ; 读取读取SP+1020SP+1020地址上的字数据,地址上的字数据,; ;保存到保存到R3R3中中STRR2,SP; ; 存储存储R2R2寄存器的数据到寄存器的数据到SPSP; ;指向的存储单元指向的存储单元 ( (偏移量为偏移量为0) 0) 单寄存器访问指令单寄存器访问指令相对偏移寻址相对偏移寻址05:5005:50河南理工大学通信工程河南理工大学通信工程308PUSHPUSH和和POPPOP寄存器入栈及出栈指令寄存器入栈及出栈指令 实实现现低

412、低寄寄存存器器和和可可选选的的LRLR寄寄存存器器入入栈栈及及低低寄寄存存器器和和可可选选的的PCPC寄寄存存器器出出栈栈操操作作。堆堆栈栈地地址址由由SPSP寄寄存存器器设设置,置,堆栈是满递减堆栈堆栈是满递减堆栈。 05:5005:50河南理工大学通信工程河南理工大学通信工程309寄存器入栈及出栈指令寄存器入栈及出栈指令PUSHPUSHreglist,LRreglist,LRPOPPOPreglist,PCreglist,PC其中:其中:reglistreglist 入栈入栈/ /出栈低寄存器列表,即出栈低寄存器列表,即R0R0R7R7。LRLR入栈时的可选寄存器。入栈时的可选寄存器。PC

413、PC出栈时的可选寄存器。出栈时的可选寄存器。指令编码指令格式L用于区别出栈(L为1)或入栈(L为0)R用于区别操作寄存器中是否有LR/PC寄存器(有则R为1,否则为0)05:5005:50河南理工大学通信工程河南理工大学通信工程310PUSHPUSHreglist,LRreglist,LRPOPPOPreglist,PCreglist,PC其中:其中:reglistreglist 入栈入栈/ /出栈低寄存器列表,即出栈低寄存器列表,即R0R0R7R7。LRLR入栈时的可选寄存器。入栈时的可选寄存器。PCPC出栈时的可选寄存器。出栈时的可选寄存器。指令格式指令格式 应用示例:应用示例:PUSHR

414、0-R7,LR; ;将低寄存器将低寄存器R0R0R7R7全部入栈,全部入栈,;LR;LR也入栈也入栈POPR0-R7,PC; ;将堆栈中的数据弹出到将堆栈中的数据弹出到; ;低寄存器低寄存器R0R0R7R7及及PCPC中中寄存器入栈及出栈指令寄存器入栈及出栈指令05:5005:50河南理工大学通信工程河南理工大学通信工程311LDMIALDMIA和和STMIASTMIA多寄存器加载多寄存器加载/ /存储指令存储指令 可可以以实实现现在在一一组组寄寄存存器器和和一一块块连连续续的的内内存存单单元元之之间间传传输输数数据据。LDMIALDMIA为为加加载载多多个个寄寄存存器器;STMIASTMIA

415、为为存存储储多多个个寄寄存存器器。使用它们允许一条指令传送使用它们允许一条指令传送8 8个低寄存器个低寄存器R0R0R7R7的任何子集。的任何子集。 05:5005:50河南理工大学通信工程河南理工大学通信工程312多寄存器加载多寄存器加载/ /存储指令存储指令LDMIALDMIARn!,reglistRn!,reglistSTMIASTMIARn!,reglistRn!,reglist 其中:其中:Rn Rn 加载加载/ /存储的起始地址寄存器。存储的起始地址寄存器。RnRn必须为必须为R0R0R7R7。reglistreglist 加载加载/ /存储的寄存器列表。寄存器必须为存储的寄存器列

416、表。寄存器必须为R0R0R7R7。指令编码指令格式指令格式L用于区别加载(L为1)还是存储(L为0)05:5005:50河南理工大学通信工程河南理工大学通信工程313 应用示例:应用示例:LDMIAR0!,R2-R7 ; ;加载加载R0R0指向的地址上的多字数据,指向的地址上的多字数据,; ;保存到保存到R2R2R7R7中,中, R0R0的值更新。的值更新。STMIAR1!,R2-R7; ;将将R2R2R7R7的数据存储到的数据存储到R1R1指向的指向的; ;地址上,地址上,R1R1值更新值更新 LDMIA/STMIA LDMIA/STMIA 的的主主要要用用于于数数据据复复制制、参参数数传传

417、送送等等。进进行行数数据据传传送送时,每次传送后地址加时,每次传送后地址加4 4。 若若RnRn在寄存器列表中:在寄存器列表中:对于对于LDMIALDMIA指令,指令,RnRn的最终值是加载的值,而不是增加后的地址;的最终值是加载的值,而不是增加后的地址;对对于于STMIASTMIA指指令令,若若RnRn是是寄寄存存器器列列表表中中的的最最低低数数字字的的寄寄存存器器,则则RnRn存存储的值为储的值为RnRn初值,其它情况不可预知。初值,其它情况不可预知。 多寄存器加载多寄存器加载/ /存储指令存储指令05:5005:50河南理工大学通信工程河南理工大学通信工程314ThumbThumb指令集

418、指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程315ThumbThumb数据处理指令数据处理指令 ThumbThumb数数据据处处理理指指令令涵涵盖盖了了编编译译器器需需要要的的大大多多数数操操作作。大大部部分分的的ThumbThumb数数据据处处理理指指令令采采用用2 2地地址址格格式式,不不能能在在单单指指令令中中同同时时完完成成一一个个操操作作数数的的移移

419、位位及及一一个个ALUALU操操作作。所所以以数数据据处处理理操操作作比比ARMARM状状态态的的更更少少,并并且且访访问问寄寄存存器器R8R8R15R15受到限制。数据处理指令分为两类:受到限制。数据处理指令分为两类:数据传送指令数据传送指令算术逻辑运算指令算术逻辑运算指令05:5005:50河南理工大学通信工程河南理工大学通信工程316助记符助记符操作操作影响标志影响标志MOV MOV Rd,#exprRd,#exprRdexprRdexpr,RdRd为为R0R0R7R7影响影响N N、Z ZMOV Rd,RmMOV Rd,RmRdRmRdRm,RdRd、RmRm均可为均可为R0R0R15

420、R15RdRd和和RmRm均为均为R0R0R7R7时,时,影响影响N N、Z Z,清零,清零C C、V V MVN Rd,RmMVN Rd,RmRd(Rm) Rd(Rm) ,RdRd、RmRm均为均为R0R0R7R7影响影响N N、Z ZNEG Rd,RmNEG Rd,RmRd(-Rm) Rd(-Rm) ,RdRd、RmRm均为均为R0R0R7R7影响影响N N、Z Z、C C、V V数据传送指令数据传送指令05:5005:50河南理工大学通信工程河南理工大学通信工程317 MOVMOV指令将指令将8 8位立即数或寄存器传送到目标寄存器中位立即数或寄存器传送到目标寄存器中. .其其指令格式如下

421、指令格式如下:数据传送指令数据传送指令MOVMOVMOVMOVRd,#exprRd,#exprMOVMOVRd,RmRd,Rm其中:其中:RdRd 目标寄存器。目标寄存器。MOV Rd,#exprMOV Rd,#expr时,时,RdRd必须在必须在R0R0R7R7之间。之间。 exper exper 8 8位立即数,即位立即数,即0 0255255。 RmRm 源寄存器。为源寄存器。为R0R0R15R15。指令编码(立即数传送)指令编码(寄存器传送)05:5005:50河南理工大学通信工程河南理工大学通信工程318注意:注意: “MOVRd,#expr”指令会更新指令会更新N N和和Z Z标志

422、,对标志标志,对标志C C和和V V无影响。无影响。 “MOVRd,Rm”指指令令,若若RdRd或或RmRm是是高高寄寄存存器器(R8R8R15R15),则则标标志志不不受受影影响响,若若RdRd或或RmRm都是低寄存器(都是低寄存器(R0R0R7R7),则更新标志),则更新标志N N和和Z Z,且清除标志,且清除标志C C和和V V。 应用示例:应用示例:MOVR1,#0x10; R1=0x10; R1=0x10MOVR0,R8; R0=R8; R0=R8MOVPC,LR; PC=LR; PC=LR,子程序返回,子程序返回数据传送指令数据传送指令MOVMOV05:5005:50河南理工大学通

423、信工程河南理工大学通信工程319数据传送指令数据传送指令MVNMVN MVN指令将寄存器Rm按位取反后传送到目标寄存器Rd中。指令的执行会更新N和Z标志,对标志C和V无影响。其指令格式如下:MVNMVNRd,RmRd,Rm其中:其中:RdRd 目标寄存器。目标寄存器。MOV MOV Rd,#exprRd,#expr时,时,RdRd必须在必须在R0R0R7R7之间。之间。 RmRm 源寄存器。为源寄存器。为R0R0R15R15。指令编码05:5005:50河南理工大学通信工程河南理工大学通信工程320 应用示例:应用示例:MVNR1,R2; ; 将将R2R2取反,结果存于取反,结果存于R1R1M

424、VNMVNRd,RmRd,Rm其中:其中:RdRd 目标寄存器。目标寄存器。MOV Rd,#exprMOV Rd,#expr时,时,RdRd必须在必须在R0R0R7R7之间。之间。 RmRm 源寄存器。为源寄存器。为R0R0R15R15。 MVNMVN指指令令将将寄寄存存器器RmRm按按位位取取反反后后传传送送到到目目标标寄寄存存器器RdRd中中。指指令令的执行会更新的执行会更新N N和和Z Z标志,对标志标志,对标志C C和和V V无影响。其无影响。其指令格式如下:指令格式如下:数据传送指令数据传送指令MVNMVN05:5005:50河南理工大学通信工程河南理工大学通信工程321数据传送指令

425、数据传送指令NEGNEGNEGNEGRd,RmRd,Rm其中:其中:RdRd 目标寄存器,必须在目标寄存器,必须在R0R0R7R7之间。之间。 RmRm 源寄存器。为源寄存器。为R0R0R15R15。指令编码指令编码 NEG指令将寄存器Rm乘以-1后传送到目标寄存器Rd中。指令会更新N、Z、C和V标志。其指令格式如下:05:5005:50河南理工大学通信工程河南理工大学通信工程322NEGNEGRd,RmRd,Rm其中:其中:RdRd目标寄存器,必须在目标寄存器,必须在R0R0R7R7之间。之间。 RmRm源寄存器。为源寄存器。为R0R0R15R15。 NEGNEG指指令令将将寄寄存存器器Rm

426、Rm乘乘以以-1-1后后传传送送到到目目标标寄寄存存器器RdRd中。指令会更新中。指令会更新N N、Z Z、C C和和V V标志。其指令格式如下:标志。其指令格式如下: 应用示例:应用示例:NEGR1,R0; R1=-R0; R1=-R0数据传送指令数据传送指令NEGNEG05:5005:50河南理工大学通信工程河南理工大学通信工程323算术逻辑运算指令算术逻辑运算指令 算术逻辑指令包括以下几类:算术指令逻辑运算指令移位指令比较指令05:5005:50河南理工大学通信工程河南理工大学通信工程324ADDADD指令将两个数据相加,结果保存到指令将两个数据相加,结果保存到RdRd寄存器中。寄存器中

427、。算术运算指令算术运算指令ADDADDADD Rd,Rn,RmADD Rd,Rn,RmADD Rd,Rn,#expr3ADD Rd,Rn,#expr3ADD Rd,#expr8ADD Rd,#expr8其中:其中:RdRd 目标寄存器,必须在目标寄存器,必须在R0R0R7R7之间。之间。 RnRn 第第1 1个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。 RmRm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。 expr3 expr3 3 3位立即数,即位立即数,即0 07 7。 expr8expr8 8 8位立即数,即位立即数,即

428、0 0255255。低寄存器的低寄存器的ADDADD指令指令格式:格式: 应用示例:应用示例:ADDR1,R1,R0; R1=R0+R1; R1=R0+R1ADDR1,R1,#7; R1=R1+7; R1=R1+7ADDR1,#200; R1=R1+200; R1=R1+20005:5005:50河南理工大学通信工程河南理工大学通信工程325ADD指令将两个数据相加,结果保存到Rd寄存器中。ADD Rd,RmADD Rd,Rm其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器。目标寄存器,也是第一个操作数寄存器。 Rm Rm 第第2 2个操作数寄存器。个操作数寄存器。高或低寄存器的高或

429、低寄存器的ADDADD指令指令格式:格式: 应用示例:应用示例:ADDR1,R0; R1=R1+R0; R1=R1+R0算术运算指令算术运算指令ADDADD05:5005:50河南理工大学通信工程河南理工大学通信工程326ADD指令将两个数据相加,结果保存到Rd寄存器中。ADD SP,#exprADD SP,#expr其中:其中:SPSP 目标寄存器,也是第一个操作数寄存器。目标寄存器,也是第一个操作数寄存器。 expr expr 立即数,在立即数,在-508-508+508+508之间的之间的4 4的整数倍的数。的整数倍的数。SPSP操作的操作的ADDADD指令指令格式:格式: 应用示例:应

430、用示例:ADDSP,#-500;SP=SP-500;SP=SP-500算术运算指令算术运算指令ADDADD05:5005:50河南理工大学通信工程河南理工大学通信工程327SUB指令将两个数据相减,结果保存到Rd寄存器中。算术运算指令算术运算指令SUBSUBSUB Rd,Rn,RmSUB Rd,Rn,RmSUB Rd,Rn,#expr3SUB Rd,Rn,#expr3SUB Rd,#expr8SUB Rd,#expr8其中:其中:RdRd 目标寄存器,必须在目标寄存器,必须在R0R0R7R7之间。之间。 RnRn 第第1 1个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间

431、。 RmRm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。 expr3 expr3 3 3位立即数,即位立即数,即0 07 7。 expr8expr8 8 8位立即数,即位立即数,即0 0255255。低寄存器的低寄存器的SUBSUB指令指令格式:格式: 应用示例:应用示例:SUBR1,R1,R0; R1=R1-R0; R1=R1-R0SUBR1,R1,#7; R1=R1-7; R1=R1-7SUBR1,#200; R1=R1-200; R1=R1-20005:5005:50河南理工大学通信工程河南理工大学通信工程328SUB指令将两个数据相减,结果保存到

432、Rd寄存器中。SUB SP,#exprSUB SP,#expr其中:其中:SP SP 目标寄存器,也是第一个操作数寄存器。目标寄存器,也是第一个操作数寄存器。 expr expr 立即数,在立即数,在-508-508+508+508之间的之间的4 4的整数倍的数。的整数倍的数。SPSP操作的操作的SUBSUB指令指令格式:格式: 应用示例:应用示例:SUBSP,#380;SP=SP-380;SP=SP-380算术运算指令算术运算指令SUBSUB05:5005:50河南理工大学通信工程河南理工大学通信工程329 ADC指令将Rm的值相加,再加上CPSR中的C条件标志位,结果保存到Rd寄存器。算术

433、运算指令算术运算指令ADCADCADC Rd, RmADC Rd, Rm其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 Rm Rm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。ADC指令格式: 应用示例应用示例(64(64位加法位加法) ):ADDR0,R2ADCR1,R3;(R1;(R1、R0)=(R1R0)=(R1、R0)+(R3R0)+(R3、R2)R2)05:5005:50河南理工大学通信工程河南理工大学通信工程330 SBC指令用寄存器Rd减去Rm,再减去C

434、PSR中的C条件标志位的非,结果保存到Rd寄存器。算术运算指令算术运算指令SBCSBCSBC Rd, RmSBC Rd, Rm其中:其中:RdRd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 RmRm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。SBC指令格式: 应用示例应用示例(64(64位减法位减法) ):SUBR0,R2SBCR1,R3;(R1;(R1、R0)=(R1R0)=(R1、R0)-(R3R0)-(R3、R2)R2)05:5005:50河南理工大学通信工程河南理工大学通信工

435、程331 MUL乘法指令用寄存器Rd乘以Rm,结果保存到Rd寄存器。算术运算指令算术运算指令MULMULMUL Rd, RmMUL Rd, Rm其中:其中:RdRd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 RmRm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。MULMUL指令指令格式:格式: 应用示例:应用示例:MULR0,R1;R0=R0;R0=R0R1R105:5005:50河南理工大学通信工程河南理工大学通信工程332 AND指令将寄存器Rd的值与寄存器Rm的值按位作逻辑“与”

436、操作,结果保存到Rd寄存器中。逻辑运算指令逻辑运算指令ANDANDADD Rd, RmADD Rd, Rm其中:其中:RdRd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 RmRm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。AND指令格式: 应用示例:应用示例:MOVR1,#0x0FANDR0,R1; R0=R0 & R1; R0=R0 & R1,清零,清零R0R0高高2828位位05:5005:50河南理工大学通信工程河南理工大学通信工程333 ORR指令将寄存器Rd的值与寄存器Rn

437、的值按位作逻辑“或”操作,结果保存到Rd寄存器中。逻辑运算指令逻辑运算指令ORRORRORR Rd, RmORR Rd, Rm其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 Rm Rm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。ORRORR指令指令格式:格式: 应用示例:应用示例: MOV R1,#0x0FMOV R1,#0x0F ORR R0,R1 ORR R0,R1; R0=R0 | R1; R0=R0 | R1,置位,置位R0R0低低4 4位位05:5005:

438、50河南理工大学通信工程河南理工大学通信工程334 EOR指令将寄存器Rd的值与寄存器Rn的值按位作逻辑“异或”操作,结果保存到Rd寄存器中。逻辑运算指令逻辑运算指令EOREOREOR Rd, RmEOR Rd, Rm其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 Rm Rm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。EOREOR指令指令格式:格式: 应用示例:应用示例: MOV R1,#0x0FMOV R1,#0x0F EOR R0,R1 EOR R0,R1; R

439、0=R0 R1; R0=R0 R1,取反,取反R0R0低低4 4位位05:5005:50河南理工大学通信工程河南理工大学通信工程335 BIC指令将寄存器Rd的值与寄存器Rm的值的反码作逻辑“与”操作,结果保存到Rd寄存器中。逻辑运算指令逻辑运算指令BICBICBIC Rd, RmBIC Rd, Rm其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 Rm Rm 第第2 2个操作数寄存器,必须在个操作数寄存器,必须在R0R0R7R7之间。之间。BICBIC指令指令格式:格式: 应用示例:应用示例: MOV R

440、1,#0x02MOV R1,#0x02 BIC R0,R1 BIC R0,R1; ; 清零清零R0R0的第的第2 2位,其它位不变位,其它位不变05:5005:50河南理工大学通信工程河南理工大学通信工程336 ASR指令将数据算术右移,将符号位拷贝到左侧空出的位,移位结果保存到Rd寄存器中。移位指令移位指令ASRASRASR Rd, RsASR Rd, RsASR Rd,Rm,#exprASR Rd,Rm,#expr其中:其中:Rd Rd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 RsRs 寄寄存存器器控控制制移移位位中

441、中包包含含移移位位位位数数的的寄寄存存器器,必必须须在在R0R0R7R7之间之间 RmRm 立即数移位的源寄存器,必须在立即数移位的源寄存器,必须在R0R0R7R7之间之间 exprexpr 立即数移位位数,值为立即数移位位数,值为1 13232ASR指令格式:ASR移位操作: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。05:5005:50河南理工大学通信工程河南理工大学通信工程337 ASR指令将数据算术右移,将符号位拷贝到左侧空出的位,移位结果保存到Rd寄存器中。ASR Rd, RsASR Rd,

442、RsASR Rd,Rm,#exprASR Rd,Rm,#expr其中:其中:RdRd 目标寄存器,也是第一个操作数寄存器,必须在目标寄存器,也是第一个操作数寄存器,必须在R0R0R7R7之间。之间。 RsRs 寄存器控制移位中包含移位位数的寄存器,必须在寄存器控制移位中包含移位位数的寄存器,必须在R0R0R7R7之间之间 RmRm 立即数移位的源寄存器,必须在立即数移位的源寄存器,必须在R0R0R7R7之间之间 exprexpr 立即数移位位数,值为立即数移位位数,值为1 13232ASR指令格式: 应用示例:应用示例:ASRR1,R2ASRR3,R1,#2移位指令移位指令ASRASR05:5

443、005:50河南理工大学通信工程河南理工大学通信工程338 LSL指令将数据逻辑左移,空位清零,移位结果保存到Rd寄存器中。移位指令移位指令LSLLSLLSL Rd, RsLSL Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为131LSL指令格式: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。LSL移位操作:005:50

444、05:50河南理工大学通信工程河南理工大学通信工程339 LSL指令将数据逻辑左移,空位清零,移位结果保存到Rd寄存器中。LSL Rd, RsLSL Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为131LSL指令格式: 应用示例: LSL R6,R7 LSL R1,R6,#2移位指令移位指令LSLLSL05:5005:50河南理工大学通信工程河南理工大学通信工程340 LSR指令将数据逻辑右移,空位清零,移位

445、结果保存到Rd寄存器中。移位指令移位指令LSRLSRLSR Rd, RsLSR Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132LSR指令格式: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。LSR移位操作:005:5005:50河南理工大学通信工程河南理工大学通信工程341 LSR指令将数据逻辑右移,空位清零,移位结

446、果保存到Rd寄存器中。LSR Rd, RsLSR Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132LSR指令格式: 应用示例: LSR R3,R0 LSR R5,R2,#2移位指令移位指令LSRLSR05:5005:50河南理工大学通信工程河南理工大学通信工程342 ROR指令将数据循环右移,寄存器右侧移出的位放入左侧空出的位上,移位结果保存到Rd寄存器中。移位指令移位指令RORRORROR Rd, Rs

447、其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 ROR指令格式:ROR移位操作: 应用示例: ROR R3,R005:5005:50河南理工大学通信工程河南理工大学通信工程343 CMP指令使用寄存器Rn的值减去第二个操作数的值,根据操作的结果更新CPSR中的N、Z、C和V标志位。 比较指令比较指令CMPCMPCMP Rn,RmCMP Rn,#expr其中:Rn 第一个操作数寄存器,必须在R0R7之间。 Rm 第二个操作数寄存器,必须在R0R7之间。 expr 立即数,值为0255ROR指令格式: 应用示例:

448、 CMP R1,#10;R1与10比较,设置相关标志位 CMP R1,R2 ;R1与R2比较,设置相关标志位05:5005:50河南理工大学通信工程河南理工大学通信工程344 CMN指令使用寄存器Rn的值加上寄存器Rm的值,根据操作的结果更新CPSR中的N、Z、C和V标志位。 比较指令比较指令CMNCMNCMN Rn,Rm其中:Rn 第一个操作数寄存器,必须在R0R7之间。 Rm 第二个操作数寄存器,必须在R0R7之间。ROR指令格式: 应用示例: CMN R0,R2 ;R0与-R2比较,设置相关标志位05:5005:50河南理工大学通信工程河南理工大学通信工程345 TST指令将寄存器Rn的

449、值与寄存器Rm的值按位作逻辑“与”操作,根据操作的结果更新CPSR中的N、Z、C和V标志位。 比较指令比较指令TSTTSTTST Rn,Rm其中:Rn 第一个操作数寄存器,必须在R0R7之间。 Rm 第二个操作数寄存器,必须在R0R7之间。TST指令格式: 应用示例: MOV R0,#0x01 TST R1,R0 ;判断R1的最低位是否为005:5005:50河南理工大学通信工程河南理工大学通信工程346ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支

450、指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程347ThumbThumb分支指令分支指令助记符说明操作条件码位置Blabel分支指令PClabelBcondBLlabel带链接的分支指令LRPC-4,PClabel无BXRm带状态切换的分支指令PClabel,切换处理器状态无05:5005:50河南理工大学通信工程河南理工大学通信工程348 B指令跳转到指定的地址执行程序,它是Thumb指令集中的唯一有条件执行指令。如果使用了条件执行,那么跳转范围在-252+256字节内。如果没有使用条件执行,那么跳转范围在2K内。分支指令

451、分支指令BBcond label其中:label表示程序标号。B指令格式: 应用示例: B WAITB ;WAITB标号在当前指令的2K范围内 BEQ LOOP1 ;LOOP1标号在当前指令的-252+256范围内05:5005:50河南理工大学通信工程河南理工大学通信工程349 BL指令在跳转到指定地址执行程序前,将下一条指令的地址拷贝到R14链接寄存器中。分支指令分支指令BLBL label其中:label 表示程序标号。BL指令格式:注意:由于BL指令通常需要大的地址范围,很难用16位指令格式实现,为此,Thumb采用两条这样的指令组合成22位半字偏移(符号扩展为32位),使指令转移范围

452、为4MB。 应用示例:反汇编代码:ADDR0,R1BLRstInit 0x1809 add r1,r1,r00xf9dcf000 bl RstInit指令机器码汇编指令32位长的机器码05:5005:50河南理工大学通信工程河南理工大学通信工程350 BX指令是带状态切换的分支指令,跳转地址由Rm指定,同时根据Rm的最低位的值切换处理器状态,当最低两位均为0时,切换到ARM状态。分支指令分支指令BXBXBX Rm其中:Rm 保存有目标地址的寄存器。BX指令格式: 应用示例: ADR R0,ArmFun;将ARM程序段地址存入R0 BX R0 ;跳至R0指定的地址,并切换到ARM状态05:500

453、5:50河南理工大学通信工程河南理工大学通信工程351ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令05:5005:50河南理工大学通信工程河南理工大学通信工程352 SWI指令用于产生软中断,从而实现从用户模式变换到管理模式,CPSR保存到管理模式的SPSR中,同时程序跳转到SWI向量。在系统模式下也可以使用SWI指令,处理器同样能切换到管理模式。(参数传递的方法参看ARM指令SWI的使用)T

454、humbThumb杂项指令杂项指令SWISWISWI immed_8其中: immed_8 8位立即数,值为0255之间的整数。SWI指令格式: 应用示例: SWI 1 ;软中断,中断立即数为1 SWI 0x55 ;软中断,中断立即数为0x5505:5005:50河南理工大学通信工程河南理工大学通信工程353ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令05:5005:50河南理工大学通信工程河

455、南理工大学通信工程354 ADR伪指令将基于PC相对偏移的地址值读取到寄存器中。ThumbThumb伪指令伪指令ADRADRADR register,expr其中:register 加载的目标寄存器 expr 地址表达式。偏移量必须是正数并小于1KB。 expr必须是局部定义的,不能被导入。ADR指令格式: 应用示例: ADR R0,TxTab .TxTab DCB“ARM7TDMI”,0地址范围不超过1KB05:5005:50河南理工大学通信工程河南理工大学通信工程355 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令

456、。详细说明参看ARM伪指令部分。ThumbThumb伪指令伪指令LDRLDRLDR register,=expr/label-expr其中:register 加载的目标寄存器 expr 32位立即数 label-expr 基于PC的地址表达式或外部表达式。LDR指令格式: 应用示例: LDR R0,=0x12345678;加载32位立即数0x123456778 LDR R0,=DATA_BUF+60;加载DATA_BUF地址+60 . LTORG;声明文字池地址范围不超过1KB05:5005:50河南理工大学通信工程河南理工大学通信工程356 NOP伪指令在汇编时将被替换成一条Thumb空操作

457、的指令。比如可能为“MOV R0,R0”指令。NOP伪指令可用于延时操作。ThumbThumb伪指令伪指令NOPNOP 应用示例(延时子程序):应用示例(延时子程序):DelayNOP; ;空操作空操作NOPNOPSUBR1,R1,#1; ;循环次数减一循环次数减一; ;不不需需要要加加S S标标志志,就就可可以以影影响响CPSRCPSR标标志志位位BNEDelay; ;如果循环没有结束,跳转如果循环没有结束,跳转DelayDelay继续继续MOVPC,LR; ;子程序返回子程序返回05:50357ARM9嵌入式系统设计基础教程河南理工大学计算机学院河南理工大学计算机学院通通 信信 工工 程程

458、 系系赵鸿图赵鸿图E-mail: E-mail: TEL: 13513825210TEL: 1351382521005:50358课程理论教学内容安排课程理论教学内容安排第第1 1章章 嵌入式系统基础知识嵌入式系统基础知识第第2 2章章 ARM ARM体系结构体系结构第第3 3章章 32 Bit RISC32 Bit RISC微处理器微处理器S3C2410AS3C2410A第第4 4章章 嵌入式系统的存储器系统嵌入式系统的存储器系统第第5 5章章 嵌入式系统输入嵌入式系统输入/ /输出设备接口输出设备接口第第6 6章章 嵌入式系统总线接口嵌入式系统总线接口第第7 7章章 嵌入式系统网络接口嵌

459、入式系统网络接口第第8 8章章 嵌入式系统嵌入式系统软件及操作系统基础软件及操作系统基础软件及操作系统基础软件及操作系统基础第第9 9章章 ARMARM汇编语言程序设计基础汇编语言程序设计基础第第1010章章 BootloaderBootloader设计基础设计基础第第1111章章 LinuxLinux操作系统基础操作系统基础第第1212章章 嵌入式嵌入式LinuxLinux软件设计软件设计第第1313章章 图形用户接口(图形用户接口(GUIGUI) 05:50359第4章 嵌入式系统的存储器系统4.1存储器系统概述4.2嵌入式系统存储设备分类4.3NORFlash接口电路4.4NANDFla

460、sh接口电路4.5SDRAM接口电路4.6CF卡接口电路4.7SD卡接口电路4.8IDE接口电路05:503604.1存储器系统概述4.1.14.1.1存储器系统的层次结构存储器系统的层次结构4.1.24.1.2高速缓冲存储器高速缓冲存储器4.1.34.1.3存储管理单元存储管理单元 05:503614.1.1存储器系统的层次结构 计算机系统的存储器被组织成一个计算机系统的存储器被组织成一个6 6个层次个层次的金字塔形的层次的金字塔形的层次结构结构, ,如图如图4.1.14.1.1所示所示, ,层次结构的最顶部是层次结构的最顶部是S0S0层层, ,最底部是最底部是S5S5: S0 S0层为层为

461、CPUCPU内部内部寄存器寄存器 S1 S1层为层为芯片内部芯片内部的的高速缓存高速缓存(cachecache) 内存内存S2S2层为层为芯片外芯片外的的高速缓存高速缓存(SRAMSRAM、DRAMDRAM、DDRAMDDRAM) S3 S3层为层为主存储器主存储器(FlashFlash、PROMPROM、EPROMEPROM、EEPROMEEPROM) S4 S4层为层为外部存储器外部存储器(磁盘、光盘、(磁盘、光盘、CFCF、SDSD卡)卡) S5 S5层为层为远程二级存储远程二级存储(分布式文件系统、(分布式文件系统、WebWeb服务器)服务器)05:50362存储器系统层次结构05:5

462、0363存储器系统层次结构 在这种存储器分层结构中,在这种存储器分层结构中,上面一层上面一层的存储器作为的存储器作为下一层下一层存存储器的储器的高速缓存高速缓存。CPUCPU寄存器就是寄存器就是cachecache的高速缓存,寄存器保的高速缓存,寄存器保存来自存来自cachecache的字;的字;cachecache又是内存层的高速缓存,从内存中提又是内存层的高速缓存,从内存中提取数据送给取数据送给CPUCPU进行处理,并将进行处理,并将CPUCPU的处理结果返回到内存中;的处理结果返回到内存中;内存又是主存储器的高速缓存,它将经常用到的数据从内存又是主存储器的高速缓存,它将经常用到的数据从F

463、lashFlash等等主存储器中提取出来,放到内存中,从而加快了主存储器中提取出来,放到内存中,从而加快了CPUCPU的运行效率。的运行效率。嵌入式系统的主存储器容量是有限的,磁盘、光盘或嵌入式系统的主存储器容量是有限的,磁盘、光盘或CFCF、SDSD卡卡等外部存储器用来保存大信息量的数据。在某些带有分布式文等外部存储器用来保存大信息量的数据。在某些带有分布式文件系统的嵌入式网络系统中,外部存储器就作为其他系统中被件系统的嵌入式网络系统中,外部存储器就作为其他系统中被存储数据的高速缓存。存储数据的高速缓存。05:503644.1.2高速缓冲存储器 在主存储器和在主存储器和CPUCPU之间采用高

464、速缓冲存储器之间采用高速缓冲存储器( (cache)cache)被广泛用被广泛用来提高存储器系统的性能来提高存储器系统的性能, ,cachecache能够减少内存平均访问时间。能够减少内存平均访问时间。 Cache Cache可分为可分为统一统一cachecache和和独立独立的的数据数据/ /程序程序cachecache。存储系统。存储系统中,中,指令预取指令预取和和数据读写数据读写使用使用同一同一cachecache时称统一时称统一cachecache。如存。如存储系统中,指令预取和数据读写使用储系统中,指令预取和数据读写使用不同的不同的cachecache,各自是独立,各自是独立的,称系

465、统使用了的,称系统使用了独立的独立的cachecache,用于指令预取的,用于指令预取的cachecache称为指称为指令令cachecache,用于数据读写的,用于数据读写的cachecache称为数据称为数据cachecache。 CPUCPU更新更新cachecache内容时,要将结果写回到主存中,可采用写通内容时,要将结果写回到主存中,可采用写通法(法(write-throughwrite-through)和写回法()和写回法(write-backwrite-back)。)。写通法写通法是指是指CPUCPU在执行在执行写操作时写操作时,必须把数据同时,必须把数据同时写入写入cachec

466、ache和和主存主存。采用。采用写通法进行数据更新的写通法进行数据更新的cachecache称为称为写通写通cachecache。写回法写回法是指是指CPUCPU在在执行写操作时,被写的数据执行写操作时,被写的数据只写入只写入cachecache不写入主存。仅当需要不写入主存。仅当需要替换时,才把已经修改的替换时,才把已经修改的cachecache块写回到主存中。采用写回法进块写回到主存中。采用写回法进行数据更新的行数据更新的cachecache称为称为写回写回cachecache。05:50365高速缓冲存储器 当进行数据写操作时,可以将当进行数据写操作时,可以将cachecache分为分为

467、读操作分配读操作分配cachecache和和写操作分配写操作分配cachecache两类。对于两类。对于读操作分配读操作分配cachecache,当进行数据写,当进行数据写操作时,如果操作时,如果cachecache未命中未命中,只是简单地将数据,只是简单地将数据写入主存写入主存中。主中。主要在要在数据读取数据读取时,才进行时,才进行cachecache内容预取内容预取。对于。对于写操作分配写操作分配cachecache,当进行数据写操作时,如果,当进行数据写操作时,如果cachecache未命中,未命中,cachecache系统将系统将会进行会进行cachecache内容预取内容预取,从,从

468、主存主存中将相应的中将相应的块读取到块读取到cachecache中相中相应的位置,并执行写操作,把数据写入到应的位置,并执行写操作,把数据写入到cachecache中。对于中。对于写通写通类类型的型的cachecache,数据将会同时被写入到主存中,对于,数据将会同时被写入到主存中,对于写回写回类型的类型的cachecache数据将在合适的时候写回到主存中。数据将在合适的时候写回到主存中。05:503664.1.3存储管理单元 MMU MMU(Memory Manage Unit, Memory Manage Unit, 存储管理单元)在存储管理单元)在CPUCPU和物理内和物理内存之间进行地

469、址转换,将地址从逻辑空间映射到物理空间,这存之间进行地址转换,将地址从逻辑空间映射到物理空间,这个转换过程一般称为个转换过程一般称为内存映射内存映射。MMUMMU主要完成以下工作:主要完成以下工作: (1 1)虚拟存储空间虚拟存储空间到到物理存储空间物理存储空间的的映射映射。采用了页式虚拟。采用了页式虚拟存储管理,它把存储管理,它把虚拟地址空间虚拟地址空间分成一个个固定大小的分成一个个固定大小的块块,每一,每一块块称为一称为一页页,把物理内存的地址空间也分成同样大小的页。,把物理内存的地址空间也分成同样大小的页。MMUMMU实现的就是实现的就是从虚拟地址到物理地址的转换从虚拟地址到物理地址的转

470、换; (2 2)存储器)存储器访问权限访问权限的的控制控制; (3 3)设置虚拟存储空间)设置虚拟存储空间缓冲缓冲的特性。的特性。05:50367存储管理单元 嵌入式系统中常用嵌入式系统中常用页式存储管理页式存储管理。页表是存储在内存中的一。页表是存储在内存中的一个个表表,页表页表用来管理这些页。页表的用来管理这些页。页表的每一行每一行对应于虚拟存储空对应于虚拟存储空间的间的一个页一个页,该行包含了该虚拟内存页对应的物理内存页的,该行包含了该虚拟内存页对应的物理内存页的地地址址、该页的、该页的方位权限方位权限和该页的和该页的缓冲特性缓冲特性等。从虚拟地址到物理等。从虚拟地址到物理地址的变换过程

471、就是地址的变换过程就是查询页表查询页表的的过程过程。例在。例在ARMARM嵌入式系统中,嵌入式系统中,使用系统控制使用系统控制协处理器协处理器CP15CP15的寄存器的寄存器C2C2来来保存页表保存页表的的基地址基地址。 基于程序在执行过程中具有局部性的原理,在一段时间内,基于程序在执行过程中具有局部性的原理,在一段时间内,对页表的访问只是局限在少数几个单元。根据这一特点,增加对页表的访问只是局限在少数几个单元。根据这一特点,增加了一个了一个小容量小容量( (通常为通常为8 81616字字) )、高速度高速度的的存储部件存储部件来存放当前来存放当前访问需要的访问需要的地址变换条目地址变换条目,

472、这个存储部件称为,这个存储部件称为地址转换后备缓地址转换后备缓冲器冲器(TLB)(TLB)。当。当CPUCPU访问内存时,首先在访问内存时,首先在TLBTLB中查找需要的地址变中查找需要的地址变换条目,如果该条目不存在,换条目,如果该条目不存在,CPUCPU在从位于内存中的页表中查询,在从位于内存中的页表中查询,并把相应的结果添加到并把相应的结果添加到TLBTLB中,更新它的内容。中,更新它的内容。05:50368存储管理单元 当当ARMARM处理器处理器请求存储访问请求存储访问时,首先在时,首先在TLBTLB中中查找虚拟地址查找虚拟地址。如果系统中数据如果系统中数据TLBTLB和指令和指令T

473、LBTLB是是分开分开的,在取指令时,从的,在取指令时,从指令指令TLBTLB查找相应的查找相应的虚拟地址虚拟地址,对于内存访问操作,从数据,对于内存访问操作,从数据TLBTLB中查中查找相应的虚拟地址。找相应的虚拟地址。 嵌入式系统中虚拟存储空间到物理存储空间的映射以嵌入式系统中虚拟存储空间到物理存储空间的映射以内存块内存块为为单位单位来进行。即虚拟存储空间中一块连续的存储空间被映射来进行。即虚拟存储空间中一块连续的存储空间被映射到物理存储空间中同样大小的一块连续存储空间。在页表和到物理存储空间中同样大小的一块连续存储空间。在页表和TLBTLB中,每一个地址变换条目实际上中,每一个地址变换条

474、目实际上记录记录了一个了一个虚拟存储空间虚拟存储空间的内的内存块的存块的基地址基地址与与物理存储空间物理存储空间相应的一个内存块的相应的一个内存块的基地址的对基地址的对应关系应关系。根据内存块大小,可以有多种地址变换。根据内存块大小,可以有多种地址变换。05:50369存储管理单元 嵌入式系统支持的嵌入式系统支持的内存块大小内存块大小有以下几种:有以下几种:段段(sectionsection)大)大小为小为1MB1MB的内存块的内存块; ;大页大页( (Large Pages)Large Pages)大小为大小为64KB64KB的内存块;的内存块;小小页页( (Small Pages)Smal

475、l Pages)大小为大小为4KB4KB的内存块;的内存块;极小页极小页(Tiny PagesTiny Pages)大小为大小为1KB1KB的内存块。极小页只能以的内存块。极小页只能以1KB1KB大小为单位不能再细分,大小为单位不能再细分,而大页和小页有些情况下可以在进一步的划分,而大页和小页有些情况下可以在进一步的划分,大页大页可以分成可以分成大小为大小为16KB16KB的的子页子页,小页小页可以分成大小为可以分成大小为1KB1KB的子页的子页。 MMU MMU中的中的域域指的是一些指的是一些段段、大页大页或者或者小页小页的的集合集合。每个域的。每个域的访问控制特性都是由芯片内部的寄存器中的

476、相应控制位来控制访问控制特性都是由芯片内部的寄存器中的相应控制位来控制的。例如在的。例如在ARMARM嵌入式系统嵌入式系统中,每个域的访问控制特性都是由中,每个域的访问控制特性都是由CP15CP15中的中的寄存器寄存器C3C3中的两位来控制的。中的两位来控制的。 05:50370存储管理单元 MMUMMU中的快速上下文中的快速上下文切换技术切换技术( (Fast Context Switch Fast Context Switch Extension,FCSE)Extension,FCSE)通过修改系统中通过修改系统中不同进程不同进程的虚拟地址,避免在的虚拟地址,避免在进行进程间切换时造成的虚

477、拟地址到物理地址的进行进程间切换时造成的虚拟地址到物理地址的重映射重映射,从而,从而提高提高系统的系统的性能性能。 在嵌入式系统中,在嵌入式系统中,I/OI/O操作操作通常被映射成通常被映射成存储器操作存储器操作,即输,即输入入/ /输出是通过存储器映射的可寻址外围寄存器和中断输入的组输出是通过存储器映射的可寻址外围寄存器和中断输入的组合来实现的。合来实现的。I/OI/O的输出的输出操作可通过操作可通过存储器写入存储器写入操作实现;操作实现;I/OI/O的的输入输入操作可通过存储器操作可通过存储器读取读取操作实现。这些存储器映射的操作实现。这些存储器映射的I/OI/O空间空间不满足不满足cac

478、hecache所要求的所要求的特性特性,不能使用,不能使用cachecache技术,一些嵌技术,一些嵌入式系统使用入式系统使用存储器直接访问存储器直接访问(DMADMA)实现快速存储。)实现快速存储。05:503714.2嵌入式系统存储设备分类4.2.14.2.1存储器部件的分类存储器部件的分类4.2.24.2.2存储器的组织和结构存储器的组织和结构4.2.34.2.3常见的嵌入式系统存储器常见的嵌入式系统存储器 05:503724.2.1存储器部件的分类1.1.按在系统中的地位分类按在系统中的地位分类 在微机系统中,存储器可分为在微机系统中,存储器可分为主存储器主存储器(内存或主存)和(内存

479、或主存)和辅辅助存储器助存储器(简称辅存或外存)。(简称辅存或外存)。 内存内存是计算机主机的是计算机主机的组成部分组成部分,用,用快速存储器件快速存储器件来构成,内来构成,内存空间的大小受到存空间的大小受到地址总线位数地址总线位数的限制。内存通常用来容纳常的限制。内存通常用来容纳常使用的使用的程序程序和和数据数据,CPUCPU可直接对内存访问。系统软件中如可直接对内存访问。系统软件中如引导引导程序程序、监控程序监控程序或者或者操作系统操作系统中的基本输入中的基本输入/ /输出部分输出部分BIOSBIOS都是都是必须必须常驻内存常驻内存。系统软件系统软件和和应用软件应用软件用到时由用到时由外存

480、外存传到传到内存内存。 外存外存存放的是存放的是不经常使用不经常使用的的程序程序和和数据数据,特点是,特点是容量大容量大。常。常见的外存有见的外存有软盘软盘、硬盘硬盘、U U盘盘、光盘光盘等。等。CPUCPU要使用外存的这些要使用外存的这些信息时,必须通过信息时,必须通过专门的设备专门的设备将信息先传送到内存中。将信息先传送到内存中。05:50373存储器部件的分类2.2.按存储介质分类按存储介质分类 根据存储介质的材料及器件的不同,分根据存储介质的材料及器件的不同,分磁存储器磁存储器、半导体半导体存存储器、储器、光存储器光存储器及及激光光盘激光光盘存储器。存储器。3.3.按信息存取方式分类按

481、信息存取方式分类 存储器按存储信息的功能,分为存储器按存储信息的功能,分为随机随机存取存储器(存取存储器(RAMRAM)和)和只读只读存储器(存储器(ROMROM)。随机存取存储器在机器运行期间可读、写)。随机存取存储器在机器运行期间可读、写的存储器。随机存储器按信息存储的方式,分为的存储器。随机存储器按信息存储的方式,分为静态静态RAMRAM、动态动态RAMRAM及准静态及准静态RAMRAM(PSRAMPSRAM)。)。 在机器运行期间只能读出信息,不能随时写入信息的存储器在机器运行期间只能读出信息,不能随时写入信息的存储器称为称为只读存储器只读存储器。只读存储器按功能可分为。只读存储器按功

482、能可分为掩模式掩模式(ROMROM)、)、可可编程编程只读存储器(只读存储器(PROMPROM)和)和可改写可改写的只读存储器(的只读存储器(EPROMEPROM)。)。05:503744.2.2存储器的组织和结构 存储器的存储器的容量容量是描述存储器的最基本参数,如是描述存储器的最基本参数,如1MB1MB。存储器。存储器的表示并不唯一,有不同表示方法,每种有不同的数据宽度。的表示并不唯一,有不同表示方法,每种有不同的数据宽度。在存储器内部,数据是存放在在存储器内部,数据是存放在二维阵列二维阵列存储单元中。阵列以二存储单元中。阵列以二维的形式存储,给出的维的形式存储,给出的n n位地址被分成位

483、地址被分成行地址行地址和和列地址列地址(n nr+cr+c)。)。r r是是行地址数行地址数,c c是是列地址数列地址数。行列选定行列选定一个一个特定特定存储存储单单元元。如果存储器外部宽度为。如果存储器外部宽度为1 1位,那么列地址仅一位;对更宽的位,那么列地址仅一位;对更宽的数据,列地址可选择所有列的一个子集。数据,列地址可选择所有列的一个子集。 嵌入式系统的存储器与通用系统的存储器有所不同,通常由嵌入式系统的存储器与通用系统的存储器有所不同,通常由ROMROM、RAMRAM、EPROMEPROM等组成。嵌入式存储器一般等组成。嵌入式存储器一般采用存储密度较大采用存储密度较大的存储器的存储

484、器芯片芯片,存储容量存储容量与应用的与应用的软件大小相匹配软件大小相匹配。05:503754.2.3常见的嵌入式系统存储器1.RAM1.RAM(随机存储器)(随机存储器) RAM RAM可以被读和写,地址可以以任意次序被读。常见可以被读和写,地址可以以任意次序被读。常见RAMRAM的种的种类有类有SRAMSRAM(静态随机存储器)、(静态随机存储器)、DRAMDRAM(动态随机存储器)、(动态随机存储器)、DDRAMDDRAM(双倍速率随机存储器)。其中,(双倍速率随机存储器)。其中,SRAMSRAM比比DRAMDRAM运行运行速度快速度快,SRAMSRAM比比DRAMDRAM耗电多耗电多,D

485、RAMDRAM需要周期性需要周期性刷新刷新。而。而DDRAMDDRAM是是RAMRAM的下的下一代产品。在一代产品。在133MHz133MHz时钟频率,时钟频率,DDRAMDDRAM内存带宽可以达到内存带宽可以达到13313364b/864b/82 22.1GB/s2.1GB/s,在,在200MHz200MHz时钟频率,其带宽可达到时钟频率,其带宽可达到20020064b/864b/82 23.2GB/s3.2GB/s。05:503762.ROM(只读存储器) ROM ROM在烧入数据后,无需外加电源来保存数据,断电后数据不在烧入数据后,无需外加电源来保存数据,断电后数据不丢失,但速度较慢,适

486、合存储需长期保留的不变数据。在嵌入式丢失,但速度较慢,适合存储需长期保留的不变数据。在嵌入式系统中,系统中,ROMROM用于固定数据和程序。用于固定数据和程序。 常见常见ROMROM有有Mask ROM(Mask ROM(掩模掩模ROMROM) )、PROM(PROM(可编程可编程ROMROM) )、EPROM(EPROM(可可擦写擦写ROMROM) )、EEPROM(EEPROM(电可擦除可编程电可擦除可编程ROMROM, ,也可表示为也可表示为E E2 2PROMPROM)、)、Flash ROM(Flash ROM(闪速存储器闪速存储器) )。 Mask ROMMask ROM一次性由厂

487、家写入数据的一次性由厂家写入数据的ROM,ROM,用户无法修改。用户无法修改。PROMPROM出厂时厂家并没有写入数据出厂时厂家并没有写入数据, ,而是保留里面的内容为全而是保留里面的内容为全0 0或全或全1,1,由由用户来编程一次性写入数据。用户来编程一次性写入数据。EPROMEPROM可以通过紫外光的照射可以通过紫外光的照射, ,擦掉擦掉原先的程序原先的程序, ,芯片可重复擦除和写入。芯片可重复擦除和写入。E E2 2PROMPROM是通过加电擦除原是通过加电擦除原编程数据编程数据, ,通过高压脉冲可以写入数据通过高压脉冲可以写入数据, ,写入时间较长。写入时间较长。FlashFlash断

488、断电不会丢失数据电不会丢失数据( (NVRAM),NVRAM),可快速读取可快速读取, ,电可擦写可编程电可擦写可编程. .05:503773.Flash Memory Flash memory Flash memory(闪速存储器闪速存储器)是嵌入式系统中)是嵌入式系统中重要的组成部重要的组成部分分,用来存储,用来存储程序程序和和数据数据,掉电后数据不会丢失。但在使用,掉电后数据不会丢失。但在使用Flash MemoryFlash Memory时,必须根据其自身特性,对存储系统进行特殊时,必须根据其自身特性,对存储系统进行特殊设计,以保证系统的性能达到最优。设计,以保证系统的性能达到最优。

489、Flash Memory Flash Memory是一种是一种非易失性非易失性存储器存储器NVMNVM(Non-Volatile Non-Volatile MemoryMemory),根据结构不同可分成),根据结构不同可分成NOR FlashNOR Flash和和NAND FlashNAND Flash两种。两种。 Flash Memory Flash Memory在物理结构上分成若干个在物理结构上分成若干个区块区块,区块之间相互,区块之间相互独立独立。NOR FlashNOR Flash把整个存储区分成若干个把整个存储区分成若干个扇区扇区(SectorSector),而),而NAND Fla

490、shNAND Flash把整个存储区分成若干个把整个存储区分成若干个块块(BlockBlock),可以对以块),可以对以块或扇区为单位的内存单元进行擦写和再编程。或扇区为单位的内存单元进行擦写和再编程。05:50378Flash Memory 由于由于Flash MemoryFlash Memory的的写操作写操作只能将数据位只能将数据位从从1 1写成写成0 0, ,而而不能不能从从0 0写成写成1 1, ,所以在对存储器进行所以在对存储器进行写之前写之前必须先执行必须先执行擦除操作擦除操作, ,将将预写入预写入的数据位初始化为的数据位初始化为1 1。擦操作的。擦操作的最小单位最小单位是一个是

491、一个区块区块,而,而不是单个不是单个字节字节. .NAND FlashNAND Flash执行擦除操作是十分执行擦除操作是十分简单简单的的, ,而而NORNOR型型内存则要求在进行内存则要求在进行擦除前擦除前先要将目标块内所有的位都先要将目标块内所有的位都写为写为0 0。 由于由于擦除擦除NOR FlashNOR Flash时是以时是以64-128KB64-128KB为单位为单位的块进行的,执的块进行的,执行一个写入行一个写入/ /擦除操作的时间为擦除操作的时间为5s5s,与此相反,擦除,与此相反,擦除NAND FlashNAND Flash是以是以8-32KB8-32KB的块进行的,执行相同

492、的操作最多只需要的块进行的,执行相同的操作最多只需要4ms4ms。 NOR FlashNOR Flash的的读速度读速度比比NAND FlashNAND Flash稍快稍快一些,一些,NANDNAND Flash Flash的的写写入速度入速度比比NOR FlashNOR Flash快很多快很多。NAND FlashNAND Flash的的随机读取能力差随机读取能力差,适,适合大量数据的合大量数据的连续读取连续读取。05:50379Flash Memory 除了除了NOR FlashNOR Flash的读的读,Flash Memory,Flash Memory的的其他操作其他操作与与RAMRA

493、M不同不同, ,直直接对目标地址进行总线操作。例如执行一次接对目标地址进行总线操作。例如执行一次写操作写操作,它必须输,它必须输入入一串特殊的指令一串特殊的指令(NOR Flash),(NOR Flash),或完成或完成一段时序一段时序(NAND Flash)(NAND Flash)才能将数据写入到才能将数据写入到Flash MemoryFlash Memory中。中。 NOR Flash NOR Flash带有带有SRAMSRAM接口接口, ,有足够的有足够的地址引脚寻址地址引脚寻址,可很容易,可很容易地存取其内部的地存取其内部的每一个字节每一个字节。NAND FlashNAND Flash

494、地址、数据和命令地址、数据和命令共共用用8 8位总线位总线/16/16位总线位总线, ,每次读写都要使用每次读写都要使用复杂复杂的的I/OI/O接口串行接口串行地地存取数据存取数据, ,8 8位总线位总线/16/16位总线用来位总线用来传送控制传送控制、地址地址和和资料资料信息。信息。 NAND Flash NAND Flash读和写操作采用读和写操作采用512B512B的块的块,类似,类似硬盘管理硬盘管理操作。操作。因此,基于因此,基于NANDNAND的闪存可以的闪存可以取代硬盘取代硬盘或其他块设备。或其他块设备。 NORNOR Flash Flash容量通常在容量通常在1MB-8MB1MB

495、-8MB之间。而之间。而NANDNAND Flash Flash用在用在8MB8MB以以上上的产品当中。的产品当中。NORNOR Flash Flash主要应用在主要应用在代码存储代码存储介质中,介质中,NANDNAND FlashFlash适用于适用于资料存储资料存储。05:50380Flash Memory 所有所有Flash MemoryFlash Memory器件存在器件存在位交换现象位交换现象。Flash MemoryFlash Memory在读在读写数据过程中,偶然会产生一位或几位写数据过程中,偶然会产生一位或几位数据错误数据错误,即位反转即位反转。位反转位反转无法避免无法避免,只

496、能通过其他手段对产生的结果进行,只能通过其他手段对产生的结果进行事后处事后处理理。位反转的问题。位反转的问题多见于多见于NANDNAND Flash Flash。NAND FlashNAND Flash的供货商建议的供货商建议使用使用NAND FlashNAND Flash的时候,同时使用的时候,同时使用EDC/ECCEDC/ECC(错误探测错误探测错误纠错误纠正)算法,以确保正)算法,以确保可靠性可靠性。 Flash Memory Flash Memory在在使用使用过程中,可能导致某些过程中,可能导致某些区块区块的的损坏损坏。区。区块一旦损坏,将块一旦损坏,将无法无法进行进行修复修复。NA

497、ND FlashNAND Flash中的中的坏块坏块是是随机随机分分布的,尤其是布的,尤其是NAND FlashNAND Flash在在出厂时出厂时就可能存在这样的就可能存在这样的坏块坏块(已(已经被标识出)。经被标识出)。NAND FlashNAND Flash需要对介质进行需要对介质进行初始化初始化扫描以发现扫描以发现坏块坏块,并将坏块,并将坏块标记标记为不可用。如果对已损坏的区块进行操作,为不可用。如果对已损坏的区块进行操作,可能会带来不可预测的可能会带来不可预测的错误错误。05:50381Flash Memory 应用程序应用程序可以可以直接直接在在NOR FlashNOR Flash

498、内内运行运行。NOR FlashNOR Flash的的传输效率很高传输效率很高,在,在1 14MB4MB的小容量时具有很高的成本效益,但是的小容量时具有很高的成本效益,但是很低的写入很低的写入和和擦除速度擦除速度大大影响大大影响了它的性能。了它的性能。NANDNAND Flash Flash结构可以达到结构可以达到高存储密度高存储密度,并且,并且写入写入和和擦除擦除的的速度很速度很快快,应用,应用NAND FlashNAND Flash的困难在于的困难在于需要特殊需要特殊的系统的系统接口接口。 在在NOR FlashNOR Flash上运行代码不需要任何的软件支持。在上运行代码不需要任何的软件

499、支持。在NANDNAND Flash Flash上进行同样上进行同样操作时,通常需要操作时,通常需要驱动程序驱动程序,也就是,也就是内存技术驱动程序内存技术驱动程序( (MTD)MTD)。NAND FlashNAND Flash和和NOR FlashNOR Flash在进行在进行写入写入和和擦除擦除操作时都操作时都需要需要MTDMTD。 在在NANDNAND Flash Flash中中每个块每个块的最大的最大擦写次数擦写次数是是一百万次一百万次, ,而而NORNOR Flash Flash的擦写次的擦写次数是数是十万次十万次。NAND FlashNAND Flash除了具有除了具有10:110

500、:1的块擦除周期优势的块擦除周期优势, ,典型的典型的NANDNAND Flash Flash块块尺寸尺寸要比要比NORNOR型闪存型闪存小小8 8倍倍,每个,每个NAND FlashNAND Flash的内存块在给定的时间内删除的内存块在给定的时间内删除次数要少一些。次数要少一些。05:503824.标准存储卡(Compact Flash,CF卡) CF CF卡是利用卡是利用FlashFlash技术技术的的存储卡存储卡,内部结构如图,内部结构如图4.2.14.2.1所示,所示,接口具有接口具有PCMCIA-PCMCIA-ATAATA功能功能,可以工作在,可以工作在IDEIDE接口接口模式,也

501、可以工模式,也可以工作在作在PC CardPC Card模式模式。衍生出来的。衍生出来的CF+CF+卡物理规格和卡物理规格和CFCF完全相同,完全相同,在在手持设备上手持设备上应用,如应用,如CFCF串口卡串口卡、CF ModemCF Modem. . CFCF蓝牙蓝牙、CF USBCF USB卡、卡、CFCF网卡网卡、CF GPSCF GPS卡、卡、CF GPRSCF GPRS卡等。按照卡等。按照CF+CF+卡标准,它不一定卡标准,它不一定要支持要支持ATAATA接口。通常建议接口。通常建议CF+CF+卡工作在卡工作在PCMCIAPCMCIA模式。模式。CFCF卡可以卡可以看作是看作是PCM

502、CIAPCMCIA卡的一个子集,可以通过物理上的转换器,直接卡的一个子集,可以通过物理上的转换器,直接转换成转换成PCMCIAPCMCIA卡使用。卡使用。 CF CF卡可分为卡可分为I I型和型和IIII型两类,二者的规格和特性基本相同,型两类,二者的规格和特性基本相同,只是只是IIII型比型比I I型略厚一些型略厚一些(5.0mm,3.3mm),II(5.0mm,3.3mm),II型插座可以同时兼容型插座可以同时兼容I I型卡。型卡。05:50383CF卡内部结构05:50384CF卡工作模式 CFCF卡有卡有3 3种工作模式种工作模式:PCPC卡卡ATA I/OATA I/O模式、模式、P

503、CPC卡卡ATAATA存储模式和存储模式和实实IDEIDE模式。实模式。实IDEIDE模式与模式与IDEIDE接口完全兼容。接口完全兼容。CFCF卡遵循卡遵循ATAATA协议,协议,属于属于块存储设备块存储设备,存储单元是通过,存储单元是通过磁头磁头(head)(head)、柱面柱面(也称磁(也称磁道)和道)和扇区扇区组织起来的。在物理寻址组织起来的。在物理寻址(CHS)(CHS)方式下,每一组方式下,每一组H/C/SH/C/S参数唯一确定存储卡中的一个扇区,通常一个扇区拥有参数唯一确定存储卡中的一个扇区,通常一个扇区拥有512B512B的数据空间。一个驱动数格式化后的的数据空间。一个驱动数格

504、式化后的容量容量为为磁头数磁头数柱面柱面数数扇区数扇区数512512字节字节。在物理寻址模式下,扇区是最低的地址。在物理寻址模式下,扇区是最低的地址单位,其次是磁头,最后的柱面为最高寻址单位。此外,还有单位,其次是磁头,最后的柱面为最高寻址单位。此外,还有逻辑寻址方式逻辑寻址方式(LBA)(LBA)。在这种寻址方式下,。在这种寻址方式下,CFCF卡按照以连续序列卡按照以连续序列的逻辑扇区编号进行寻址,主机不必知道的逻辑扇区编号进行寻址,主机不必知道CFCF卡的物理几何结构。卡的物理几何结构。使用使用2828个数据位来表示逻辑扇区的地址,可以寻址个数据位来表示逻辑扇区的地址,可以寻址228228

505、个扇区,个扇区,理论上可以理论上可以寻址寻址136GB136GB的容量。的容量。05:50385CF卡工作模式 CF CF卡卡物理寻址方式物理寻址方式与与逻辑寻址方式逻辑寻址方式的对应关系如下所示:的对应关系如下所示: S SLBALBA=N=NH HN NS Sb bC C+N+NC Cb bH H+b+bS S-1-1; b bC C= =(S SLBALBA div N div NS S)div Ndiv NH H; b bH H= =(S SLBALBA div N div NS S)mod Nmod NH H; b bS S= =(S SLBALBA mod N mod NS S)+

506、1+1。 其中:其中:N NS S为每磁道为每磁道扇区数扇区数,N NH H为为磁头数磁头数,b bC C、b bH H、b bS S分别表示分别表示磁盘的磁盘的柱面柱面、磁头和、磁头和扇区扇区编号,编号,S SLBALBA表示表示逻辑扇区号逻辑扇区号,divdiv为整为整除计算,除计算,modmod为求余计算。为求余计算。05:503865.安全数据卡(SD卡) 由日本由日本PanasonicPanasonic公司、公司、TOSHIBATOSHIBA公司和美国公司和美国SanDiskSanDisk公司共公司共同开发研制的同开发研制的SDSD卡卡是一种全新的是一种全新的存储卡存储卡产品,在产品

507、,在MP3MP3、数码摄像数码摄像机机、数码相机数码相机、电子图书电子图书及及AVAV器材器材等中应用。等中应用。SDSD存储卡采用一存储卡采用一个完全开放的标准(系统),外形与个完全开放的标准(系统),外形与MultiMediaMultiMedia卡保持一致,卡保持一致,比比MMCMMC卡略厚,具有更大的容量,卡略厚,具有更大的容量,兼容兼容MMCMMC卡接口规范。卡接口规范。SDSD卡具卡具有有加密功能加密功能,可以保证数据资料的安全保密。,可以保证数据资料的安全保密。SDSD卡具有版权保卡具有版权保护技术,所采用的版权保护技术是护技术,所采用的版权保护技术是DVDDVD中使用的中使用的C

508、PRMCPRM技术(可刻技术(可刻录介质内容保护)录介质内容保护)05:503876.硬盘存储器 硬盘存储器具有存储硬盘存储器具有存储容量大容量大,使用,使用寿命长寿命长,存取,存取速度较快速度较快的的特点,也是在嵌入式系统中常用的特点,也是在嵌入式系统中常用的外存外存。 硬盘存储器的硬盘存储器的硬件硬件包括包括硬盘控制器硬盘控制器( (适配器适配器) )、硬盘驱动器硬盘驱动器以以及连接及连接电缆电缆。硬盘控制器硬盘控制器( (简称简称HDC)HDC)对硬盘进行对硬盘进行管理管理,并在主机,并在主机和硬盘之间和硬盘之间传送数据传送数据。硬盘驱动器硬盘驱动器( (简称简称HDD)HDD)中有中有

509、盘片盘片、磁头磁头、主轴电机主轴电机、磁头定位机构磁头定位机构、读读/ /写电路写电路和和控制逻辑控制逻辑等。等。 硬盘存储器可分为硬盘存储器可分为温彻斯特盘温彻斯特盘和和非温彻斯特盘非温彻斯特盘两类。温彻斯两类。温彻斯特盘是根据温彻斯特技术设计制造的,它的磁头、盘片、磁头特盘是根据温彻斯特技术设计制造的,它的磁头、盘片、磁头定位机构、主轴、甚至连读定位机构、主轴、甚至连读/ /写驱动电路等都被写驱动电路等都被密封在一个盘盒密封在一个盘盒内内,构成一个头一盘组合体。温彻斯特盘的,构成一个头一盘组合体。温彻斯特盘的防尘性能好防尘性能好,可靠可靠性高性高,对使用环境要求不高。,对使用环境要求不高。

510、非温彻斯特盘磁盘非温彻斯特盘磁盘的磁头和盘片的磁头和盘片等不是密封的,通常只能用于等不是密封的,通常只能用于中型中型、大型大型计算机机房中。计算机机房中。05:50388硬盘接口IDE 硬盘接口有硬盘接口有IDEIDE(ATA)(ATA)和和SCSISCSI两种两种, ,移动硬盘移动硬盘用用USBUSB接口。接口。 IDE IDE接口也称为接口也称为ATAATA(美国国家标准协会)接口,通用的硬盘(美国国家标准协会)接口,通用的硬盘接口。接口。IDEIDE接口的硬盘分为接口的硬盘分为ATA-1(IDE)ATA-1(IDE)、ATA-2(EIDE)ATA-2(EIDE)、ATA-ATA-3(Fa

511、st ATA-2)3(Fast ATA-2)、ATA-4(ATA-4(包括包括Ultra ATAUltra ATA、ATA/33ATA/33、ATA/66ATA/66、ATA/100ATA/100、ATA/133ATA/133)与)与Serial ATASerial ATA。基本的。基本的IDEIDE接口数据传输率接口数据传输率为为4.1 MB/s4.1 MB/s,传输方式有,传输方式有PIOPIO和和DMADMA两种,支持总线为两种,支持总线为ISAISA和和EISAEISA。ATA-2ATA-2、ATAPIATAPI和针对和针对PCIPCI总线的总线的FAST-ATAFAST-ATA、FA

512、ST-ATA2FAST-ATA2等数据传等数据传输率达到了输率达到了16.67MB/s16.67MB/s。Ultra DMA/33Ultra DMA/33接口(称为接口(称为EIDEEIDE接口),接口),采用采用PIOPIO模式,数据传输率达到模式,数据传输率达到33MB/s33MB/s。UltraDMA/66UltraDMA/66接口的传接口的传输率为输率为Ultra DMA/33Ultra DMA/33的两倍,采用的两倍,采用CRCCRC(循环冗余循环校验)技(循环冗余循环校验)技术以保证数据传输的安全性,并且使用了术以保证数据传输的安全性,并且使用了8080线线的专用连接电缆。的专用连

513、接电缆。Ultra ATA/100Ultra ATA/100、ATA/133ATA/133、Serial ATA/150(Serial ATA/150(SATASATA) )、SATA2SATA2 (300MB/s(300MB/s的带宽的带宽 ) )是目前常用的硬盘接口。是目前常用的硬盘接口。05:50389硬盘接口SCSI SCSISCSI(Small Computer System InterfaceSmall Computer System Interface,小型计算机,小型计算机系统接口)不是专为硬盘设计的,是一种系统接口)不是专为硬盘设计的,是一种总线型接口总线型接口。SCSISC

514、SI独立于系统总线独立于系统总线工作,其系统占用率极低,但其价格昂贵,工作,其系统占用率极低,但其价格昂贵,具有这种接口的硬盘大多具有这种接口的硬盘大多用于服务器用于服务器等高端应用场合。等高端应用场合。05:503904.3NORFlash接口电路4.3.14.3.1NORNORFlashFlash存储器存储器Am29LV160DAm29LV160D4.3.24.3.2S3C2410AS3C2410A与与NORNORFlashFlash存储器的接口电路存储器的接口电路 05:503914.3.1NORFlash存储器Am29LV160D Am29LV160DAm29LV160D是是AMDAM

515、D公司的一款公司的一款NOR FlashNOR Flash存储器,存储容量为存储器,存储容量为2M2M8Bit8Bit/ /1M1M16Bit16Bit,接口与,接口与CMOS I/OCMOS I/O兼容,工作电压为兼容,工作电压为2.72.73.6V3.6V,读操作电流为,读操作电流为9mA9mA,编程和擦除操作电流为,编程和擦除操作电流为20mA20mA,待机电,待机电流为流为200nA200nA。采用。采用FBGA-48FBGA-48、TSOP-48TSOP-48、SO-44SO-44三种封装形式。三种封装形式。 Am29LV160D Am29LV160D仅需仅需3.3V3.3V电压即可

516、完成在系统的编程与擦除操作,电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器写入标准的命令序列,可对通过对其内部的命令寄存器写入标准的命令序列,可对FlashFlash进进行行编程编程(烧写)、整片(烧写)、整片擦除擦除、按扇区擦除按扇区擦除,以及其他操作。以,以及其他操作。以1616位(字模式)数据宽度的方式工作。位(字模式)数据宽度的方式工作。 Am29LV160D Am29LV160D的逻辑框图和引脚端功能见下表所示。的逻辑框图和引脚端功能见下表所示。05:50392Am29LV160D引脚功能未连接。空脚未连接。空脚NCNC器件地器件地地地VSSVSS3V3V电源电压输入电

517、源电压输入电源电源VCCVCC就绪就绪/ /忙标志,忙标志,SO-44SO-44封装无此引脚端封装无此引脚端输出输出RY/BY#RY/BY#硬件复位引脚端,低电平有效硬件复位引脚端,低电平有效输入输入RESET#RESET#写使能,低电平有效,控制写操作写使能,低电平有效,控制写操作输入输入WE#WE#输出使能。输出使能。OE#OE#为低电平时,输出有效为低电平时,输出有效输入输入OE#OE#片选。当片选。当CE#CE#为低电平时,芯片有效为低电平时,芯片有效输入输入CE#CE#选择选择8bit 8bit 或者或者16bit 16bit 模式模式输入输入BYTE#BYTE#在字模式,在字模式,

518、DQ15DQ15为为数据输入数据输入/ /输出;在输出;在字节模式,字节模式,A-1A-1为为 LSBLSB地址输入地址输入输入输入/ /输出输出DQ15/A-1DQ15/A-1数据输入数据输入/ /输出输出输入输入/ /输出输出DQ14DQ14DQ0DQ0地址输入地址输入, ,提供存储器地址提供存储器地址输入输入A19A19A0A0功能功能类型类型引脚引脚Am29LV160D的逻辑框图的逻辑框图05:503934.3.2S3C2410A与NORFlash的接口电路 S3C2410AS3C2410A与与Am29LV160DAm29LV160D的接口电路如图的接口电路如图4.3.24.3.2所示

519、。所示。FlashFlash存存储器在系统中通常用于储器在系统中通常用于存放程序代码存放程序代码,系统上电或复位后从此,系统上电或复位后从此获取指令并开始执行获取指令并开始执行, ,因此因此, ,应将存有程序代码的应将存有程序代码的FlashFlash存储器配存储器配置到置到Bank0Bank0, ,即将即将S3C2410AS3C2410A的的nGCS0nGCS0接至接至Am29LV160DAm29LV160D的的CECE(nCE)(nCE)端。端。Am29LV160DAm29LV160D的的OEOE(nOE)(nOE)端接端接S3C2410XS3C2410X的的nOEnOE;WEWE(nXE

520、nXE)端端S3C2410XS3C2410X的的nWEnWE相连相连; ;地址总线地址总线A19A19A0A0与与S3C2410XS3C2410X的地址总线的地址总线ADDR20ADDR20ADDR1ADDR1(A20(A20A1)A1)相连相连;16;16位数据总线位数据总线DQ15DQ15DQ0DQ0与与S3C2410XS3C2410X的低的低1616位数据总线位数据总线DATA15DATA15DATA0DATA0(D15(D15D0)D0)相连。相连。 注意注意: :此时应将此时应将BWSCONBWSCON中的中的DW0DW0置为置为01,01,即选即选1616位总线方式。位总线方式。0

521、5:50394S3C2410A与Am29LV160D的接口电路05:50395S3C2410A与28F128J3A的接口 如需大容量如需大容量NOR Flash,NOR Flash,可用可用28F128J3A28F128J3A(128M)(128M)、28F640J3A28F640J3A (64M)(64M)、28F320J3A28F320J3A(32M)(32M)等等NOR FlashNOR Flash存储器芯片存储器芯片 S3C2410A S3C2410A与与28F128J3A28F128J3A的接口电路如图的接口电路如图4.3.34.3.3所示。所示。S3C2410XS3C2410X的的

522、nGCS0nGCS0接至接至28F128J3A28F128J3A的的CE0CE0(nCEnCE)端。)端。28F128J3A28F128J3A的的OEOE(nOEnOE)端接)端接S3C2410XS3C2410X的的nOEnOE;WEWE(nWEnWE)端)端S3C2410XS3C2410X的的nWEnWE相相连;地址总线连;地址总线A24A24A1A1与与S3C2410XS3C2410X的地址总线的地址总线ADDR24ADDR24ADDR1ADDR1(A24A24A1A1)相连,)相连,A0A0直接接地;直接接地;1616位数据总线位数据总线DQ15DQ15DQ0DQ0与与S3C2410XS

523、3C2410X的低的低1616位数据总线位数据总线DATA15DATA15DATA0DATA0(D15D15D0D0)相连。)相连。05:50396S3C2410A与28F128J3A的接口电路05:503974.4NANDFlash接口电路 4.4.14.4.1S3C2410AS3C2410ANANDNANDFlashFlash控制器控制器4.4.24.4.2S3C2410AS3C2410A与与NANDNANDFlashFlash存储器的接口电路存储器的接口电路 05:503984.4.1S3C2410ANANDFlash控制器1 1S3C2410A NAND FlashS3C2410A N

524、AND Flash控制器特性控制器特性 S3C2410A S3C2410A可以在一个可以在一个外部外部NAND FlashNAND Flash存储器上存储器上执行启动代码执行启动代码。为了支持为了支持NAND FlashNAND Flash的启动装载(的启动装载(boot loaderboot loader),),S3C2410AS3C2410A配配置了一个置了一个“SteppingstoneSteppingstone”的的内部内部SRAMSRAM缓冲器缓冲器。当系统启动时,。当系统启动时,NAND FlashNAND Flash存储器的存储器的前前4KB4KB被自动被自动加载加载到到Step

525、pingstoneSteppingstone中,然中,然后系统后系统自动执行自动执行这些载入的启动代码。这些载入的启动代码。 在一般情况下,启动代码将在一般情况下,启动代码将复制复制NANDNAND Flash Flash的内容到的内容到SDRAMSDRAM中。中。使用使用S3C2410AS3C2410A内部硬件内部硬件ECCECC功能功能对对NAND FlashNAND Flash的数据的有效性进的数据的有效性进行检查。复制完成后,在行检查。复制完成后,在SDRAMSDRAM中中执行执行主程序。主程序。05:50399NAND Flash控制器特性 NAND Flash NAND Flash

526、控制器具有以下控制器具有以下特性特性: NAND FlashNAND Flash模式:支持模式:支持读读/ /擦除擦除/ /编程编程NAND FlashNAND Flash存储器存储器; ; 自动启动自动启动模式:复位后,启动代码被传送到模式:复位后,启动代码被传送到模式:复位后,启动代码被传送到模式:复位后,启动代码被传送到SteppingstoneSteppingstoneSteppingstoneSteppingstone中中中中, , , ,启动代码在启动代码在启动代码在启动代码在SteppingstoneSteppingstoneSteppingstoneSteppingstone中

527、执行中执行中执行中执行; ; ; ; 具有具有具有具有硬件硬件ECCECC产生模块产生模块产生模块产生模块( ( ( (硬件生成校验码和通过软件校验硬件生成校验码和通过软件校验硬件生成校验码和通过软件校验硬件生成校验码和通过软件校验);););); 在在在在NAND FlashNAND FlashNAND FlashNAND Flash启动后,启动后,启动后,启动后,Steppingstone 4KBSteppingstone 4KBSteppingstone 4KBSteppingstone 4KB内部内部内部内部SRAMSRAMSRAMSRAM缓冲器缓冲器缓冲器缓冲器可作为可作为可作为可作

528、为其他用途其他用途使用使用使用使用; ; ; ; NAND FlashNAND FlashNAND FlashNAND Flash控制器控制器控制器控制器不能不能通过通过通过通过DMADMA访问,可以使用访问,可以使用访问,可以使用访问,可以使用LDMLDM/ / / /STMSTM指令指令指令指令来代替来代替来代替来代替DMADMADMADMA操作。操作。操作。操作。05:504002.S3C2410A NAND Flash控制器结构NAND FlashNAND Flash控制器内部结构方框图控制器内部结构方框图05:50401NAND Flash的操作模式05:50402NAND Flas

529、h的自动启动模式的时序 NAND Flash NAND Flash控制器的内部结构方框图如图控制器的内部结构方框图如图4.4.14.4.1所示。所示。NAND NAND FlashFlash的工作模式如图的工作模式如图4.4.24.4.2所示。所示。 自动启动模式的时序如下:自动启动模式的时序如下: (1 1)完成)完成复位复位; (2 2)当)当自动启动模式自动启动模式使能时,首先将使能时,首先将NAND FlashNAND Flash存储器的存储器的前前4 4 KBKB内容内容自动自动复制复制到到Steppingstone 4KBSteppingstone 4KB内部内部缓冲器缓冲器中;中

530、; (3 3)SteppingstoneSteppingstone映射到映射到nGCSOnGCSO; (4 4)CPUCPU开始开始执行执行在在Steppingstone 4KBSteppingstone 4KB内部缓冲器中的内部缓冲器中的启动启动代码代码。 注意:在自动启动模式,注意:在自动启动模式,不进行不进行ECCECC检测检测。因此,应确保。因此,应确保NAND NAND FlashFlash的前的前4KB4KB不能有位错误。不能有位错误。05:50403NAND Flash模式配置(1 1)利用)利用NFCONFNFCONF寄存器设置寄存器设置NAND FlashNAND Flash

531、配置;配置;(2 2)写)写NAND FlashNAND Flash命令到命令到NFCMDNFCMD寄存器;寄存器;(3 3)写)写NAND FlashNAND Flash地址到地址到NFADDRNFADDR寄存器;寄存器;(4 4)在检查)在检查NAND FlashNAND Flash状态时,利用状态时,利用NFSTATNFSTAT寄存器读寄存器读/ /写数据。在读操作写数据。在读操作之前或者编程操作之后应该检查之前或者编程操作之后应该检查R/nBR/nB信号。信号。NAND FlashNAND Flash准备就绪准备就绪/ /忙忙使能(输出)使能(输出)R/nBR/nBNAND Flash

532、NAND Flash写写使能(输出)使能(输出)nFWEnFWENAND FlashNAND Flash读读使能(输出)使能(输出)nFREnFRENAND FlashNAND Flash芯片芯片使能(输出)使能(输出)nFCEnFCE地址锁存使能(输出)地址锁存使能(输出)ALEALE命令锁存使能(输出)命令锁存使能(输出)CLECLE数据数据/ /命令命令/ /地址输入地址输入/ /输出端口(用数据总线分派)输出端口(用数据总线分派)D7:0D7:0配置配置引脚引脚NAND FlashNAND Flash控制器的引脚配置控制器的引脚配置05:50404NAND Flash存储器的时序NAN

533、D FlashNAND Flash存储器的时序(存储器的时序(TACLSTACLS0 0,TWRPH0TWRPH01 1,TWRPH1TWRPH10 0)05:50405BOOT(启动)和NAND Flash配置(1 1)OM1:0=00b OM1:0=00b 使能使能NAND FlashNAND Flash控制器为控制器为自动启动模式自动启动模式;(2 2)NAND FlashNAND Flash存储器的存储器的页面大小页面大小应该为应该为512512字节字节;(3 3)NCON NAND FlashNCON NAND Flash存储器寻址步选择。存储器寻址步选择。0 0为为3 3步寻址步寻

534、址;1;1为为4 4步步寻址。寻址。05:50406S3C2410A的ECC奇偶校验 在写在写/ /读操作期间,读操作期间,S3C2410AS3C2410A自动生成自动生成512512字节的字节的ECCECC奇偶校奇偶校验码。每个验码。每个512512字节数据的字节数据的ECCECC奇偶校验码由奇偶校验码由3 3字节组成。字节组成。 2424位位ECCECC奇偶校验码奇偶校验码=18=18位行奇偶位行奇偶6 6位列奇偶位列奇偶 ECC ECC生成模块执行以下操作:生成模块执行以下操作:(1 1)当)当MCUMCU写数据到写数据到NANDNAND时,时,ECCECC生成模块产生生成模块产生ECC

535、ECC代码。代码。(2 2)当)当MCUMCU从从NANDNAND读数据时,读数据时,ECCECC生成模块产生生成模块产生ECCECC代码,同时代码,同时用户程序将它与先前写入的用户程序将它与先前写入的ECCECC代码进行比较。代码进行比较。512512字节字节ECCECC奇偶校验码分配表奇偶校验码分配表05:504074.4.2S3C2410A与NANDFlash的接口电路 与与NOR FlashNOR Flash存储器相比,存储器相比,NAND FlashNAND Flash的接口相对的接口相对比较复杂比较复杂。一些嵌入式处理器芯片一些嵌入式处理器芯片内部配置内部配置了专门的了专门的NAN

536、D FlashNAND Flash控制器控制器,如如S3C2410AS3C2410A。 S3C2410A S3C2410A S3C2410A S3C2410A与与与与NAND FlashNAND FlashNAND FlashNAND Flash存储器存储器存储器存储器K9F1208UDM-YCB0K9F1208UDM-YCB0K9F1208UDM-YCB0K9F1208UDM-YCB0接口电路如接口电路如接口电路如接口电路如图图图图4.4.44.4.44.4.44.4.4所示。所示。所示。所示。K9F1208UDM-YCB0K9F1208UDM-YCB0K9F1208UDM-YCB0K9F1

537、208UDM-YCB0的存储容量为的存储容量为的存储容量为的存储容量为64M64M字节字节,数据数据总总总总线宽度为线宽度为线宽度为线宽度为8 8位位,工作电压为,工作电压为,工作电压为,工作电压为2.7V2.7V2.7V2.7V3.6V,3.6V,3.6V,3.6V,采用采用采用采用TSOP-48TSOP-48TSOP-48TSOP-48封装。仅需封装。仅需封装。仅需封装。仅需单单单单3.3V3.3V3.3V3.3V电压即可完成在系统的编程与擦除操作,引脚端功能如电压即可完成在系统的编程与擦除操作,引脚端功能如电压即可完成在系统的编程与擦除操作,引脚端功能如电压即可完成在系统的编程与擦除操作

538、,引脚端功能如表表表表4.4.34.4.34.4.34.4.3所示。更多的内容请登录所示。更多的内容请登录所示。更多的内容请登录所示。更多的内容请登录,查找资料,查找资料,查找资料,查找资料“ “K9F1208U0M-YCB0K9F1208U0M-YCB0K9F1208U0M-YCB0K9F1208U0M-YCB0,K9F1208U0M-YIB0 64MK9F1208U0M-YIB0 64MK9F1208U0M-YIB0 64MK9F1208U0M-YIB0 64M8 Bit NAND 8 Bit NAND 8 Bit NAND 8 Bit NAND Flash MemoryFlash Mem

539、oryFlash MemoryFlash Memory” ”。05:50408S3C2410A与K9F1208UDM-YCB0接口电路05:50409K9F1208UDM的引脚功能器件地器件地接地接地VssVss电源电压电源电压2.7V2.7V3.3V3.3V电源电源VccVcc就绪就绪/ /忙标志信号输出忙标志信号输出输出输出R/nBR/nB写保护信号写保护信号输入输入/WP/WP写有效信号写有效信号输入输入/WE/WE读有效信号读有效信号输入输入/RE/RE芯片使能信号芯片使能信号输入输入/CE/CE地址锁存信号地址锁存信号输入输入ALEALE命令锁存信号命令锁存信号输入输入CLECLE数

540、据输入输出、控制命令和地址的输入数据输入输出、控制命令和地址的输入输入输入/ /输出输出I/O7I/O7I/O0I/O0功能功能类型类型引脚引脚05:50410S3C2410A与K9F1208UDM的接口连接 K9F1208UDM K9F1208UDM的的I/OI/O口既可口既可接收接收和和发送数据发送数据,也可,也可接收地址信接收地址信息息和和控制命令控制命令。CLECLE有效时,锁存在有效时,锁存在I/OI/O口上的是控制命令字;口上的是控制命令字;ALEALE有效时,锁存在有效时,锁存在I/OI/O口上的是地址;口上的是地址;/RE/RE或或/WE/WE有效时,锁存有效时,锁存的是数据。

541、接口的是数据。接口复用复用可可减少总线的数目减少总线的数目,控制,控制较复杂较复杂。利用。利用S3C2410XS3C2410X处理器的处理器的NAND FlashNAND Flash控制器控制器可可解决解决问题。问题。 在图在图4.4.44.4.4中,中,K9F1208UDMK9F1208UDM的的ALEALE和和CLECLE端分别与端分别与S3C2410AS3C2410A的的ALEALE和和CLECLE端连接,端连接,8 8位的位的I/O7-I/O0I/O7-I/O0与与S3C2410AS3C2410A低低8 8位数据总线位数据总线DATA7DATA7DATA0DATA0相连,相连,/WE/

542、WE、/RE/RE和和/CE/CE分别与分别与S3C2410AS3C2410A的的nFWEnFWE、nFREnFRE和和nFCEnFCE相连,相连,R/nBR/nB与与RnBRnB相连,为增加稳定性相连,为增加稳定性R/nBR/nB端口连接端口连接了一个了一个上拉电阻上拉电阻。同时,。同时,S3C2410AS3C2410A的的NCONNCON配置端口必须连接一配置端口必须连接一个上拉电阻。个上拉电阻。05:504114.5SDRAM接口电路 SDRAM SDRAM可可读读/ /写写,不具掉电数据保持,存取,不具掉电数据保持,存取速度高于速度高于FlashFlash存存储器。用于程序运行、储器。

543、用于程序运行、数据数据及及堆栈区堆栈区。系统启动时,。系统启动时,CPUCPU从地址从地址0x00x0处读取处读取启动代码启动代码,系统初始化后,系统初始化后, ,程序代码程序代码调入调入SDRAMSDRAM中运行中运行, ,以以提高提高系统的系统的运行速度运行速度。用户堆栈、运行数据放在。用户堆栈、运行数据放在SDRAMSDRAM中。中。 SDRAM SDRAM在嵌入式系统应用时,必须定时在嵌入式系统应用时,必须定时刷新刷新。要求。要求CPUCPU有刷新有刷新控制逻辑,或在外加刷新控制逻辑电路。控制逻辑,或在外加刷新控制逻辑电路。S3C2410XS3C2410X及一些及一些ARMARM芯芯片

544、片内有独立的片片内有独立的SDRAMSDRAM刷新控制逻辑刷新控制逻辑. .某些某些ARMARM没有刷新控制逻辑,没有刷新控制逻辑,不能直接与不能直接与SDRAMSDRAM接口。接口。 目前常用的目前常用的SDRAMSDRAM为为8 8位位/16/16位的数据宽度,工作电压一般为位的数据宽度,工作电压一般为3.3V3.3V。主要的生产厂商为。主要的生产厂商为HYUNDAIHYUNDAI,WinbondWinbond等,同类型器件一等,同类型器件一般具有相同的电气特性和封装形式,可以通用。般具有相同的电气特性和封装形式,可以通用。05:50412S3C2410X与HY57V561620接口电路0

545、5:50413HY57V561620引脚功能空脚。未连接空脚。未连接NCNC输出缓冲器电源地输出缓冲器电源地电源地电源地VDDQ/VSSQVDDQ/VSSQ内部电路及输入缓冲器电源地内部电路及输入缓冲器电源地电源地电源地VDD/VSSVDD/VSS数据总线。数据输入数据总线。数据输入/ /输出输出输入输入/ /输出输出DQ15DQ15DQ0DQ0数据数据I/OI/O屏蔽。在读模式下控制输出缓冲屏蔽。在读模式下控制输出缓冲; ;在写模式下屏蔽输入数据在写模式下屏蔽输入数据输入输入LDQMLDQM,UDQMUDQM写使能。使能写信号和允许列改写写使能。使能写信号和允许列改写,/WE,/WE和和/C

546、AS/CAS有效时开始锁存数据有效时开始锁存数据输入输入/WE/WE列地址锁存。时钟沿和列地址锁存。时钟沿和/CAS/CAS有效时,锁存列地址,允许列的访问有效时,锁存列地址,允许列的访问输入输入/CAS/CAS行地址锁存。时钟沿和行地址锁存。时钟沿和/RAS/RAS有效时,锁存行地址,允许行的访问有效时,锁存行地址,允许行的访问和改写和改写输入输入/RAS/RAS地址总线。行地址:地址总线。行地址:A12A12A0A0;列地址:;列地址:A8A8A0A0输入输入A12A12A0A0组地址选择。用于片内组地址选择。用于片内4 4个组的选择个组的选择输入输入BAOBAO,BA1BA1片选。禁止或

547、使能除片选。禁止或使能除CLKCLK、 CKECKE和和DQMDQM外的所有输入信号外的所有输入信号输入输入/CS/CS时钟使能,片内时钟信号控制时钟使能,片内时钟信号控制输入输入CKECKE时钟,芯片时钟输入。所有的输入中时钟,芯片时钟输入。所有的输入中CLKCLK的上升沿有效的上升沿有效输入输入CLKCLK功能功能类型类型引脚引脚05:50414HY57V561620 SDRAM存储器 HY57V561620 HY57V561620存储容量为存储容量为4 4组组64M64M位,工作电压为位,工作电压为3.3V3.3V,常,常见封装为见封装为TSOP-54TSOP-54,兼容,兼容LVTTL

548、LVTTL接口,支持自动刷新(接口,支持自动刷新(Auto-Auto-RefreshRefresh)和自刷新()和自刷新(Self-RefreshSelf-Refresh),),1616位数据宽度。位数据宽度。HY57V561620HY57V561620引脚功能如表引脚功能如表4.4.44.4.4所示。更多的内容请登录所示。更多的内容请登录,查找资料,查找资料“HY57V561620(L)T 4Banks x 4M x HY57V561620(L)T 4Banks x 4M x 16Bit Synchronous DRAM16Bit Synchronous DRAM”。05:50415S3C2

549、410A与两片HY57V561620并联 根据系统需求,可构建根据系统需求,可构建1616位或位或3232位的位的SDRAMSDRAM存储器系统,本存储器系统,本设计采用设计采用3232位的位的SDRAMSDRAM存储器系统。存储器系统。HY57V561620HY57V561620为为1616位数据宽位数据宽度,度,单片容量为单片容量为32MB32MB,系统选用两片,系统选用两片HY57V561620HY57V561620并联构建并联构建3232位位的的SDRAMSDRAM存储器系统,共存储器系统,共64MB64MB的的SDRAMSDRAM空间空间,可满足嵌入式操作,可满足嵌入式操作系统及各种

550、相对较复杂的算法的运行要求。与系统及各种相对较复杂的算法的运行要求。与FlashFlash存储器相比,存储器相比,SDRAMSDRAM的的控制信号较多控制信号较多,其连接电路也要相对,其连接电路也要相对复杂复杂一些。一些。 两片两片HY57V561620HY57V561620并联构建并联构建3232位的位的SDRAMSDRAM存储器系统,其中一存储器系统,其中一片为片为高高1616位位, ,另一片为另一片为低低1616位位, ,两片两片HY57V561620HY57V561620为一个整体配置为一个整体配置到到Bank6Bank6即将即将S3C2410XS3C2410X的的nGCS6nGCS6

551、接至两片接至两片HY57V561620HY57V561620的的/CS/CS端。端。 高位高位HY57V561620HY57V561620的的CLKCLK端连接到端连接到S3C2410XS3C2410X的的SCLK1SCLK1端,低位端,低位HY57V561620HY57V561620的的CLKCLK端连接到端连接到S3C2410XS3C2410X的的SCLK0SCLK0端;端;05:50416S3C2410A与两片HY57V561620并联 两片两片HY57V561620HY57V561620的的CKECKE端连接到端连接到S3C2410XS3C2410X的的SCKESCKE端;端; 两片两

552、片HY57V561620HY57V561620的的/RAS/RAS、/CAS/CAS. ./WE/WE端分别连接到端分别连接到S3C2410XS3C2410X的的nSDRASnSDRAS端、端、nSDCASnSDCAS端、端、nDWEnDWE端;端; 两片两片HY57V561620HY57V561620的的A12A12A0A0连接到连接到S3C2410XS3C2410X的地址总线的地址总线ADDR14ADDR14ADDR2ADDR2(A14A14A2A2);); 两片两片HY57V561620HY57V561620的的BA1BA1、BA0BA0连接到连接到S3C2410XS3C2410X的地址

553、总线的地址总线ADDR25ADDR25(A25A25)、)、ADDR24ADDR24(A24A24);); 高高1616位片的位片的DQ15DQ15DQ0DQ0连接到连接到S3C2410XS3C2410X的数据总线的高的数据总线的高1616位位DATA31DATA31DATA16DATA16(D31D31D16D16),低),低1616位片的位片的DQ15DQ15DQ0DQ0连接到连接到S3C2410XS3C2410X的数据总线的低的数据总线的低1616位位DATA15DATA15DATA0DATA0(D15D15D0D0);); 高高1616位片的位片的UDQMUDQM、LDQMLDQM分别

554、连接分别连接S3C2410XS3C2410X的的nWEB3nWEB3、nWEB2nWEB2,低低1616位片的位片的UDQMUDQM、LDQMLDQM分别连接到分别连接到S3C2410XS3C2410X的的nWEB1nWEB1、nWEB0nWEB0。注意注意: :此时应将此时应将BWSCONBWSCON中的中的DW6DW6置为置为10,10,即选择即选择3232位总线方式。位总线方式。05:504174.6CF卡接口电路 4.6.14.6.1PCMCIAPCMCIA接口规范接口规范4.6.24.6.2S3C2410AS3C2410A的的CFCF卡接口电路卡接口电路4.6.34.6.3CFCF卡

555、的读卡的读/ /写操作写操作 05:504184.6.1PCMCIA接口规范 1990 1990年年9 9月,月,PCMCIAPCMCIA(PCPC机内存卡机内存卡国际联合会)推出了国际联合会)推出了PCMCIA 1.0PCMCIA 1.0规范,该规范是针对各类存储卡或虚拟盘设计的,规范,该规范是针对各类存储卡或虚拟盘设计的,其目的是为了建立一个物理尺寸较小、低功耗的、灵活的存储其目的是为了建立一个物理尺寸较小、低功耗的、灵活的存储卡标准,采用卡标准,采用1616位体系结构,位体系结构, JEIDA 68JEIDA 68引脚的接口。引脚的接口。19911991年,年,PCMCIAPCMCIA推

556、出了推出了2.02.0规范规范,添加了对,添加了对I/OI/O设备的设备的规范规范,以方便用户,以方便用户扩展扩展I/OI/O设备,但接口仍采用与设备,但接口仍采用与1.01.0规范兼容的规范兼容的6868引脚的接口;引脚的接口;同时,同时,PCMCIAPCMCIA对其驱动程序的架构也作了规范,以便于软件开对其驱动程序的架构也作了规范,以便于软件开发人员开发的发人员开发的驱动程序驱动程序可以相互兼容。随着多媒体和高速网络可以相互兼容。随着多媒体和高速网络的发展,的发展,PCMCIAPCMCIA又开发了又开发了3232位的位的CardBUSCardBUS。现在,基于现在,基于PCMCIAPCMC

557、IA的的设备已经在设备已经在笔记本电脑笔记本电脑、数码相机数码相机、机顶盒机顶盒、车载设备车载设备、手持、手持设备、设备、PDAPDA等方面被广泛的采用。越来越多的产品都需要接口具等方面被广泛的采用。越来越多的产品都需要接口具有可扩展模块化的功能,因此有可扩展模块化的功能,因此PCMCIAPCMCIA也将自己的目标定位为也将自己的目标定位为“发展模块化外设的标准,并将他们推广到全世界发展模块化外设的标准,并将他们推广到全世界”。05:50419PCMCIA接口规范 PCMCIA PCMCIA物理上定义了物理上定义了6868个引脚个引脚,卡片有,卡片有1616位位和和3232位位之分。之分。16

558、16位位的的PCMCIAPCMCIA卡通常叫卡通常叫PCCardPCCard,其时序和其时序和ISAISA总线类似,速度较慢。总线类似,速度较慢。采用采用3232位位PCMCIAPCMCIA标准的称做标准的称做CardBusCardBus卡,其运行频率达到卡,其运行频率达到3333MHzMHz,可以满足一般可以满足一般局域网局域网及及宽带宽带应用的要求。应用的要求。CardBusCardBus接口的信号接口的信号传输协议起源于传输协议起源于PCIPCI局部总线局部总线信号传输协议,支持以任何组合形信号传输协议,支持以任何组合形式实现多个总线功能。总线主控功能可为处理器分担任务,有式实现多个总线

559、功能。总线主控功能可为处理器分担任务,有利于在多任务环境中改善系统的吞吐量。利于在多任务环境中改善系统的吞吐量。CardBusCardBus卡可以在卡可以在移动移动环境环境下应用。下应用。PCMCIAPCMCIA接口和系统总线接口通常需要一个接口和系统总线接口通常需要一个HBAHBA(Host Bus AdepterHost Bus Adepter)运行转换,这个运行转换,这个HBAHBA可以是一个可以是一个芯片芯片,也可以是一些也可以是一些逻辑逻辑。PCMCIAPCMCIA卡可以支持卡可以支持5 5V V和和3.33.3V V的供电的供电电压电压,PCMCIAPCMCIA规范中采用规范中采用

560、电压敏感电压敏感VSVS(Voltage SenseVoltage Sense)信号识别插入信号识别插入的的PCMCIAPCMCIA卡的工作电压。卡的工作电压。05:50420PCMCIA接口规范 PCMCIA PCMCIA PCMCIA PCMCIA卡可以分为卡可以分为卡可以分为卡可以分为I I I I型(型(型(型(TYPEITYPEITYPEITYPEI)、)、)、)、IIIIIIII型(型(型(型(TYPEIITYPEIITYPEIITYPEII)、)、)、)、IIIIIIIIIIII型型型型(TYPEIIITYPEIIITYPEIIITYPEIII)、)、)、)、扩展扩展扩展扩展TY

561、PEITYPEITYPEITYPEI和扩展和扩展和扩展和扩展TYPEII TYPEII TYPEII TYPEII 5 5种种,其中,其中,其中,其中I I I I型型型型IIIIIIIIIIII型型型型PCMCIAPCMCIAPCMCIAPCMCIA卡的外形尺寸为卡的外形尺寸为卡的外形尺寸为卡的外形尺寸为85.6085.6085.6085.60mmmmmmmm54.00mm54.00mm54.00mm54.00mm,卡的厚度分别为卡的厚度分别为卡的厚度分别为卡的厚度分别为3.33.33.33.3mmmmmmmm、5.0mm5.0mm5.0mm5.0mm和和和和10.510.510.510.5

562、mmmmmmmm。而扩展而扩展而扩展而扩展TYPEITYPEITYPEITYPEI和扩展和扩展和扩展和扩展TYPEIITYPEIITYPEIITYPEII的的的的PCMCIAPCMCIAPCMCIAPCMCIA卡卡卡卡可以兼容某些尺寸较大的接口,如可以兼容某些尺寸较大的接口,如可以兼容某些尺寸较大的接口,如可以兼容某些尺寸较大的接口,如RJ45RJ45接口接口等。等。等。等。PCMCIAPCMCIAPCMCIAPCMCIA规范里一共定义了规范里一共定义了规范里一共定义了规范里一共定义了6 6类类PCMCIAPCMCIAPCMCIAPCMCIA内存卡内存卡,分别是,分别是,分别是,分别是内存卡内

563、存卡、I/OI/O卡卡(内存或(内存或(内存或(内存或I/OI/OI/OI/O)、)、)、)、硬盘硬盘ATAATA(AT Attachment for IDE AT Attachment for IDE AT Attachment for IDE AT Attachment for IDE driversdriversdriversdrivers)接口、接口、接口、接口、DMADMA(Direct Memory AccessDirect Memory AccessDirect Memory AccessDirect Memory Access)接口、接口、接口、接口、AIMSAIMS(Auto

564、-Indexing Mass StorageAuto-Indexing Mass StorageAuto-Indexing Mass StorageAuto-Indexing Mass Storage)和和和和3232位位PCPC卡卡接口接口接口接口CardBusCardBusCardBusCardBus。05:504214.6.2S3C2410A的CF卡接口电路 CFCF卡卡接口采用接口采用5050个引脚个引脚,IIII型卡并完全符合型卡并完全符合PCMCIAPCMCIA电气和机电气和机械接口规格(械接口规格(PCMCIAPCMCIA卡为卡为6868个引脚),同时支持个引脚),同时支持3.3

565、3.3V V和和5 5V V的电的电压。在压。在5050个引脚中,其中有个引脚中,其中有1616根数据线根数据线、1111根地址线根地址线(在(在TureIDETureIDE模式下仅用模式下仅用3 3根地址线)、根地址线)、2 2根寄存器组选择信号线根寄存器组选择信号线(CS0CS0和和CS1CS1)、)、数据的读写线(数据的读写线(IORDIORD和和IOWRIOWR)、)、1 1根中断信号请根中断信号请求线(求线(INTRQINTRQ)和和1 1根复位线(根复位线(RESETRESET)。)。CFCF卡可以工作在卡可以工作在1616位或位或者者8 8位数据总线方式。若选择位数据总线方式。若

566、选择8 8位工作方式,位工作方式,CS1CS1固定接于高电平,固定接于高电平,CS0CS0低电平有效。低电平有效。INTRQINTRQ用于判断用于判断CFCF卡是否处于读写忙状态。卡是否处于读写忙状态。 与与S3C2410AS3C2410A连接的连接的CFCF卡接口电路如图卡接口电路如图4.6.14.6.1所示。所示。05:50422CF卡接口电路05:504234.6.3CF卡的读/写操作 CF CF卡可以配置工作在卡可以配置工作在存储模式存储模式和和I/OI/O模式模式。CFCF卡使用卡使用标准标准ATAATA命令命令实现存储块的实现存储块的读读/ /写操作写操作。每个。每个存储块存储块包

567、含包含512512字节字节,在访,在访问问CFCF卡之前,必须进行初始化操作。初始化过程包括卡之前,必须进行初始化操作。初始化过程包括GPIOGPIO配置、配置、卡检测和复位。卡检测和复位。 (1 1)存储模式访问)存储模式访问 读取卡信息结构读取卡信息结构 卡信息结构包含卡信息结构包含CFCF卡的相关信息。卡的相关信息。 写存储块写存储块 CFCF卡存储器一般采用卡存储器一般采用Nand FlashNand Flash,需要使用需要使用ATAATA命令来完成读命令来完成读/ /写操作。写操作。CFCF卡采用块方式进行读卡采用块方式进行读/ /写操作,每块写操作,每块的大小为的大小为51251

568、2字节,写数据的操作步骤如下:字节,写数据的操作步骤如下: (a a)写块数到扇区计数器寄存器;写块数到扇区计数器寄存器; (b b)写写LBALBA地址;地址; (c c)发送发送0 0x30x30命令来启动传输。命令来启动传输。05:50424存储模式访问 当当CFCF卡接收到该命令后,将会使能卡接收到该命令后,将会使能DRQDRQ信号并清除信号并清除BSYBSY信号,信号,等待主机写入数据,规定的数据写完后等待主机写入数据,规定的数据写完后DRQDRQ会被清除。会被清除。 读存储块读存储块 与写存储块大致相同,只是命令不一样,下面与写存储块大致相同,只是命令不一样,下面是一个典型的操作序

569、列:是一个典型的操作序列: (a a)写块数到扇区计数器寄存器;写块数到扇区计数器寄存器; (b b)写写LBALBA地址;地址; (c c)发送发送0 0x20x20命令来启动传输。命令来启动传输。 当当CFCF卡接收到该命令后,将会使能卡接收到该命令后,将会使能DRQDRQ信号并清除信号并清除BSYBSY信号,信号,等待主机读出数据,当规定的数据写完后等待主机读出数据,当规定的数据写完后DRQDRQ将会被清除。将会被清除。05:50425(2)I/O模式访问(2 2)I/OI/O模式访问模式访问 配置配置CFCF卡工作在卡工作在I/OI/O模式模式 可以通过可以通过CFCF卡的配置寄存器将

570、其卡的配置寄存器将其配置为配置为I/OI/O模式。模式。 写存储块写存储块 I/OI/O模式下写存储块与存储模式类似,惟一的区模式下写存储块与存储模式类似,惟一的区别就是需要使用正确的地址空间,步骤如下:别就是需要使用正确的地址空间,步骤如下: (a a)写块数到扇区计数器寄存器;写块数到扇区计数器寄存器; (b b)然后写然后写LBALBA地址;地址; (c c)发送发送0 0x30x30命令来启动传输。命令来启动传输。 读存储块读存储块 I/OI/O模式下读存储块步骤如下:模式下读存储块步骤如下: (a a)写块数到扇区计数器寄存器;写块数到扇区计数器寄存器; (b b)然后写然后写LBA

571、LBA地址;地址; (c c)发送发送0 0x20x20命令来启动传输。命令来启动传输。 05:504264.7SD卡接口电路 4.7.14.7.1SDSD卡的接口规范卡的接口规范4.7.24.7.2S3C2410AS3C2410A的的SDSD卡接口电路卡接口电路 05:504272.7.1SD卡的接口规范 SD SD存储卡兼容存储卡兼容MMCMMC卡接口规范,采用卡接口规范,采用9 9芯的接口芯的接口(CLKCLK为时钟为时钟线,线,CMDCMD为命令响应线,为命令响应线,DAT0-DAT3DAT0-DAT3为双向数据传输线,为双向数据传输线,VDDVDD、Vss1Vss1和和Vss2Vss

572、2为电源和地),最大的工作频率是为电源和地),最大的工作频率是2525MHzMHz,标准标准SDSD的的外形尺寸是外形尺寸是2424mmmm32mm32mm2.1mm2.1mm,SDSD卡的外形和接口如图卡的外形和接口如图4.7.14.7.1所示,所示,SDSD卡引脚定义如表卡引脚定义如表4.7.14.7.1所示。所示。SDSD卡原理图如图卡原理图如图4.7.24.7.2所所示。示。 SD SD卡系统支持卡系统支持SDSD和和SPISPI方式两种通信协议。方式两种通信协议。SDSD卡在结构上使卡在结构上使用用一主多从一主多从星型拓扑结构,拓扑图如图星型拓扑结构,拓扑图如图4.7.34.7.3所

573、示。所示。05:50428SD卡的外形和接口、SD卡原理图05:50429SD卡引脚定义注:类型注:类型S S:电源;电源;I/OI/O:输入输入/ /输出;输出;PPPP:推挽方式推挽方式RSVRSV数据线数据线Bit 2Bit 2I/O/PPI/O/PPDAT2DAT29 9RSVRSV数据线数据线Bit 1Bit 1I/O/PPI/O/PPDAT1DAT18 8数据输出数据输出O/PPO/PPDODO数据线数据线Bit 0Bit 0I/O/PPI/O/PPDAT0DAT07 7接地接地S SVss2Vss2接地接地S SVss2Vss26 6时钟时钟I ISCLKSCLK时钟时钟I IC

574、LKCLK5 5电源电压电源电压S SVDDVDD电源电压电源电压S SVDDVDD4 4接地接地S SVssVss接地接地S SVss1Vss13 3数据输入数据输入I IDIDI命令命令/ /响应响应PPPPCMDCMD2 2片选信号片选信号I ICSCS卡检测卡检测/ /数据线数据线 Bit 3Bit 3I/O/PPI/O/PPCD/DAT3CD/DAT31 1描述描述类型类型名称名称描述描述类型类型名称名称SPISPI模式模式SDSD模式模式引脚引脚05:50430SD卡系统的总线拓扑图05:504314.7.2S3C2410A的SD卡接口电路05:504324.8IDE接口电路 4.

575、8.14.8.1S3C2410AS3C2410A的的IDEIDE接口电路接口电路4.8.24.8.2IDEIDE硬盘读硬盘读/ /写操作写操作 05:504334.8.1S3C2410A的IDE接口电路 IDE IDE采用采用4040线扁平电缆线扁平电缆连接,在连接,在IDEIDE的接口中,的接口中,除了对除了对ATAT总线上的信号作总线上的信号作必要的控制之外,基本上必要的控制之外,基本上是原封不动地送往硬盘驱是原封不动地送往硬盘驱动器。动器。IDEIDE接口电路如图接口电路如图所示。所示。05:504344.8.2IDE硬盘读/写操作 IDE IDE接口是一种任务寄存器结构的接口,所有输入

576、输出操作接口是一种任务寄存器结构的接口,所有输入输出操作均是通过对相应寄存器的读均是通过对相应寄存器的读/ /写完成。一个写完成。一个IDEIDE硬盘驱动器中的硬盘驱动器中的寄存器及地址分配例见表寄存器及地址分配例见表4.8.14.8.1。硬盘驱动器执行命令后的状态。硬盘驱动器执行命令后的状态如表如表4.8.24.8.2状态寄存器所示。状态寄存器所示。 在向硬盘驱动器在向硬盘驱动器发出命令前发出命令前,必须先,必须先检测硬盘驱动器是否忙检测硬盘驱动器是否忙碌碌(D7=1D7=1)。)。如果在规定时间内硬盘驱动器如果在规定时间内硬盘驱动器一直忙碌一直忙碌,则置,则置超超时错时错;否则表示硬盘驱动

577、器;否则表示硬盘驱动器空闲空闲,可,可接收命令接收命令。05:50435IDE硬盘驱动器中的寄存器及地址分配05:50436状态寄存器05:504371.CPU对硬盘写数据操作 如果如果CPUCPU要对硬盘要对硬盘写数据操作写数据操作,首先要把必要的,首先要把必要的参数写入参数写入对对应的应的地址寄存器地址寄存器,等待等待DRDYDRDY有效;然后将有效;然后将操作码操作码写入写入命令寄存命令寄存器器,同时驱动器设置状态寄存器的,同时驱动器设置状态寄存器的DRQDRQ位,表示位,表示准备好准备好接收数据,接收数据,CPUCPU通过通过数据寄存器数据寄存器将数据将数据写入扇区缓冲区写入扇区缓冲区

578、。当扇区缓冲区填满。当扇区缓冲区填满后,驱动器清除后,驱动器清除DRQDRQ位,并置位位,并置位BSYBSY,驱动器将扇区缓冲区中数驱动器将扇区缓冲区中数据写入磁盘。写盘据写入磁盘。写盘结束结束,清除清除BSYBSY位,发中断请求信号位,发中断请求信号DNTRQDNTRQ。CPUCPU接收到中断信号后,读驱动器状态寄存器,同时将中断信号接收到中断信号后,读驱动器状态寄存器,同时将中断信号INTRQINTRQ撤除。撤除。05:504382.CPU对硬盘进行读数据操作 如果如果CPUCPU要对硬盘进行要对硬盘进行读数据操作读数据操作,首先把,首先把参数写入地址寄参数写入地址寄存器存器和和特性寄存器

579、特性寄存器(如果需要)。然后把(如果需要)。然后把命令码命令码写入写入命令寄存命令寄存器器,命令开始执行。这时驱动器置状态寄存器中的,命令开始执行。这时驱动器置状态寄存器中的BSYBSY为为1 1,同,同时将硬盘上指定扇区内的时将硬盘上指定扇区内的数据送入扇区缓冲区数据送入扇区缓冲区。当扇区缓冲区。当扇区缓冲区准备好数据后,置位准备好数据后,置位DRQDRQ,清清BSYBSY,发中断请求信号发中断请求信号INTRQINTRQ。CPUCPU检测到中断后,读取状态寄存器,测试检测到中断后,读取状态寄存器,测试ERRERR位,若等于位,若等于1 1;则转;则转入出错处理;否则入出错处理;否则DRQD

580、RQ位为位为1 1,CPUCPU从扇区缓冲区读取数据。数据从扇区缓冲区读取数据。数据读完后,驱动器复位读完后,驱动器复位DRQDRQ位,驱动器重新设置位,驱动器重新设置BSYBSY位。位。05:504393.操作过程(1 1)硬盘的初始化)硬盘的初始化 通过向通过向RESETRESET引脚发送一个低跳变来实现,可以按照如下代码来完成:引脚发送一个低跳变来实现,可以按照如下代码来完成:* * * *(P_U8) IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;(P_U8) IDE_CONTROL_ADDR)=ide_ctrl_value |

581、IDE_CONTROL_RST;(P_U8) IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;(P_U8) IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;Delay(100);Delay(100);Delay(100);Delay(100);/* /* /* /* 产生负跳变产生负跳变产生负跳变产生负跳变 */*/*/*/* * * *(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value &(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_val

582、ue &(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value &(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value &IDE_CONTROL_RST;IDE_CONTROL_RST;IDE_CONTROL_RST;IDE_CONTROL_RST;Delay(200);Delay(200);Delay(200);Delay(200);/* /* /* /* 恢复成正常操作恢复成正常操作恢复成正常操作恢复成正常操作 */ */ */ */* * * *(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONT

583、ROL_RST;(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;(P_U8)IDE_CONTROL_ADDR)=ide_ctrl_value | IDE_CONTROL_RST;Delay(100);Delay(100);Delay(100);Delay(100);05:50440(2)读扇区操作(2 2)读扇区操作)读扇区操作 硬盘扇区读操作有以下几个步骤:硬盘扇区读操作有以下几个步骤: 主机设置扇区读操作的一些参

584、数主机设置扇区读操作的一些参数 如扇区数、扇区号、磁道号、柱面号如扇区数、扇区号、磁道号、柱面号及驱动器号。及驱动器号。 Outp(REG_SECTOR_COUNT,sec_cnt) Outp(REG_SECTOR_COUNT,sec_cnt); Outp(REG_SECTOR_NUMBER,sec_num) Outp(REG_SECTOR_NUMBER,sec_num); Outp(REG_CYLINDER_LOW,clyn&0x00ff) Outp(REG_CYLINDER_LOW,clyn&0x00ff); Outp(REG_CYLINDER_HIGH,(clyn 8)&0x00ff)

585、Outp(REG_CYLINDER_HIGH,(clyn 8)&0x00ff); Outp(REG_DRIVE_HEAD,0xa0|(head&0x0f) Outp(REG_DRIVE_HEAD,0xa0|(head&0x0f); /CHS/CHS模式和主设模式和主设 主机发送读请求命令主机发送读请求命令 Outp(REG_COMMAND,IDE_CMD_READ_SECTORS); Outp(REG_COMMAND,IDE_CMD_READ_SECTORS);05:50441读扇区操作 判断硬盘数据就绪:判断硬盘数据就绪:硬盘在收到命令后开始准备数据,并将硬盘在收到命令后开始准备数据,并将B

586、USYBUSY置位,置位,就绪后将清除就绪后将清除BUSYBUSY位,并且将位,并且将DRQDRQ置位。置位。 do do status=inp(REG_STATUS); status=inp(REG_STATUS); If(!(status&IDE ST BUSY)&(status & IDE_ST_DRQ)break; If(!(status&IDE ST BUSY)&(status & IDE_ST_DRQ)break; while(status & IDE_ST_BUSY); while(status & IDE_ST_BUSY); 主机读取数据主机读取数据 for(index=0;i

587、ndex!=512;index+=2)for(index=0;index!=512;index+=2)* *p_buffer=inw(REG_DATA);p_buffer=inw(REG_DATA);P_buffer+ ;P_buffer+ ; 读下一个扇区读下一个扇区05:50442(3)写扇区操作 硬盘扇区写操作有以下几个步骤:硬盘扇区写操作有以下几个步骤: 主机设置扇区读操作的一些参数,如扇区数、扇区号、磁主机设置扇区读操作的一些参数,如扇区数、扇区号、磁道号、柱面号及驱动器号。道号、柱面号及驱动器号。 主机发送写请求命令。主机发送写请求命令。 检查硬盘就绪:硬盘在收到命令且就绪后将检查

588、硬盘就绪:硬盘在收到命令且就绪后将DRQDRQ置位。置位。 主机写一个扇区的数据到硬盘缓冲区。主机写一个扇区的数据到硬盘缓冲区。 硬盘在收到一个扇区的数据后,清除硬盘在收到一个扇区的数据后,清除BUSYBUSY位,并且将位,并且将DRQDRQ置位从而将数据从缓冲区写到磁盘上。置位从而将数据从缓冲区写到磁盘上。 一个扇区写完毕后,若还有数据需要传送,硬盘会将一个扇区写完毕后,若还有数据需要传送,硬盘会将DRQDRQ重新置位,主机重复第重新置位,主机重复第4 4步操作,直到结束。步操作,直到结束。05:50443(4)格式化扇区操作 格式化扇区格式化扇区操作主要有以下步骤:操作主要有以下步骤: 主

589、机主机设置扇区读操作设置扇区读操作的一些的一些参数参数,如,如扇区数扇区数、扇区号扇区号、磁磁道号道号、柱面号柱面号及及驱动器号驱动器号; ; 主机发送主机发送格式化格式化请求请求命令命令; ; 检查检查硬盘就绪硬盘就绪:硬盘在收到命令且就绪后,将:硬盘在收到命令且就绪后,将DRQDRQ置位置位; ; 主机写一个扇区的主机写一个扇区的数据数据到到硬盘缓冲区硬盘缓冲区; ; 硬盘在收到一个扇区的数据后,硬盘在收到一个扇区的数据后,清除清除BUSYBUSY位位,并且将,并且将DRQDRQ置位从而将置位从而将数据数据从缓冲区从缓冲区写到磁盘上写到磁盘上; ; 一个扇区写完毕后,若还有扇区需要格式化,

590、硬盘会将一个扇区写完毕后,若还有扇区需要格式化,硬盘会将DRQDRQ重新置位,主机重新置位,主机重复第重复第4 4步操作步操作,直到结束直到结束。05:50444ARM9嵌入式系统设计基础教程河南理工大学计算机学院河南理工大学计算机学院通通 信信 工工 程程 系系赵鸿图赵鸿图E-mail: E-mail: TEL: 13513825210TEL: 1351382521005:50445课程理论教学内容安排课程理论教学内容安排第第1 1章章 嵌入式系统基础知识嵌入式系统基础知识第第2 2章章 ARM ARM体系结构体系结构第第3 3章章 32 Bit RISC32 Bit RISC微处理器微处

591、理器S3C2410AS3C2410A第第4 4章章 嵌入式系统的存储器系统嵌入式系统的存储器系统第第5 5章章 嵌入式系统输入嵌入式系统输入/ /输出设备接口输出设备接口第第6 6章章 嵌入式系统总线接口嵌入式系统总线接口第第7 7章章 嵌入式系统网络接口嵌入式系统网络接口第第8 8章章 嵌入式系统嵌入式系统软件及操作系统基础软件及操作系统基础软件及操作系统基础软件及操作系统基础第第9 9章章 ARMARM汇编语言程序设计基础汇编语言程序设计基础第第1010章章 BootloaderBootloader设计基础设计基础第第1111章章 LinuxLinux操作系统基础操作系统基础第第1212章

592、章 嵌入式嵌入式LinuxLinux软件设计软件设计第第1313章章 图形用户接口(图形用户接口(GUIGUI) 05:50446第第5章章嵌入式系统输入嵌入式系统输入/输出设备接口输出设备接口5.1通用输入/输出接口5.2A/D转换器接口 5.3D/A转换器接口5.4键盘与LED数码管接口5.5LCD显示接口5.6触摸屏接口 05:504475.1通用输入/输出接口5.1.15.1.1通用输入通用输入/ /输出接口原理与结构输出接口原理与结构5.1.25.1.2S3C2410AS3C2410A输入输入/ /输出接口编程实例输出接口编程实例 05:504485.1.1通用输入/输出接口原理与结

593、构 GPIO GPIO(General Purpose I/OGeneral Purpose I/O,通用输入通用输入/ /输出接口输出接口)也称为)也称为并行并行I/OI/O(parallel I/Oparallel I/O),是最基本的),是最基本的I/OI/O形式,由一组输入形式,由一组输入引脚、输出引脚或输入引脚、输出引脚或输入/ /输出引脚组成,输出引脚组成,CPUCPU对它们能够进行存对它们能够进行存取操作。有些取操作。有些GPIOGPIO引脚能够通过软件编程改变输入引脚能够通过软件编程改变输入/ /输出方向。输出方向。 一个一个双向双向GPIOGPIO端口端口(D0D0)的简化)

594、的简化功能逻辑图功能逻辑图如图如图5.1.15.1.1所示,所示,图中图中PORTPORT为为数据寄存器数据寄存器和和DDRDDR(Data Direction RegisterData Direction Register)为)为数据数据方向寄存器方向寄存器。05:50449双向GPIO功能逻辑图05:50450双向GPIO工作原理 DDR DDR设置端口的方向。如果设置端口的方向。如果DDRDDR的输出为的输出为1 1,则,则GPIOGPIO端口为端口为输输出出形式;如果形式;如果DDRDDR的输出为零的输出为零,则,则GPIOGPIO端口为端口为输入输入形式。写入形式。写入WR-DDRW

595、R-DDR信号能够改变信号能够改变DDRDDR的输出状态。的输出状态。DDRDDR在微控制器地址空间在微控制器地址空间中是一个映射单元。这种情况下,如果需要改变中是一个映射单元。这种情况下,如果需要改变DDRDDR,则需要将,则需要将恰当的值置于数据总线的第恰当的值置于数据总线的第0 0位(即位(即D0D0),同时激活),同时激活WR-DDRWR-DDR信号。信号。读读DDRDDR,就能得到,就能得到DDRDDR的状态,同时激活的状态,同时激活RD-DDRRD-DDR信号。信号。 如果置如果置PORTPORT引脚为输出,则引脚为输出,则PORTPORT寄存器控制着该引脚端状态。寄存器控制着该引

596、脚端状态。如果将如果将PORTPORT引脚端设置为输入,则此输入引脚端的状态由引脚引脚端设置为输入,则此输入引脚端的状态由引脚端上的逻辑电路层来实现对它的控制。对端上的逻辑电路层来实现对它的控制。对PORTPORT寄存器的写操作,寄存器的写操作,需要激活需要激活WR-PORTWR-PORT信号。信号。PORTPORT寄存器也映射到微控制器的地址空寄存器也映射到微控制器的地址空间。需指出,即使当端口设置为输入时,如果对间。需指出,即使当端口设置为输入时,如果对PORTPORT寄存器进寄存器进行写操作,并不会对该引脚产生影响。但从行写操作,并不会对该引脚产生影响。但从PORTPORT寄存器的读出,

597、寄存器的读出,不管端口是什么方向,总会影响该引脚端的状态。不管端口是什么方向,总会影响该引脚端的状态。05:504515.1.2S3C2410A输入/输出接口编程实例 S3C2410A S3C2410A共有共有117117个多功能复用输入个多功能复用输入/ /输出端口输出端口(I/OI/O口),口),分为分为端口端口A A端口端口H H共共8 8组组。为了满足不同系统设计的需要,每个。为了满足不同系统设计的需要,每个I/OI/O口可以很容易地通过口可以很容易地通过软件软件对进行对进行配置配置。每个引脚的功能必须。每个引脚的功能必须在启动在启动主程序之前主程序之前进行进行定义定义。如果一个引脚。

598、如果一个引脚没有没有使用使用复用功能复用功能,那么它可以配置为那么它可以配置为I/OI/O口口。注意:。注意:端口端口A A除了作为功能口外,只除了作为功能口外,只能够作为能够作为输出口输出口使用。使用。 在在S3C2410AS3C2410A中,中,大多数大多数的引脚端都是的引脚端都是复用复用的,所以对于每一的,所以对于每一个引脚端都个引脚端都需要定义需要定义其其功能功能。为了使用。为了使用I/OI/O口,首先需要定义引口,首先需要定义引脚的功能。每个引脚端的功能通过端口脚的功能。每个引脚端的功能通过端口控制寄存器控制寄存器(PnCONPnCON)来)来定义定义(配置)。与配置(配置)。与配置

599、I/OI/O口相关的寄存器包括:端口口相关的寄存器包括:端口控制寄存控制寄存器器(GPACONGPACONGPHCONGPHCON)、端口)、端口数据寄存器数据寄存器(GPADATGPADATGPHDATGPHDAT)、)、端口端口上拉寄存器上拉寄存器(GPBUPGPBUPGPHUPGPHUP)、)、杂项控制寄存器杂项控制寄存器以及外部以及外部中断控制寄存器中断控制寄存器(EXTINTNEXTINTN)等。)等。05:50452I/O口编程实例A、B寄存器定义 下面介绍一个通过下面介绍一个通过G G口的控制发光二极管口的控制发光二极管LED1LED1和和LED2LED2轮流闪烁轮流闪烁I/OI

600、/O口编程口编程实例。实例。 对对I/OI/O口的操作是通过对相关各个寄存器的读口的操作是通过对相关各个寄存器的读/ /写实现的。要对寄存器进写实现的。要对寄存器进行读行读/ /写操作,首先要对寄存器进行定义。有关写操作,首先要对寄存器进行定义。有关I/OI/O口相关寄存器的宏定义代口相关寄存器的宏定义代码如下:码如下:# #definerGPACONdefinerGPACON( (* *(volatile unsigned*)0x56000000)/Port A(volatile unsigned*)0x56000000)/Port A控制寄存器控制寄存器# #definerGPADATde

601、finerGPADAT( (* *(volati1e unsigned*)0x56000004)/Port A(volati1e unsigned*)0x56000004)/Port A数据寄存器数据寄存器# #definerGPBCONdefinerGPBCON( (* *(volatile unsigned*)0x56000010)/Port B(volatile unsigned*)0x56000010)/Port B控制寄存器控制寄存器# #definerGPBDATdefinerGPBDAT( (* *(volatile unsigned*)0x56000014)/Port B(vo

602、latile unsigned*)0x56000014)/Port B数据寄存器数据寄存器# #definerGPBUPdefinerGPBUP( (* *(volatile unsigned*)0x56000018)/Port B(volatile unsigned*)0x56000018)/Port B上拉电阻禁止上拉电阻禁止寄存器寄存器05:50453C、D寄存器定义# #definerGPCCONdefinerGPCCON( (* *(volatile unsigned*)0x56000020)/Port C(volatile unsigned*)0x56000020)/Port C控

603、制寄存器控制寄存器# #definerGPCDATdefinerGPCDAT( (* *(volatile unsigned*)0x56000024)/Port C(volatile unsigned*)0x56000024)/Port C数据寄存器数据寄存器# #definerGPCUPdefinerGPCUP( (* *(volatile unsigned*)0x56000028)/Port C(volatile unsigned*)0x56000028)/Port C上拉电阻禁止上拉电阻禁止寄存器寄存器# #definerGPDCONdefinerGPDCON( (* *(volatil

604、e unsigned*)0x56000030)/Port D(volatile unsigned*)0x56000030)/Port D控制寄存器控制寄存器# #definerGPDDATdefinerGPDDAT( (* *(volatile unsigned*)0x56000034)/Port D(volatile unsigned*)0x56000034)/Port D数据寄存器数据寄存器# #definerGPDUPdefinerGPDUP( (* *(volatile unsigned*)0x56000038)/Port D(volatile unsigned*)0x56000038

605、)/Port D上拉电阻禁止上拉电阻禁止寄存器寄存器05:50454E、F寄存器定义# #definerGPECONdefinerGPECON( (* *(volatile unsigned*)0x56000040)/Port E(volatile unsigned*)0x56000040)/Port E控制寄存器控制寄存器# #definerGPEDATdefinerGPEDAT( (* *(volatile unsigned*)0x56000044)/Port E(volatile unsigned*)0x56000044)/Port E数据寄存器数据寄存器# #definerGPEUPd

606、efinerGPEUP( (* *(volatile unsigned*)0x56000048)/Port E(volatile unsigned*)0x56000048)/Port E上拉电阻禁止上拉电阻禁止寄存器寄存器# #definerGPFCONdefinerGPFCON( (* *(volatile unsigned*)0x56000050)/Port F(volatile unsigned*)0x56000050)/Port F控制寄存器控制寄存器 # #definerGPFDATdefinerGPFDAT( (* *(volatile unsigned*)0x56000054)/

607、Port F(volatile unsigned*)0x56000054)/Port F数据寄存器数据寄存器# #definerGPFUPdefinerGPFUP( (* *(volatile unsigned*)0x56000058)/Port F(volatile unsigned*)0x56000058)/Port F上拉电阻禁止上拉电阻禁止寄存器寄存器05:50455G、H寄存器定义#definerGPGCON(#definerGPGCON(* *(volati1e unsigned*)0x56000060)/Port G(volati1e unsigned*)0x56000060)/

608、Port G控制寄存控制寄存器器#definerGPGDAT(#definerGPGDAT(* *(volatile unsigned*)0x56000064)/Port G(volatile unsigned*)0x56000064)/Port G数据寄存数据寄存器器#definerGPGUP(#definerGPGUP(* *(volatile unsigned*)0x56000068)/Port G(volatile unsigned*)0x56000068)/Port G上拉电阻上拉电阻禁止寄存器禁止寄存器#definerGPHCON(#definerGPHCON(* *(volati

609、le unsigned*)0x56000070)/Port H(volatile unsigned*)0x56000070)/Port H控制寄存控制寄存器器#definerGPHDAT(#definerGPHDAT(* *(volatile unsigned*)0x56000074)/Port H(volatile unsigned*)0x56000074)/Port H数据寄存数据寄存器器#definerGPHUP(#definerGPHUP(* *(volatile unsigned*)0x56000078)/Port H(volatile unsigned*)0x56000078)/P

610、ort H上拉电阻上拉电阻禁止寄存器禁止寄存器05:50456I/O口编程实例 要想实现对要想实现对G G口的配置,只要在地址口的配置,只要在地址0x5600 00600x5600 0060中给中给3232位的位的每一位赋值就可以了。如果每一位赋值就可以了。如果G G口的某个引脚被口的某个引脚被配置配置为为输出引脚输出引脚,在在PDATGPDATG对应的地址位对应的地址位写入写入1 1时,该引脚时,该引脚输出高电平输出高电平;写入写入0 0时时该该引脚引脚输出低电平输出低电平。如果该引脚被。如果该引脚被配置配置为为功能引脚功能引脚,则该引脚作,则该引脚作为相应的功能引脚使用。为相应的功能引脚使

611、用。 下面是实现下面是实现LED1LED1和和LED2LED2轮流闪烁的程序代码。轮流闪烁的程序代码。05:50457I/O口编程实例void Mainvoid Main(voidvoid) int flag int flag,i i; Target Init Target Init();();/进行硬件初始化操作进行硬件初始化操作, ,包括对包括对I/OI/O口的初始化操作口的初始化操作 for for(;)(;) if if(flag = = 0flag = = 0) for for(i = 0i = 0;i 1000000i 1000000;i+i+);); /延时延时 rGPGCON

612、rGPGCONrGPGCONrGPGCON0xfff0ffff|0x000500000xfff0ffff|0x00050000;/配置第配置第8 8、第第9 9位为输出引脚位为输出引脚 rGPGDAT rGPGDAT rGPGDATrGPGDAT0xeff|0x2000xeff|0x200;/第第8 8位输出为低电平位输出为低电平, ,第第9 9位输出高电平位输出高电平 for for(i = 0i = 0;i 10000000i 10000000;i+i+);); /延时延时 flag = 1 flag = 1; 05:50458I/O口编程实例elseelse for for(i = 0i

613、 = 0;i 1000000i 1000000;i+i+);); /延时延时 rGPGCON rGPGCONrGPGCONrGPGCON0xfff0ffff0xfff0ffff(0x000500000x00050000;/配置第配置第8 8、 / /第第9 9位为输出引脚位为输出引脚 rGPGDAT rGPGDATrGPGDATrGPGDATOxdff | 0x100Oxdff | 0x100; /第第8 8位输出为高电平位输出为高电平 / /第第9 9位输出低电平位输出低电平 for for(i = 0i = 0;i 1000000iViVOVi的情况时,此时,比较器的输出为低电的情况时,此

614、时,比较器的输出为低电平,使计数控制信号平,使计数控制信号C C为为0 0,计数器停止计数。这时候数字输出量,计数器停止计数。这时候数字输出量D7D7D0D0就是就是与模拟电压等效的数字量。计数控制信号由高变低的负跳变也是与模拟电压等效的数字量。计数控制信号由高变低的负跳变也是A/DA/D转换的转换的结束信号,表示已完成一次结束信号,表示已完成一次A/DA/D转换。转换。 计数式计数式A/DA/D转换器结构简单,但转换速度较慢。转换器结构简单,但转换速度较慢。05:504632.双积分式A/D转换器原理 双积分式双积分式A/DA/D转换器对转换器对输入模拟电压输入模拟电压和和参考电压参考电压进

615、行进行两次积分两次积分,将电压变,将电压变换成与其成正比的时间间隔,利用换成与其成正比的时间间隔,利用时钟脉冲时钟脉冲和和计数器计数器测出其测出其时间间隔时间间隔,完成,完成A/DA/D转换转换。双积分式。双积分式A/DA/D转换器主要包括积分器、比较器、计数器和标准电压转换器主要包括积分器、比较器、计数器和标准电压源等部件,其电路结构图如图源等部件,其电路结构图如图5.2.25.2.2(a a)所示。)所示。 双积分式双积分式A/DA/D转换器的转换过程如下:转换器的转换过程如下: 1 1)首先对输入待测的模拟电压)首先对输入待测的模拟电压V Vi i进行进行固定时间的积分固定时间的积分;

616、2 2)然后转换到标准电压)然后转换到标准电压V VR R进行固定斜率的进行固定斜率的反向积分反向积分( (定值积分定值积分) ),如图,如图5.2.2(b)5.2.2(b)所示。反向积分进行到一定时间,便返回起始值。从图所示。反向积分进行到一定时间,便返回起始值。从图5.2.2(b)5.2.2(b)中中可看出对标准电压可看出对标准电压V VR R进行反向积分的时间进行反向积分的时间T T2 2正比于输入模拟电压,输入模拟正比于输入模拟电压,输入模拟电压越大,反向积分回到起始值的时间电压越大,反向积分回到起始值的时间T T越长,有越长,有V Vi i(T(T2 2/T/T1 1)V)VR R。

617、 3 3)用标准时钟脉冲)用标准时钟脉冲测定反向积分时间测定反向积分时间(如(如计数器计数器),就可以得到对应于),就可以得到对应于输入模拟电压的数字量,实现输入模拟电压的数字量,实现A/DA/D转换。转换。 双积分式双积分式A/DA/D转换器有很强的转换器有很强的抗工频干扰抗工频干扰能力能力, ,转换转换精度高精度高, ,但但速度较慢速度较慢。05:50464双积分式A/D转换器电路结构与输出波形双积分式双积分式A/DA/D转换器电路结构图转换器电路结构图积分输出波形积分输出波形05:504653.逐次逼近式A/D转换器原理 逐次逼近式逐次逼近式A/DA/D转换器电路结构如图转换器电路结构如

618、图5.2.35.2.3所示,其工作过程所示,其工作过程可与可与天平称重物类比天平称重物类比,图中的电压比较器相当于天平,被测电,图中的电压比较器相当于天平,被测电压压UxUx相当于重物,基准电压相当于重物,基准电压UrUr相当于电压法码。该方案具有各相当于电压法码。该方案具有各种规格的按种规格的按84218421编码的二进制电压法码编码的二进制电压法码UrUr,根据,根据UxUxUrUrUr,比较器有不同的输出比较器有不同的输出以以打开打开或或关闭关闭逐次逼近逐次逼近寄存器寄存器的的各位各位。输出输出从大到小从大到小的基准的基准电压法码电压法码,与被测电压,与被测电压UxUx比较,并逐渐减比较

619、,并逐渐减小其差值,使之小其差值,使之逼近平衡逼近平衡。当。当UxUx=Ur=Ur时,比较器输出为零,相当时,比较器输出为零,相当于天平平衡,最后以于天平平衡,最后以数字显示数字显示的平衡值即为的平衡值即为被测电压值被测电压值。 逐次逼近式逐次逼近式A/DA/D转换器转换转换器转换速度快速度快,转换,转换精度较高精度较高,对,对N N位位A/DA/D转换只需转换只需N N个时钟脉冲个时钟脉冲即可完成,可用于测量即可完成,可用于测量微秒级微秒级的过渡的过渡过程的变化,是在计算机系统中过程的变化,是在计算机系统中采用最多采用最多的一种的一种A/DA/D转换方法。转换方法。05:50466逐次逼近式

620、A/D转换器电路结构05:504674.A/D转换器的主要指标 (1 1)分辨率)分辨率(ResolutionResolution) 分辨率用来反映分辨率用来反映A/DA/D转换器对输入转换器对输入电压微小变化的响应能力电压微小变化的响应能力,通常用数字输出通常用数字输出最低位最低位(LSBLSB)所对应的)所对应的模拟输入的电平值模拟输入的电平值表示。表示。n n位位A/DA/D转换能反应转换能反应1/21/2n n满量程的模拟输入电平。分辨率直接与转满量程的模拟输入电平。分辨率直接与转换器的换器的位数有关位数有关,一般也可简单地用数字量的位数来表示分辨,一般也可简单地用数字量的位数来表示分

621、辨率,即率,即n n位二进制数,位二进制数,最低位最低位所具有的所具有的权值权值,就是它的分辨率。,就是它的分辨率。 值得注意的是,值得注意的是,分辨率分辨率与与精度精度是两个是两个不同的概念不同的概念,不要把两,不要把两者相混淆。即使分辨率很高,也可能由于温度漂移、线性度等者相混淆。即使分辨率很高,也可能由于温度漂移、线性度等原因,而使其精度不够高。原因,而使其精度不够高。05:50468A/D转换器的精度指标 (2 2)精度)精度(AccuracyAccuracy) 精度有精度有绝对精度绝对精度和和相对精度相对精度两种表示方法。两种表示方法。 绝对精度绝对精度:在一个转换器中,对应于一个数

622、字量的:在一个转换器中,对应于一个数字量的实际模拟输入实际模拟输入电压电压和和理想的模拟输入理想的模拟输入电压电压之差之差并非是一个常数。把它们之间的并非是一个常数。把它们之间的差的最大值差的最大值,定,定义为义为“绝对误差绝对误差”。通常以数字量的。通常以数字量的最小有效位最小有效位(LSBLSB)的)的分数值分数值来表示绝来表示绝对精度,如对精度,如1LSB1LSB。绝对误差包括量化精度和其他所有精度。绝对误差包括量化精度和其他所有精度。 相对精度相对精度: :是指是指整个转换范围内整个转换范围内,任一数字量所对应的模拟输入量的,任一数字量所对应的模拟输入量的实际值与理论值之差,用模拟电压

623、实际值与理论值之差,用模拟电压满量程满量程的的百分比百分比表示。表示。例如,例如,满量程满量程为为l0Vl0V,1010位位A/DA/D芯片,若其芯片,若其绝对精度绝对精度为为1/2LSB1/2LSB,则其最小有,则其最小有效位的量化单位为效位的量化单位为9.77mV9.77mV,其绝对精度为,其绝对精度为4.88mV4.88mV,其,其相对精度相对精度为为0.048%0.048%。 转换时间转换时间: :转换时间是指完成转换时间是指完成一次一次A/DA/D转换所需的时间转换所需的时间,即由发出启动,即由发出启动转换命令信号到转换结束信号开始有效的时间间隔。转换时间的倒数称为转转换命令信号到转

624、换结束信号开始有效的时间间隔。转换时间的倒数称为转换速率。例如换速率。例如AD570AD570的的转换时间转换时间为为25us25us,其转换,其转换速率速率为为40kHz40kHz。 量程量程: :指所能转换的模拟输入指所能转换的模拟输入电压范围电压范围,分,分单极性单极性、双极性双极性; ; 例例: :单极性量程单极性量程0 0+5V,0+5V,0+10V,0+10V,0+20V;+20V;双极性量程双极性量程-5-5+5V,-10+5V,-10+l0V+l0V05:504695.2.2S3C2410A的A/D转换器1.S3C2410A A/D1.S3C2410A A/D转换器和触摸屏接口

625、电路转换器和触摸屏接口电路 S3C2410A S3C2410A包含一个包含一个8 8通道通道的的A/DA/D转换器转换器,内部结构见图,内部结构见图5.2.45.2.4,该电路可以将模拟输入信号转换成,该电路可以将模拟输入信号转换成1010位数字编码位数字编码(1010位分辨位分辨率),差分线性误差为率),差分线性误差为1.0 LSB1.0 LSB,积分线性误差为,积分线性误差为2.0 LSB2.0 LSB。在。在A/DA/D转换时钟转换时钟频率频率为为2.5MHz2.5MHz时,其最大时,其最大转换率转换率为为500KSPS500KSPS(千采(千采样点每秒),输入电压范围是样点每秒),输入

626、电压范围是0-3.3V0-3.3V。A/DA/D转换器支持片上操作、转换器支持片上操作、采样保持采样保持功能和功能和掉电模式掉电模式。S3C2410AS3C2410A的的A/DA/D转换器和触摸屏接口转换器和触摸屏接口电路如图电路如图5.2.45.2.4所示所示05:50470S3C2410A的A/D转换器和触摸屏接口电路05:504712.与S3C2410A A/D转换器相关的寄存器 使用使用S3C2410AS3C2410A的的A/DA/D转换器进行模拟信号到数字信号的转换,转换器进行模拟信号到数字信号的转换,需要配置以下相关的寄存器。需要配置以下相关的寄存器。(1 1)ADCADC控制寄存

627、器控制寄存器(ADCCONADCCON) ADC ADC控制寄存器(控制寄存器(ADCCONADCCON)是一个)是一个1616位的可读位的可读/ /写的寄存器,写的寄存器,地址为地址为0x5800 00000x5800 0000,复位值为,复位值为0x3FC40x3FC4。ADCCONADCCON位的功能描述如位的功能描述如表表5.2.15.2.1所列。所列。05:50472ADC控制寄存器(ADCCON)的位功能ADCCONADCCON符号符号位位描述描述初始状态初始状态ECFLGECFLG1515A/DA/D转换状态标志转换状态标志( (只读只读) )。0:A/D0:A/D转换中转换中;

628、1:A/D;1:A/D转换结束转换结束0 0PRSCENPRSCEN1414A/DA/D转换器前置分频器使能控制。转换器前置分频器使能控制。0 0:禁止;:禁止;1 1:使能:使能0 0PRSCVLPRSCVL13:613:6A/DA/D转换器前置分频器数值设置转换器前置分频器数值设置, ,数值取值范围数值取值范围:1-255;:1-255;注意:当前置分频器数值为注意:当前置分频器数值为N N时,分频数值为时,分频数值为N N1 1。0xFF0xFFSEL_MUXSEL_MUX5:35:3模拟输入通道选择。模拟输入通道选择。000000:AIN0AIN0;001001:AIN1AIN1;01

629、0010:AIN2AIN2;011011:AIN3AIN3;100100:AIN4AIN4;101101:AIN5AIN5;110110:AIN6AIN6;111111:AIN7AIN70 0STDBMSTDBM22备用备用(Standby)(Standby)模式选择。模式选择。0:0:正常模式;正常模式;1:1:备用模式备用模式1 1READ_STARTREAD_START11利用读操作来启动利用读操作来启动A/DA/D转换。转换。0 0:不使能读操作启动;:不使能读操作启动;1 1:使能读操作启动:使能读操作启动0 0ENABLE_STARTENABLE_START00A/DA/D转换通过

630、将该位置转换通过将该位置1 1来启动,如果来启动,如果READ_STARTREAD_START有效有效(READ_STARTREAD_START置置1 1),则该位无效。),则该位无效。0:0:不操作不操作;1:;1:启动启动A/DA/D转换转换,A/D,A/D转换开始后该位自动清零转换开始后该位自动清零0 005:50473(2)ADC触摸屏控制寄存器(ADCTSC) ADC ADC触摸屏控制寄存器触摸屏控制寄存器(ADCTSCADCTSC)是一个可读)是一个可读/ /写的寄存器,写的寄存器,地址为地址为0x5800 00040x5800 0004,复位值为,复位值为0x0580x058。A

631、DCTSCADCTSC的位功能描述如的位功能描述如表表5.2.25.2.2所列。在正常所列。在正常A/DA/D转换时,转换时,AUTO_PSTAUTO_PST和和XY_PSTXY_PST都置成都置成0 0即即可,其他各位与可,其他各位与触摸屏有关触摸屏有关,不需要进行设置。,不需要进行设置。05:50474ADC控制寄存器(ADCTSC)的位功能ADCTSCADCTSC符号符号位位描述描述初始状态初始状态ReservedReserved88 保留位保留位0 0YM_SENYM_SEN77选择选择YMONYMON的输出值。的输出值。 0 0:YMONYMON输出输出0 0(YM = YM = 高

632、阻)高阻);1;1:YMONYMON输出输出1 1(YM = GNDYM = GND)0 0YP_SENYP_SEN66选择选择nYPONnYPON的输出值。的输出值。 0:nYPON 0:nYPON输出输出0(YP=0(YP=外部电压外部电压);1:nYPON);1:nYPON输出输出1(YP1(YP连接到连接到AIN5)AIN5)1 1XM_SENXM_SEN55选择选择XMONXMON的输出值。的输出值。 0 0:XMONXMON输出输出0 0(XM=XM=高阻)高阻);1;1:XMONXMON输出输出1 1(XM=GNDXM=GND)0XP_SENXP_SEN44选择选择nXPONnX

633、PON的输出值。的输出值。 0:nXPON 0:nXPON输出输出0(XP=0(XP=外部电压外部电压);1:nXPON);1:nXPON输出输出1(XP1(XP连接连接AIN7)AIN7)0 0PULL_UPPULL_UP33上拉开关使能。上拉开关使能。 0 0:XPXP上拉使能;上拉使能;1 1:XPXP上拉不使能上拉不使能1 1AUTO_P5TAUTO_P5T22X X位置和位置和Y Y位置自动顺序转换。位置自动顺序转换。 0 0:正常:正常ADCADC转换模式转换模式;1;1:自动顺序:自动顺序X/YX/Y位置转换模式位置转换模式0 0XY_PSTXY_PST1:01:0X X位置或位

634、置或Y Y位置的手动测量。位置的手动测量。 00: 00:无操作模式无操作模式;01:X;01:X位置测量位置测量;10:Y;10:Y位置测量位置测量;11:;11:等待中断模式等待中断模式0 005:50475(3)ADC启动延时寄存器(ADCDLY) ADC ADC启动延时寄存器(启动延时寄存器(ADCDLYADCDLY)是一个可读)是一个可读/ /写的寄存器,写的寄存器,地址为地址为0x5800 00080x5800 0008,复位值为,复位值为0x00FF0x00FF。ADCDLYADCDLY的位功能描的位功能描述如表述如表5.2.35.2.3所列。所列。ADCDLYADCDLY符号符

635、号位位描描 述述DELAYDELAY15:015:0(1 1)在正常转换模式、分开的)在正常转换模式、分开的X/YX/Y位置转换模式和位置转换模式和X/YX/Y位置自动(顺序)转换模式的位置自动(顺序)转换模式的X/YX/Y位置转换延时值。位置转换延时值。(2 2)在等待中断模式:当在此模式按下触笔时,这)在等待中断模式:当在此模式按下触笔时,这个寄存器在几个寄存器在几msms时间间隔内产生用于进行时间间隔内产生用于进行X/YX/Y方向自方向自动转换的中断信号(动转换的中断信号(INT_TCINT_TC)。)。 注意:不能使用零位值(注意:不能使用零位值(0x00000x0000)05:504

636、76(4)ADC转换数据寄存器(ADCDAT0和ADCDAT1) S3C2410A S3C2410A有有ADCDAT0ADCDAT0和和ADCDAT1ADCDAT1两个两个ADCADC转换数据寄存器转换数据寄存器。ADCDAT0ADCDAT0和和ADCDAT1ADCDAT1为只读寄存器,地址分别为为只读寄存器,地址分别为0x5800 000C0x5800 000C和和0x5800 00100x5800 0010。在。在触摸屏应用中触摸屏应用中,分别使用,分别使用ADCDAT0ADCDAT0和和ADCDAT1ADCDAT1保保存存X X位置和位置和Y Y位置的转换数据。对于正常的位置的转换数据。

637、对于正常的A/DA/D转换,使用转换,使用ADCDAT0ADCDAT0来保存转换后的数据。来保存转换后的数据。 ADCDAT0 ADCDAT0的位功能描述如表的位功能描述如表5.2.45.2.4所列,所列,ADCDAT1ADCDAT1的位功能描的位功能描述如表述如表5.2.55.2.5所列,除了位所列,除了位9:09:0为为Y Y位置的转换数据值以外,其位置的转换数据值以外,其他与他与ADCDAT0ADCDAT0类似。通过读取该寄存器的位类似。通过读取该寄存器的位9:09:0,可以获得转,可以获得转换后的数字量。换后的数字量。05:50477ADCDAT0的位功能ADCDATOADCDATO位

638、名位名位位描描 述述UPDOWNUPDOWN1515在等待中断模式时,触笔的状态为上还是下。在等待中断模式时,触笔的状态为上还是下。0 0:触笔为下状态;:触笔为下状态;1 1:触笔为上状态:触笔为上状态AUTO_PSTAUTO_PST1414X X位置和位置和Y Y位置的自动顺序转换。位置的自动顺序转换。0:0:正常正常A/DA/D转换转换; ;1:X/Y1:X/Y位置自动顺序测量位置自动顺序测量XY_PSTXY_PST13:1213:12手动测量手动测量X X位置或位置或Y Y位置。位置。00:00:无操作模式无操作模式; ;01:X01:X位置测量位置测量10:Y10:Y位置测量;位置测

639、量;11:11:等待中断模式等待中断模式ReservedReserved11:1011:10 保留保留XPDATA(XPDATA(正常正常ADC)ADC)9:09:0X X位置的转换数据值位置的转换数据值( (包括正常包括正常A/DA/D转换的数据转换的数据值值) )。取值范围。取值范围: :0 03FF3FF05:50478ADCDAT1的位功能描述ADCDAT1ADCDAT1位名位名位位描描 述述15:1015:10与与ADCDAT0ADCDAT0的位功能相同的位功能相同YPDATA(YPDATA(正常正常ADC)ADC) 9:09:0Y Y位置的转换数据值(包括正常位置的转换数据值(包括

640、正常A/DA/D转换的数据值)。转换的数据值)。取值范围:取值范围:0 03FF3FF05:504795.2.3S3C2410AA/D接口编程实例 下面介绍一个下面介绍一个A/DA/D接口编程实例,其功能实现从接口编程实例,其功能实现从A/DA/D转换器的转换器的通道通道0 0获取获取模模拟数据拟数据,并将,并将转换转换后的数字量以后的数字量以波形的形式波形的形式在在LCDLCD上显示上显示。模拟输入信号的。模拟输入信号的电压范围必须是电压范围必须是0 02.5V2.5V。程序如下:。程序如下: 1.1.1.1.定义与定义与定义与定义与A A A AD D D D转换相关的寄存器转换相关的寄存

641、器转换相关的寄存器转换相关的寄存器#define rADCCON(#define rADCCON(#define rADCCON(#define rADCCON(* * * *(volatile unsigned*)0x58000000)(volatile unsigned*)0x58000000)(volatile unsigned*)0x58000000)(volatile unsigned*)0x58000000) /ADC/ADC/ADC/ADC控制控制控制控制R R R R#define rADCTSC(#define rADCTSC(#define rADCTSC(#define

642、rADCTSC(* * * *(volatile unsigned*)0x58000004)(volatile unsigned*)0x58000004)(volatile unsigned*)0x58000004)(volatile unsigned*)0x58000004) /ADC/ADC/ADC/ADC触摸屏控制触摸屏控制触摸屏控制触摸屏控制R R R R#define rADCDLY(#define rADCDLY(#define rADCDLY(#define rADCDLY(* * * *(volatile unsigned*)0x58000008)(volatile unsig

643、ned*)0x58000008)(volatile unsigned*)0x58000008)(volatile unsigned*)0x58000008) /ADC/ADC/ADC/ADC启动或延时启动或延时启动或延时启动或延时R R R R#define rADCDAT0(#define rADCDAT0(#define rADCDAT0(#define rADCDAT0(* * * *(volatile unsigned*)0x5800000c)/ADC(volatile unsigned*)0x5800000c)/ADC(volatile unsigned*)0x5800000c)/A

644、DC(volatile unsigned*)0x5800000c)/ADC转换数据转换数据转换数据转换数据R0R0R0R0#define rADCDAT1(#define rADCDAT1(#define rADCDAT1(#define rADCDAT1(* * * *(volati1e unsigned*)0x58000010)/ADC(volati1e unsigned*)0x58000010)/ADC(volati1e unsigned*)0x58000010)/ADC(volati1e unsigned*)0x58000010)/ADC转换数据转换数据转换数据转换数据R1R1R1R1

645、05:504802.对A/D转换器进行初始化 程序中的参数程序中的参数chch表示所选择的通道号,程序如下:表示所选择的通道号,程序如下:void AD_Initvoid AD_Init(unsigned char chunsigned char ch) rADCDLY=100; /ADC rADCDLY=100; /ADC启动或间隔延时启动或间隔延时 rADCTSC=0; / rADCTSC=0; /选择选择ADCADC模式模式 rADCCON=(114)|(496)|(ch3)|(02)|(01)|(0); rADCCON=(114)|(496)|(ch3)|(02)|(077) retu

646、rn 0; return 0; /通道不能大于通道不能大于7 7 for for(i=0;i 16;i+i=0;i 16;i+) /为转换准确,转换为转换准确,转换1616次次 rADCCONrADCCON |=0x1; |=0x1; /启动启动A/DA/D转换转换 rADCCONrADCCON= = rADCCONrADCCON0xffc7|0xffc7|(chch3 4 4); /; /为转换准确,除以为转换准确,除以1616取均值取均值 05:504824.主函数 实现将转换后的数据在实现将转换后的数据在LCDLCD上以波形的方式显示,程序如下:上以波形的方式显示,程序如下:void M

647、ainvoid Main(voidvoid) int i int i,P P0;0; unsigned short bufferLength; / unsigned short bufferLength; / 显示缓冲区显示缓冲区 Target_Init Target_Init();(); GUI_Init GUI_Init();(); / / 图形界面初始化图形界面初始化 Set_Color Set_Color (GUI_BLUEGUI_BLUE);); /画显示背景界面画显示背景界面 Fill_Rect Fill_Rect(0,0,319,2390,0,319,239);); Set_Co

648、lor Set_Color(GUI_REDGUI_RED);); Draw Line Draw Line(0,119,319,1190,119,319,119);); Set_Font Set_Font(GUI_Font 8x16GUI_Font 8x16);); /设定字体类型设定字体类型APIAPI Set_Color Set_Color(GUI_WHITEGUI_WHITE);); Set_BKColor Set_BKColor(GUI_BLUEGUI_BLUE);); /设定背景颜色设定背景颜色APIAPI Fill_Rect Fill_Rect(0,0,319,30,0,319,3)

649、;); Fill_RectFill_Rect(0,0,3,2390,0,3,239);); Fill_Rect Fill_Rect(316,0,319,239316,0,319,239);); Fill_Rect Fill_Rect(0,236,319,2390,236,319,239););05:50483主函数Disp_StringDisp_String(“ADC DEMOADC DEMO”, ,(320 320 8*8 8*8)2,302,30);); for for(i i0 0;i i Length;iLength;i+) buffer bufferi i0 0;whilewhile

650、(1 1) p p0 0; for for(i i0 0;i Lengthi Length;i +i +) bufferpbufferp = =Get_ADGet_AD(0 0); /; /从通道获取转换后的数据从通道获取转换后的数据 Delay Delay(2020);); p+ p+; p p0 0; for for(i i0 0;i i(Length;iLength;i+) Uart_PrintfUart_Printf(“dndn”,bufferpbufferp );); P+ P+; 05:50484主函数P P0 0; for for(i i0 0;i i( LengthLength

651、;i+i+) buffer p buffer pAD2YAD2Y(bufferpbufferp);); P+ P+; P = 0 P = 0; for for(i i0; i0; iLengthLength;i+i+) Uart_Printf Uart_Printf( 量化后:量化后:dndn,bufferpbufferp);); P+ P+; ShowWavebuffer ShowWavebuffer(bufferbuffer); /; /在在LCDLCD上显示上显示A/DA/D转换后的波形转换后的波形 Delay Delay(10001000);); 05:504855.3D/A转换器接口

652、5.3.15.3.1D/AD/A转换器的工作原理转换器的工作原理5.3.25.3.2S3C2410AS3C2410A与与D/AD/A转换器的接口电路转换器的接口电路 05:504865.3.1D/A转换器的工作原理 D/AD/A转换器将转换器将输入的数字量输入的数字量转换为转换为模拟量输出模拟量输出,数字量是由若,数字量是由若干数位构成的,例如一个干数位构成的,例如一个8 8位的二进制数位的二进制数D D0 0D D7 7,每个数位都有,每个数位都有一定的权值。当一定的权值。当D Dn n(n=0-7n=0-7)=1=1就表示具有了这一位的权值,例就表示具有了这一位的权值,例如第如第3 3位位

653、D D2 2的权值为的权值为2 22 2=4=4,最高位,最高位D D7 7的权值为的权值为2 27 7=128=128。D/AD/A转换器转换器把一个数字量变为模拟量,就是把把一个数字量变为模拟量,就是把每一位上每一位上的的代码代码按照按照权值转权值转换换为对应的为对应的模拟量模拟量,再把,再把各位各位所对应的所对应的模拟量相加模拟量相加,所得到各,所得到各位模拟量的和便是位模拟量的和便是数字量数字量所对应的所对应的模拟量模拟量。 在集成化的在集成化的D/AD/A转换器中转换器中, ,通常采用通常采用电阻网络电阻网络实现将实现将数字量数字量转转换为换为模拟电流模拟电流, ,然后再用然后再用运

654、算放大器运算放大器完成模拟完成模拟电流电流到到模拟电压模拟电压的的转换。目前转换。目前D/AD/A转换集成电路芯片大都包含了这两个部分转换集成电路芯片大都包含了这两个部分, ,如果如果只包含电阻网络的只包含电阻网络的D/AD/A芯片,则需要连接外接运算放大器才能转芯片,则需要连接外接运算放大器才能转换为模拟电压。根据电阻网络的结构可以分为换为模拟电压。根据电阻网络的结构可以分为权电阻网络权电阻网络DAC DAC 、T T型电阻网络型电阻网络DACDAC、倒倒T T型型电阻网络电阻网络DACDAC、权电流权电流DACDAC等形式。等形式。05:504871.T型电阻网络DAC 一个一个4 4位位

655、T T型电阻网络型电阻网络DACDAC如图如图5.3.15.3.1所示。电路由所示。电路由R-2RR-2R电阻解电阻解码网络码网络、模拟、模拟电子开关电子开关和和求和放大电路求和放大电路构成,因为构成,因为R R和和2R2R组成组成T T型,故称为型,故称为T T型电阻网络型电阻网络DACDAC。图中电阻网络中只有。图中电阻网络中只有R R和和2R2R两种电两种电阻值,显然克服了上面权电阻网络阻值,显然克服了上面权电阻网络DACDAC存在的缺点。存在的缺点。4 4位位T T型电阻网络型电阻网络DACDAC05:50488T型网络信号传递05:50489T型电阻网络DAC转换原理 由图可知,根据

656、等效电源定理不难看出,每由图可知,根据等效电源定理不难看出,每经过一个电阻并联支路经过一个电阻并联支路,等效,等效电源电压电源电压减少一半减少一半,而等效电阻不变,且均为,而等效电阻不变,且均为R R。电路中的信号传递过程如图。电路中的信号传递过程如图5.3.25.3.2所示。当传所示。当传递至最左边时,运放的输入端等效内阻仍为递至最左边时,运放的输入端等效内阻仍为R R,而等效电压经过,而等效电压经过N N级则减为级则减为VREF/2VREF/2n n。当传递到运放的输入端时,其运放的等效内阻也是当传递到运放的输入端时,其运放的等效内阻也是R R,而等效电压则为,而等效电压则为VREF/2V

657、REF/2n-1n-1。根。根据叠加原理,运放总的等效电压是各支路等效电压之和,即据叠加原理,运放总的等效电压是各支路等效电压之和,即 若取若取RFRF3R3R,运放的输入端电流为,运放的输入端电流为 运放的输出电压运放的输出电压V Vo o为为 可见,输出模拟量可见,输出模拟量V VO O与输入数字量成正比。与输入数字量成正比。05:504902.数/模转换器的分类 (1) (1)电压输出型电压输出型 电压输出型电压输出型D/AD/A转换器虽有直接从电阻阵列输出电压的,但一般采用内置转换器虽有直接从电阻阵列输出电压的,但一般采用内置输出放大器以低阻抗输出。直接输出电压的器件仅用于高阻抗负载,

658、由于无输出放大器以低阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常作为高速输出放大器部分的延迟,故常作为高速D/AD/A转换器使用。例如转换器使用。例如TLC5620TLC5620。 (2) (2)电流输出型电流输出型 电流输出型电流输出型D/AD/A转换器转换器( (如如THS5661A)THS5661A)直接输出电流,但应用中通常外接电直接输出电流,但应用中通常外接电流一电压转换电路得到电压输出。电流一电压可以直接在输出引脚上连接一流一电压转换电路得到电压输出。电流一电压可以直接在输出引脚上连接一个负载电阻,实现电流一电压转换。但多采用的是外接运算放大器的形

659、式。个负载电阻,实现电流一电压转换。但多采用的是外接运算放大器的形式。另外,大部分另外,大部分CMOS D/ACMOS D/A转换器当输出电压不为零时不能正确动作,所以必须转换器当输出电压不为零时不能正确动作,所以必须外接运算放大器。由于在外接运算放大器。由于在D/AD/A转换器的电流建立时间上加入了外接运算放入转换器的电流建立时间上加入了外接运算放入器的延迟,使器的延迟,使D/AD/A响应变慢。此外,这种电路中运算放大器因输出引脚的内响应变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位补偿。部电容而容易起振,有时必须作相位补偿。05:50491数/模转换器的分类

660、 (3) (3)乘算型乘算型 D/A D/A转换器中有使用恒定基准电压的,也有在基准电压输入转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型乘的结果而输出,因而称为乘算型D/AD/A转换器(如转换器(如AD7533AD7533)。乘)。乘算型算型D/AD/A转换器一般不仅可以进行转换器一般不仅可以进行乘法运算乘法运算,而且可以作为使输,而且可以作为使输入信号数字化地衰减的入信号数字化地衰减的衰减器衰减器及对输入信号进行及对输入信号进行调制调制的调制器的调制器

661、使用。使用。05:504923.数/模转换器(DAC)的主要技术指标 描述描述DACDAC技术性能有许多技术指标,这里主要介绍几个主要技术性能有许多技术指标,这里主要介绍几个主要技术指标。技术指标。 (1) (1)分辨率分辨率(ResolutionResolution) DAC DAC电路所能分辨的最小输出电压与满量程输出电压之比称电路所能分辨的最小输出电压与满量程输出电压之比称为为DACDAC的分辨率。最小输出电压是指输入数字量只有最低有效位的分辨率。最小输出电压是指输入数字量只有最低有效位为为1 1时的输出电压,最大输出电压是指输入数字量各位全为时的输出电压,最大输出电压是指输入数字量各位

662、全为1 1时时的输出电压。的输出电压。DACDAC的分辨率可用下式表示:的分辨率可用下式表示: 分辨率分辨率1/1/(2 2n n1 1) 式中,式中,n n表示数字量的二进制位数。表示数字量的二进制位数。 DAC DAC产生产生误差误差的主要原因有:的主要原因有: 基准电压基准电压VREFVREF的的波动波动,运放运放的的零点零点漂移漂移,电组网络中,电组网络中电阻阻值偏差电阻阻值偏差等原因。等原因。05:50493(2)转换误差 转换误差常用转换误差常用满量程满量程FSRFSR(Full Scale Range)(Full Scale Range)的的百分数百分数来表示。例如,一来表示。例

663、如,一个个DACDAC的线性误差为的线性误差为0.05%0.05%,就是说转换误差是满量程输出的万分之五。有时,就是说转换误差是满量程输出的万分之五。有时转换误差用最低有效位转换误差用最低有效位LSB(Least Significant Bit)LSB(Least Significant Bit)的倍数来表示。例如,的倍数来表示。例如,一个一个DACDAC的转换误差是的转换误差是LSB/2LSB/2,则表示输出电压的绝对误差是最低有效位,则表示输出电压的绝对误差是最低有效位(LSB)(LSB)为为1 1时输出电压的时输出电压的1/21/2。 DAC DAC的转换误差主要有的转换误差主要有失调误

664、差失调误差和和满值误差满值误差。 失调误差失调误差是指输入数字量是指输入数字量全为全为0 0时,时,模拟输出值模拟输出值与理论输出值的与理论输出值的偏差偏差。在。在一定温度下的失调误差可以通过一定温度下的失调误差可以通过外部电路外部电路调整措施进行调整措施进行补偿补偿,也有些,也有些DACDAC芯芯片片本身本身有有调零端调零端进行调零。对于没有设置调零端的芯片,可以采用进行调零。对于没有设置调零端的芯片,可以采用外接校正外接校正偏置电路偏置电路加到运放求和端来消除。加到运放求和端来消除。 满值误差满值误差又称又称增益误差增益误差,是指输入数字量全,是指输入数字量全为为1 1时时,实际输出电压不

665、等于,实际输出电压不等于满值的满值的偏差偏差。满值误差通过。满值误差通过调整运放调整运放的的反馈电阻反馈电阻加以消除。加以消除。 DAC DAC的分辨率和转换误差共同决定了的分辨率和转换误差共同决定了DACDAC的的精度精度, ,要使要使DACDAC的精度高的精度高, ,不仅要不仅要选择选择位数高位数高的的DACDAC,还要选用,还要选用稳定度高稳定度高的的参考电压源参考电压源V VREFREF和低漂移的和低漂移的运算放大运算放大器器与其配合。与其配合。05:50494(3)建立时间 建立时间是描述建立时间是描述DACDAC转换速度快慢转换速度快慢的一个重要的一个重要参数参数,一般是指输入数字

666、量,一般是指输入数字量变化后,输出模拟量稳定到相应数值范围所经历的变化后,输出模拟量稳定到相应数值范围所经历的时间时间。DACDAC中的电阻网络,中的电阻网络,模拟开关等是非理想器件,各种寄生参数及模拟开关等是非理想器件,各种寄生参数及开关延迟开关延迟等都会限制转换速度。等都会限制转换速度。实际上建立时间的长短不仅与实际上建立时间的长短不仅与DACDAC本身的转换速度有关,还与数字量变化范本身的转换速度有关,还与数字量变化范围有关。输入数字量从全围有关。输入数字量从全0 0变到全变到全1(1(或者从全或者从全1 1变到全变到全0)0)时,建立时间最长,时,建立时间最长,称为满量程变化建立时间。

667、产品手册上给出的是满量程变化建立时间。称为满量程变化建立时间。产品手册上给出的是满量程变化建立时间。 根据建立时间的长短,根据建立时间的长短,DACDAC可分为以下几种可分为以下几种类型类型: 低速低速DACDAC,建立时间,建立时间100s100s;中速中速DACDAC,建立时间为,建立时间为1010100s100s;高速高速DACDAC,建立时间为,建立时间为1 110s10s;较高速;较高速DACDAC,建立时间为,建立时间为100ns100ns1s1s;超高速超高速DACDAC,建立时间为,建立时间为100ns100ns。显然转换速率也可以用频率来表示。显然转换速率也可以用频率来表示。

668、 其他指标还有其他指标还有线性度线性度(LinearityLinearity)、)、转换精度转换精度、温度系数温度系数漂移漂移等。等。05:504955.3.2S3C2410A与D/A转换器的接口电路1.MAX53801.MAX5380与与S3C2410AS3C2410A的连接电路的连接电路 MAX5380MAX5380是电压输出型的是电压输出型的8 8位位D/AD/A转换芯片,使用转换芯片,使用I I2 2C C串行接口串行接口,转换速率高达转换速率高达400kHz400kHz,其输入数字信号和输出模拟信号的对应,其输入数字信号和输出模拟信号的对应关系如表关系如表5.3.15.3.1所列。所

669、列。MAX5380MAX5380与与S3C2410AS3C2410A的连接电路如图的连接电路如图5.3.35.3.3所示。所示。 图图5.3.35.3.3中,中,MAX5380MAX5380的的时钟时钟SCLSCL和和数据输入数据输入SDASDA连接到连接到S3C2410AS3C2410A的的IICSCLIICSCL(GPE15GPE15)和)和IICSDAIICSDA(GPE14GPE14),),CON2CON2的的1 1、2 2两端输出转换后的模拟信号值,其输出电压范围为两端输出转换后的模拟信号值,其输出电压范围为0 02V2V。S3C2410AS3C2410A通过通过I I2 2C C接

670、口向接口向MAX5380MAX5380发送数据,发送数据,MAX5380MAX5380将接收将接收I I2 2C C总总线的数据,并将其转换为模拟电压信号输出到线的数据,并将其转换为模拟电压信号输出到CON2CON2。05:50496MAX5380与S3C2410A的连接电路数字输入数字输入模拟输出模拟输出1111111111111111(255/256255/256)2 2V V1000000010000000+1V+1V00000001000000017.8mV7.8mV00000000000000000 0MAX5380MAX5380数字输入与模拟输出对照表数字输入与模拟输出对照表05:

671、504972.MAX5380的软件编程 MAX5380MAX5380的编程动作通过函数的编程动作通过函数void iic_write_max5380(U32 slvAdd,U8 void iic_write_max5380(U32 slvAdd,U8 data)data)完成完成, ,其中其中slvAddrslvAddr为从设备地址为从设备地址,MAX5380,MAX5380使用使用0x60;data0x60;data为待写入的数为待写入的数据据, ,即发送给即发送给MAX5380MAX5380的数字值的数字值;iic_write_max5380;iic_write_max5380的代码请参考

672、的代码请参考6.26.2节节(I(I2 2C C部部分分).). 通过调用该函数可以实现给通过调用该函数可以实现给CON2CON2输出各种波形信号。输出各种波形信号。(1 1)输出三角波)输出三角波 for(j=0;j20;j+) for(j=0;j20;j+) for(i=0;i256;i+) for(i=0;i=0;i-) for(i=256;i=0;i-) iic_write_max5380(0x60,(u8)i); iic_write_max5380(0x60,(u8)i); 05:50498输出锯齿波和方波函数(2 2 2 2)输出锯齿波)输出锯齿波)输出锯齿波)输出锯齿波 for(

673、j=0;j20;j+)for(j=0;j20;j+)for(j=0;j20;j+)for(j=0;j20;j+) for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) iic_write_max3580(0x60,(U8)i); iic_write_max3580(0x60,(U8)i); iic_write_max3580(0x60,(U8)i); iic_write_max3580(0x60,(U8)i); (3 3 3 3)输出方波)输出方波)输出方波)输出方波 for(j=0;j20;j+)for(j=0

674、;j20;j+)for(j=0;j20;j+)for(j=0;j20;j+) for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) iic_write_max3580(0x60,(U8)0); iic_write_max3580(0x60,(U8)0); iic_write_max3580(0x60,(U8)0); iic_write_max3580(0x60,(U8)0); for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) for(i=0;i256;i+) i

675、ic_write_max3580(0x60,(U8)0xff); iic_write_max3580(0x60,(U8)0xff); iic_write_max3580(0x60,(U8)0xff); iic_write_max3580(0x60,(U8)0xff); 05:504995.4键盘与LED数码管接口5.4.15.4.1键盘与键盘与LEDLED数码管接口基本原理与结构数码管接口基本原理与结构5.4.25.4.2用用I/OI/O口实现键盘接口口实现键盘接口5.4.35.4.3采用专用芯片实现键盘及采用专用芯片实现键盘及LEDLED接口接口 05:505005.4.1键盘与LED数码管

676、接口基本原理与结构1 1键盘的分类键盘的分类 键盘与微控制器连接方式分键盘与微控制器连接方式分: :线性键盘线性键盘和和矩阵键盘矩阵键盘形式。线形式。线性键盘由若干独立按键组成性键盘由若干独立按键组成, ,每按键一端与微控制器每按键一端与微控制器I/OI/O口相连。口相连。有多少键就有多少根连线与有多少键就有多少根连线与I/OI/O口相连口相连, ,适用按键少的场合。适用按键少的场合。 矩阵键盘矩阵键盘的按键按的按键按N N行行M M列排列,每个按键占据行列的一个交列排列,每个按键占据行列的一个交点,需要的点,需要的I/OI/O口数目是口数目是N+MN+M,容许的最大按键数是,容许的最大按键数

677、是N NM M。矩阵矩阵键盘键盘可以减少与微控制器可以减少与微控制器I/OI/O接口的连线数,是接口的连线数,是常用的常用的一种键盘一种键盘结构形式。根据矩阵键盘的识键和译键方法的不同,矩阵键盘结构形式。根据矩阵键盘的识键和译键方法的不同,矩阵键盘又可以分为又可以分为非编码键盘非编码键盘和和编码键盘编码键盘两种。两种。 非编码键盘非编码键盘主要用主要用软件软件的方法的方法识键识键和和译键译键。根据扫描方法的。根据扫描方法的不同,可以分为行扫描法、列扫描法和反转法不同,可以分为行扫描法、列扫描法和反转法3 3种。种。 编码键盘编码键盘用用硬件硬件实现键的实现键的扫描扫描和和识别识别, ,例例82

678、798279专用芯片。专用芯片。 常用按键开关有机械式、电容式、薄膜式、霍耳效应按键等常用按键开关有机械式、电容式、薄膜式、霍耳效应按键等. .05:50501机械式和电容式按键(1 1)机械式按键)机械式按键 机械式按键开关的构造有两种。一种是内含两个金属片和一个复位弹簧,机械式按键开关的构造有两种。一种是内含两个金属片和一个复位弹簧,按键时,两个金属片便被压在一起;另一种机械式按键是用底面带一小块导按键时,两个金属片便被压在一起;另一种机械式按键是用底面带一小块导电橡胶的成型泡沫硅橡胶帽做的,压键时,导电橡胶将印制电路板上的两条电橡胶的成型泡沫硅橡胶帽做的,压键时,导电橡胶将印制电路板上的

679、两条印制线短路。印制线短路。 机械式按键的主要缺点是在触点可靠地接触之前机械式按键的主要缺点是在触点可靠地接触之前会通断多次会通断多次,即容易产,即容易产生抖动;另外,生抖动;另外,触点变脏触点变脏或或氧化氧化,使导通的可靠性降低。但机械式按键价格,使导通的可靠性降低。但机械式按键价格较低,手感好,使用范围较广。较低,手感好,使用范围较广。(2 2)电容式按键)电容式按键 电容式按键由印制电路板上的两小块金属片和在泡沫橡胶片下面可活动电容式按键由印制电路板上的两小块金属片和在泡沫橡胶片下面可活动的另一块金属片构成。压键时,可活动的金属片向两块固定的金属片靠近,的另一块金属片构成。压键时,可活动

680、的金属片向两块固定的金属片靠近,从而改变了两块固定的从而改变了两块固定的金属片之间的电容金属片之间的电容。此时,检测电容变化的电路就会。此时,检测电容变化的电路就会产生一个逻辑电平信号,以表示该键己被按下。显然,该类按键没有机械触产生一个逻辑电平信号,以表示该键己被按下。显然,该类按键没有机械触点被氧化或变脏的问题。点被氧化或变脏的问题。05:50502薄膜式和霍耳效应按键(3 3)薄膜式按键)薄膜式按键 薄膜式按键是一种特殊的机械式按键开关,由三层塑料或橡胶夹层结构薄膜式按键是一种特殊的机械式按键开关,由三层塑料或橡胶夹层结构构成。上层在每一行键下面有一条印制银导线,中间层在每个键下面有一个

681、构成。上层在每一行键下面有一条印制银导线,中间层在每个键下面有一个小圆孔,下层在每一列键下面也有一条印制银导线。压键时将上面一层的印小圆孔,下层在每一列键下面也有一条印制银导线。压键时将上面一层的印制银导线压过中层的小孔与下面一层的印制银导线接触。薄膜式按键可以做制银导线压过中层的小孔与下面一层的印制银导线接触。薄膜式按键可以做成很薄的密封形式。成很薄的密封形式。(4 4)霍耳效应按键)霍耳效应按键 霍耳效应按键利用活动霍耳效应按键利用活动电荷在磁场中的偏转效果电荷在磁场中的偏转效果。参考电流从半导体晶。参考电流从半导体晶体的两个相对面之间流过,压键时,晶体便在磁力线垂直于参考电流方向的体的两

682、个相对面之间流过,压键时,晶体便在磁力线垂直于参考电流方向的磁场中移动。晶体在磁场中移动会在晶体另外两个相对的表面之间产生一个磁场中移动。晶体在磁场中移动会在晶体另外两个相对的表面之间产生一个小电压,该电压经过放大之后用来表示键已被压下。该类按键是一种无机械小电压,该电压经过放大之后用来表示键已被压下。该类按键是一种无机械触点的按键开关,密封性很好,但价格较高。触点的按键开关,密封性很好,但价格较高。05:505032.LED数码管 LEDLED(Light Emitting DiodeLight Emitting Diode,发光二极管)数码管(也称为,发光二极管)数码管(也称为七段数码管)

683、价格低廉、体积小、功耗低,而可靠性又很好,七段数码管)价格低廉、体积小、功耗低,而可靠性又很好,在嵌入式控制系统中应用非常普遍。在嵌入式控制系统中应用非常普遍。 LED LED数码管一般由数码管一般由8 8个发光管组成个发光管组成,分别称为,分别称为a a、b b、c c、d d、e e、f f、g 7g 7个字段和一个小数点段个字段和一个小数点段DPDP。通过。通过7 7个字段的不同组合,可个字段的不同组合,可以显示以显示0 09 9和和A AF F共共1616个字母数字,从而实现十六进制的显示。个字母数字,从而实现十六进制的显示。例如,控制例如,控制a a、b b、c c、d d、e e、

684、f f段亮,段亮,g g段不亮,就显示出数字零。段不亮,就显示出数字零。 LED LED数码管可以分为共阳极和共阴极两种结构,在共阴极结数码管可以分为共阳极和共阴极两种结构,在共阴极结构,各字段阴极控制端连接在一起接低电平,各字段阳极控制构,各字段阴极控制端连接在一起接低电平,各字段阳极控制端连接到高电平时,则该段发光。例如,要显示端连接到高电平时,则该段发光。例如,要显示b b字母,只要使字母,只要使c c、d.d.、e e、f f、g g阳极接高电平即可实现。阳极接高电平即可实现。05:505047段LED显示器(a a)LEDLED器件器件 (b b)共阳极接法)共阳极接法 (c c)共

685、阴极接法)共阴极接法05:50505LED数码管工作原理 在在共阳极共阳极结构,各字段结构,各字段阳极控制端连接在一起阳极控制端连接在一起接高电平,各接高电平,各字段阴极控制端连接到低电平时,则该段发光。例如,要显示字段阴极控制端连接到低电平时,则该段发光。例如,要显示b b字母,只要使字母,只要使c c、d.d.、e e、f f、g g阳极接低电平即可实现。阳极接低电平即可实现。 在多个在多个LEDLED数码管显示电路中,通常把阴(阳)极控制端连数码管显示电路中,通常把阴(阳)极控制端连接到一个输出端口,称为接到一个输出端口,称为位控端口位控端口;而把各字段(数据显示段);而把各字段(数据显

686、示段)连接到一个输出端口,称为连接到一个输出端口,称为段控端口段控端口。段控端口处应输出十六。段控端口处应输出十六进制数的进制数的7 7段代码。段代码。 将一个将一个4 4位的位的BCDBCD码译码译为为LEDLED的的7 7位显示代码,可以采用专用译位显示代码,可以采用专用译码芯片,如码芯片,如74477447即采用专用的带驱动器的即采用专用的带驱动器的LEDLED段译码器,可以实段译码器,可以实现对现对BCDBCD码的译码。另一种常用的办法是码的译码。另一种常用的办法是软件译码法软件译码法,将,将0 0F F共共1616个数字(也可以为个数字(也可以为0 09 9)对应的显示代码组成一个表

687、,直接)对应的显示代码组成一个表,直接输出输出7 7段码。段码。05:505065.4.2用I/O口实现键盘接口 一个用一个用I/OI/O口实现的口实现的1616个按键的键盘个按键的键盘接口电路如图接口电路如图5.4.25.4.2所示。所示。在本例中,采用了节省口线的在本例中,采用了节省口线的“行扫描法行扫描法”方法来检测键盘,方法来检测键盘,与与4 44 4的矩阵的矩阵键盘接口只需要键盘接口只需要8 8根口线,设置根口线,设置PF0PF0PF3PF3为输出扫为输出扫描码的端口,描码的端口,PF4PF4PF7PF7为键值读入口。为键值读入口。 一个用一个用I/OI/O口实现的键盘接口,为了识别

688、键盘上的闭合键,口实现的键盘接口,为了识别键盘上的闭合键,常采用常采用行扫描法行扫描法。行扫描法是使键盘上。行扫描法是使键盘上某一行线为低电平某一行线为低电平,而,而其余行接高电平,然后其余行接高电平,然后读取列值读取列值,如果列值中有某位为低电平,如果列值中有某位为低电平,则表明行列交点处的则表明行列交点处的键被按下键被按下;否则;否则扫描下一行扫描下一行,直到扫描完,直到扫描完全部的行线为止。全部的行线为止。05:50507ARM微处理器实现的键盘接口电路05:50508按键识别原理 在图在图5.4.25.4.2所示电路中,按键设置在行、列交叉点上,行、列分别连接到所示电路中,按键设置在行

689、、列交叉点上,行、列分别连接到按键开关的两端。列线通过上拉电阻接到按键开关的两端。列线通过上拉电阻接到+5V+5V上。平时无按键动作时,列线上。平时无按键动作时,列线处于高电平状态;而当有键按下时,列线电平状态将由通过此按键的行线电处于高电平状态;而当有键按下时,列线电平状态将由通过此按键的行线电平决定:行线电平如果为低,列线电平为低;行线电平如果为高,则列线电平决定:行线电平如果为低,列线电平为低;行线电平如果为高,则列线电平亦为高。通过这一点来识别矩阵式键盘是否被按下。因各按键之间相互发平亦为高。通过这一点来识别矩阵式键盘是否被按下。因各按键之间相互发生影响,所以必须将行、列线信号配合起来

690、并作适当的处理,才能确定闭合生影响,所以必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。键的位置。 根据根据行扫描法的原理行扫描法的原理,识别矩阵键盘按键闭合分两步进行:,识别矩阵键盘按键闭合分两步进行: (1 1)识别键盘哪一行的键被按下:让所有行线均为低电平,检查各列线)识别键盘哪一行的键被按下:让所有行线均为低电平,检查各列线电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明无键被电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明无键被按下。按下。 (2 2)如果某列有键被按下,识别键盘哪一行的键被按下:逐行置低电平,)如果某列有键被按下,识别键盘哪一

691、行的键被按下:逐行置低电平,并置其余各行为高电平,检查各列线电平的变化,如果列电平变为低电平,并置其余各行为高电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此行此列交叉点处按键被按下。则可确定此行此列交叉点处按键被按下。05:505095.4.3采用专用芯片实现键盘及LED接口 一个一个5 54 4键盘及键盘及8 8位位LEDLED显示电路显示电路如图如图5.4.35.4.3所示,该电路采所示,该电路采用支持用支持I I2 2C C总线协议总线协议的的ZLG7290ZLG7290芯片。芯片。ZLG7290ZLG7290是一个采用是一个采用I I2 2C C接口接口的键盘及的键盘及L

692、EDLED驱动器芯片,驱动器芯片,I I2 2C C串行接口提供键盘串行接口提供键盘中断信号中断信号方便与方便与处理器接口,处理器接口,I I2 2C C接口传输速率可达接口传输速率可达32kbit/s32kbit/s,可驱动,可驱动8 8位共阴数位共阴数码管码管或或6464只只独立独立LEDLED和和6464个按键个按键,可控扫描位数可控任一数码管,可控扫描位数可控任一数码管闪烁,提供数据译码和循环移位段寻址等控制,闪烁,提供数据译码和循环移位段寻址等控制,8 8个功能键可检个功能键可检测任一键的连击次数,无需外接元件即直接驱测任一键的连击次数,无需外接元件即直接驱LEDLED,可扩展驱动,

693、可扩展驱动电流和驱动电压,提供工业级器件多种封装形式电流和驱动电压,提供工业级器件多种封装形式PDIP-24PDIP-24和和SO-SO-2424,引脚端功能如表,引脚端功能如表5.4.15.4.1所示。所示。05:50510ZLG7290控制电路05:50511八段数码管连接电路05:50512键盘及LED显示电路05:50513ZLG7290引脚端功能引脚引脚符号符号类型类型描述描述13,12,21,22,3-613,12,21,22,3-6Dig7-Dig0 Dig7-Dig0 输入输入/ /输出输出LED LED 显示位驱动及键盘扫描线显示位驱动及键盘扫描线10-7,2,1,24,23

694、10-7,2,1,24,23SegH-SegA SegH-SegA 输入输入/ /输出输出LED LED 显示段驱动及键盘扫描线显示段驱动及键盘扫描线2020SDA SDA 输入输入/ /输出输出I I2 2C C 总线接口数据总线接口数据/ /地址线地址线1919SCL SCL 输入输入/ /输出输出I I2 2C C 总线接口时钟线总线接口时钟线1414/INT /INT 输出输出中断输出端,低电平有效中断输出端,低电平有效1515/RES /RES 输入输入复位输入端,低电平有效复位输入端,低电平有效1717OSC1 OSC1 输入输入连接晶体以产生内部时钟连接晶体以产生内部时钟1818

695、OSC2 OSC2 输出输出1616VCC VCC 电源电源电源正端,电压电源正端,电压3.3-5.5V 3.3-5.5V 1111GND GND 电源电源地,电源负端地,电源负端05:505141.键盘控制初始化程序/*/* *名称:名称:keyboard_testkeyboard_test* *功能:测试八段数码管功能:测试八段数码管* *参数:无参数:无* *返回:无返回:无*Oid keyboard_test(void)Oid keyboard_test(void) UINT8T ucChar; UINT8T ucChar; UINT8T szBuf40; UINT8T szBuf40

696、; uart_printf( uart_printf(“n Keyboard Test Examplenn Keyboard Test Examplen”);); uart_printf( uart_printf(“Press any key to exitPress any key to exitnn”);); Keyboard_init(); Keyboard_init();05:50515键盘控制初始化程序g_nKeyPress=0xFE;g_nKeyPress=0xFE; While(1) While(1) f_nKeyPress=0; f_nKeyPress=0; while(f_n

697、KeyPress=0) while(f_nKeyPress=0) if(uart_tetkey() /Press any key from UART0 to exit if(uart_tetkey() /Press any key from UART0 to exit return; return; else if(ucChar=7) /or press 5*4 Key-7 to exit else if(ucChar=7) /or press 5*4 Key-7 to exit return; return; else if(g_nKeyPress!=0xFE) /or SB1202/SB1

698、203 to exit else if(g_nKeyPress!=0xFE) /or SB1202/SB1203 to exit return; return; 05:50516键盘控制初始化程序iic_read_keybd(0x70,0x1,&ucChar); /get data from ZLG7290iic_read_keybd(0x70,0x1,&ucChar); /get data from ZLG7290 If(ucChar!=0) If(ucChar!=0) ucChar-key_set(ucChar); /key map for Edukit II ucChar-key_set

699、(ucChar); /key map for Edukit II if(ucChar16) if(ucChar16) sprintf(&szBuf, sprintf(&szBuf,”press key %dpress key %d”,ucChar);,ucChar); else if(ucChar255) else if(ucChar1)+1=LCDBASEU )1)+1=LCDBASEU +(PAGEWIDTH+OFFSIZE)x(LINEVAL+1)+(PAGEWIDTH+OFFSIZE)x(LINEVAL+1)0x00000x000005:50541LCDSADDR2 需要注意的是,用户

700、可以在需要注意的是,用户可以在需要注意的是,用户可以在需要注意的是,用户可以在LCDLCDLCDLCD控制器打开的状态下通过改控制器打开的状态下通过改控制器打开的状态下通过改控制器打开的状态下通过改变变变变LCDBASEULCDBASEULCDBASEULCDBASEU和和和和LCD-BASELLCD-BASELLCD-BASELLCD-BASEL的值来滚动屏幕。但是,在帧结束时,的值来滚动屏幕。但是,在帧结束时,的值来滚动屏幕。但是,在帧结束时,的值来滚动屏幕。但是,在帧结束时,用户不能根据用户不能根据用户不能根据用户不能根据LCDCON1LCDCON1LCDCON1LCDCON1寄存器中寄

701、存器中寄存器中寄存器中LINEGNTLINEGNTLINEGNTLINEGNT字段的值来改变字段的值来改变字段的值来改变字段的值来改变LCDBASEULCDBASEULCDBASEULCDBASEU和和和和LCDBASELLCDBASELLCDBASELLCDBASEL寄存器,因为寄存器,因为寄存器,因为寄存器,因为LCD FIFOLCD FIFOLCD FIFOLCD FIFO预取下一帧数据的预取下一帧数据的预取下一帧数据的预取下一帧数据的操作先于改变帧数据。如果这时改变帧数据,预取的操作先于改变帧数据。如果这时改变帧数据,预取的操作先于改变帧数据。如果这时改变帧数据,预取的操作先于改变帧数

702、据。如果这时改变帧数据,预取的FIFOFIFOFIFOFIFO数据数据数据数据将无效,并且将出现显示错误。为了检查将无效,并且将出现显示错误。为了检查将无效,并且将出现显示错误。为了检查将无效,并且将出现显示错误。为了检查LINECNTLINECNTLINECNTLINECNT,必须将中断,必须将中断,必须将中断,必须将中断屏蔽;否则如果在读屏蔽;否则如果在读屏蔽;否则如果在读屏蔽;否则如果在读LINECNTLINECNTLINECNTLINECNT之后,刚好某个中断被执行,那么之后,刚好某个中断被执行,那么之后,刚好某个中断被执行,那么之后,刚好某个中断被执行,那么读取的读取的读取的读取的L

703、INECNTLINECNTLINECNTLINECNT值可能是过期的。值可能是过期的。值可能是过期的。值可能是过期的。05:50542(8)LCDSADDR3 LCDSADDR3 LCDSADDR3(STNSTN型型LCD/TFTLCD/TFT型型LCDLCD帧缓冲起始帧缓冲起始地址寄存器地址寄存器3 3)是一个可)是一个可读读/ /写的寄存器,地址为写的寄存器,地址为0x4D00 00lC0x4D00 00lC,复位后的初始值为,复位后的初始值为0x0000 00000x0000 0000,用于设置虚拟屏地址。用于设置虚拟屏地址。LCDSADDR3LCDSADDR3的位功能如表的位功能如表5

704、.5.85.5.8所列。所列。位名称位名称位位描述描述初始状态初始状态OFFSIZE OFFSIZE 21:11 21:11 位位21:1121:11用于设置虚拟屏偏移量大小用于设置虚拟屏偏移量大小( (即半字即半字的数量的数量) )。该数值定义前一个。该数值定义前一个LCDLCD行上的最后半行上的最后半字与新的字与新的LCDLCD行上的第一个半字之间的差值。行上的第一个半字之间的差值。0000000000000000000 000 PAGEWIDTH PAGEWIDTH 10:0 10:0 位位10:010:0用于设置虚拟屏的页宽度用于设置虚拟屏的页宽度( (即半字的数即半字的数量量) )。

705、该数值定义帧的可视区宽度。该数值定义帧的可视区宽度。00000000000000000 0 05:50543(9)RGB查找表寄存器 RGBRGB查找表寄存器包括查找表寄存器包括REDLUT(REDLUT(红色查找表寄存器红色查找表寄存器) )、GREENLUTGREENLUT(绿色查找绿色查找表寄存器表寄存器) )和和BLUELUT(BLUELUT(蓝色查找表寄存器蓝色查找表寄存器) )。在这。在这3 3个寄存器中个寄存器中, ,可以分别设定可以分别设定使用的使用的8 8种红色种红色, ,8 8种绿色和种绿色和4 4种蓝色。种蓝色。 REDLUTREDLUT(STNSTN型型LCDLCD红色

706、查找表寄存器)是一个可读写的寄存器,地址红色查找表寄存器)是一个可读写的寄存器,地址为为0x4D00 00200x4D00 0020,复位后的初始值为,复位后的初始值为0x0000 00000x0000 0000。REDLUTREDLUT的位功能如表的位功能如表5.5.95.5.9所列。所列。位名称位名称位位描述描述初始状态初始状态REDVALREDVAL 31:0 31:0 31:031:0位定义位定义8 8种可能的红色组合。种可能的红色组合。 000 = REDVAL3:0000 = REDVAL3:0;001 = REDVAL7:4 001 = REDVAL7:4 010 = REDVA

707、L11:8010 = REDVAL11:8;011 = REDVAL15:12 011 = REDVAL15:12 100 = REDVAL19:16100 = REDVAL19:16;101 = REDVAL23:20 101 = REDVAL23:20 110 = REDVAL27:24110 = REDVAL27:24;111 = REDVAL31:28 111 = REDVAL31:28 0x000000000x0000000005:50544LCD绿色查找表寄存器 GREENLUTGREENLUT(STNSTN型型LCDLCD绿色查找表寄存器)是一个可读写绿色查找表寄存器)是一个可读

708、写的寄存器,地址为的寄存器,地址为0x4D00 00240x4D00 0024,复位后的初始值为,复位后的初始值为0x0000 0x0000 00000000。GREENLUTGREENLUT的位功能如表的位功能如表5.5.105.5.10所列。所列。位名称位名称位位描述描述初始状态初始状态GREENVAL GREENVAL 31:0 31:0 31:031:0位定义位定义8 8种可能的绿色组合。种可能的绿色组合。000= GREENVAL3:0000= GREENVAL3:0;001=GREENVAL7:4001=GREENVAL7:4010= GREENVAL11:8;011=GREENV

709、AL15:12010= GREENVAL11:8;011=GREENVAL15:12100= GREENVAL19:16;101=GREENVAL23:20100= GREENVAL19:16;101=GREENVAL23:20110= GREENVAL27:24;111=GREENVAL31:28 110= GREENVAL27:24;111=GREENVAL31:28 0x00000000 0x00000000 05:50545LCD蓝色查找表寄存器 BLUELUTBLUELUT(STNSTN型型LCDLCD蓝色查找表寄存器)是一个可读蓝色查找表寄存器)是一个可读写的寄存器,地址为写的寄存

710、器,地址为Ox4D00 0028Ox4D00 0028,复位后的初始值为,复位后的初始值为0x00000x0000。BLUELUTBLUELUT的位功能如表的位功能如表5.5.115.5.11所列。所列。位名称位名称位位描述描述初始状态初始状态BLUEVAL BLUEVAL 15:0 15:0 15:015:0位定义位定义4 4种可能的蓝色组合。种可能的蓝色组合。00 = BLUEVAL3:000 = BLUEVAL3:0;01 = BLUEVAL7:401 = BLUEVAL7:4;10 = BLUEVAL11:810 = BLUEVAL11:8;11 = BLUEVAL15:12 11 =

711、 BLUEVAL15:12 0x00000x0000注意:注意:Address Address 从从0x4D00002C0x4D00002C到到 0x4D0000480x4D000048的地址不能够使用,保留用的地址不能够使用,保留用于测试模式。于测试模式。05:50546(10)DITHMODE(STN型LCD抖动模式寄存器) DITHMODE DITHMODE(STNSTN型型LCDLCD抖动模式寄存器)是一个可读写抖动模式寄存器)是一个可读写的寄存器,地址为的寄存器,地址为0x4D00 004C0x4D00 004C,复位后的初始值为,复位后的初始值为0x0 0x0 00000000,建

712、议用户将其值设置为,建议用户将其值设置为0x122100x12210。在。在S3C2410AS3C2410A中,调中,调节红色、绿色或蓝色的差异是通过时间抖动算法及帧率控制节红色、绿色或蓝色的差异是通过时间抖动算法及帧率控制来实现的,因此需要设置抖动模式寄存器。来实现的,因此需要设置抖动模式寄存器。DITHMODEDITHMODE的位功的位功能如表能如表5.5.125.5.12所列。所列。位名称位名称位位描描 述述初始状态初始状态DITHMODEDITHMODE 18:018:0 用户使用下面的数值用户使用下面的数值: :0x000000x00000或者或者 0x122100x122100x0

713、00000x0000005:50547(11)TPAL(TFT型LCD临时调色板寄存器) TPAL(TFT TPAL(TFT TPAL(TFT TPAL(TFT型型型型LCDLCDLCDLCD临时调色板寄存器临时调色板寄存器临时调色板寄存器临时调色板寄存器) ) ) )是一个可读是一个可读是一个可读是一个可读/ / / /写的寄存写的寄存写的寄存写的寄存器,地址为器,地址为器,地址为器,地址为0x4D00 0050,0x4D00 0050,0x4D00 0050,0x4D00 0050,复位后的初始值为复位后的初始值为复位后的初始值为复位后的初始值为0x0000 0000,0x0000 000

714、0,0x0000 0000,0x0000 0000,寄寄寄寄存器的数据是下一帧的图象数据。存器的数据是下一帧的图象数据。存器的数据是下一帧的图象数据。存器的数据是下一帧的图象数据。TPALTPALTPALTPAL的位功能如表的位功能如表的位功能如表的位功能如表5.5.135.5.135.5.135.5.13所列。所列。所列。所列。位名称位名称位位描述描述初始状态初始状态TPALEN TPALEN 24 24 临时调色板寄存器使能位。临时调色板寄存器使能位。 0 0:不使能;:不使能; 1 1:使能:使能0 0 TPALVAL TPALVAL 23:0 23:0 临时调色板数值寄存器临时调色板数

715、值寄存器 TPALVAL23:16TPALVAL23:16:REDRED(红色)(红色) TPALVAL15:8TPALVAL15:8:GREENGREEN(绿色)(绿色)TPALVAL7:0TPALVAL7:0:BLUE BLUE (蓝色)(蓝色)0x000000 0x000000 05:50548(12)LCD中断寄存器 LCD LCD中断寄存器有中断寄存器有LCDINTPND(LCDLCDINTPND(LCD中断判断寄存器中断判断寄存器) ) LCDSRCPNDLCDSRCPND(LCDLCD中断源判断寄存器中断源判断寄存器) )和和LCDINTMSK(LCDLCDINTMSK(LCD中

716、断屏蔽中断屏蔽寄存器寄存器) )。 LCDINTPNDLCDINTPND(LCDLCD中断判断寄存器)是一个可读中断判断寄存器)是一个可读/ /写寄存器,写寄存器,地址为地址为0X4D0000540X4D000054,复位后的初始值为,复位后的初始值为0x00x0。LCDINTPNDLCDINTPND的位功的位功能如表能如表5.5.145.5.14所列。所列。位名称位名称位位描述描述初始状态初始状态INT_FrSynINT_FrSyn1 1 LCDLCD帧同步中断判断位。帧同步中断判断位。 0 0:没有中断请求;:没有中断请求; 1 1:帧已有中断请求:帧已有中断请求 0 0 INT_FiCn

717、tINT_FiCnt0 0 LCD FIFOLCD FIFO中断判断位。中断判断位。0 0:没有中断请求;:没有中断请求;1 1:LCD FIFOLCD FIFO已有中断请求已有中断请求 0 0 05:50549LCDSRCPND(LCD中断源判断寄存器) LCDSRCPNDLCDSRCPND(LCDLCD中断源判断寄存器)是一个可读中断源判断寄存器)是一个可读/ /写写寄存器,地址为寄存器,地址为0X4D0000580X4D000058,复位后的初始值为,复位后的初始值为0x00x0。LCDSRCPNDLCDSRCPND的位功能如表的位功能如表5.5.155.5.15所列。所列。位名称位名称

718、位位描述描述初始状态初始状态INT_FrSynINT_FrSyn1 1 LCDLCD帧同步中断源判断位。帧同步中断源判断位。0 0:没有中断请求;:没有中断请求;1 1:帧已有中断请求:帧已有中断请求0 0 INT_FiCntINT_FiCnt0 0 LCD FIFOLCD FIFO中断源判断位。中断源判断位。0 0:没有中断请求;:没有中断请求;1 1:LCD FIFOLCD FIFO已有中断请求已有中断请求0 0 05:50550LCDINTMSK(LCD中断屏蔽寄存器) LCDINTMSKLCDINTMSK(LCDLCD中断屏蔽寄存器)是一个可读中断屏蔽寄存器)是一个可读/ /写寄写寄存

719、器,地址为存器,地址为0X4D00005C0X4D00005C,复位后的初始值为,复位后的初始值为0x30x3。LCDINTMSKLCDINTMSK的位功能如表的位功能如表5.5.165.5.16所列。所列。位名称位名称位位功能功能初始状态初始状态FIWSEL FIWSEL 2 2 确定确定 LCD FIFOLCD FIFO的触发器电平。的触发器电平。0 0:4 words4 words(字);(字);1 1:8 words 8 words (字)(字)INT_FrSyn INT_FrSyn 1 1 屏蔽屏蔽LCD LCD 帧同步中断。帧同步中断。 0 0:中断服务有效;:中断服务有效;1 1

720、:中断服务被屏蔽:中断服务被屏蔽 1 1INT_FiCnt INT_FiCnt 0 0 屏蔽屏蔽LCD FIFOLCD FIFO中断。中断。0 0:中断服务有效;:中断服务有效;1 1:中断服务被屏蔽:中断服务被屏蔽 1 105:50551LPCSEL(LPC3600模式控制寄存器) (1313)LPCSELLPCSEL(LPC3600LPC3600模式控制寄存器)是一个可读模式控制寄存器)是一个可读/ /写写寄存器,地址是寄存器,地址是0X4D0000600X4D000060,初始化值是,初始化值是0x40x4。LPCSELLPCSEL的位的位功能如表功能如表5.5.175.5.17所列。所

721、列。位名称位名称位位描描 述述初始状态初始状态ReservedReserved2 2 保留保留1 1 RES_SELRES_SEL1 1 1 = 2401 = 240320 320 0 0 LPC_ENLPC_EN0 0 确定确定LPC3600 LPC3600 使能使能/ /不使能。不使能。0 0:LPC3600 LPC3600 不使能;不使能;1 1:LPC3600 LPC3600 使能使能 0 0 05:505525.5.3S3C2410ALCD显示的编程实例 本实例实现在本实例实现在LCDLCD上填充一个蓝色的矩形,并画一个红色的上填充一个蓝色的矩形,并画一个红色的圆。要实现以上功能,需

722、要完成的主要工作如下。圆。要实现以上功能,需要完成的主要工作如下。1 1定义与定义与LCDLCD相关的寄存器相关的寄存器代码如下:代码如下:#define M5D#define M5D(n n) (n n)0x1fffff0x1fffff)#define MVAL #define MVAL (1313)#define MVAL_USED #define MVAL_USED (0 0)define MODE_CSTN_8BIT define MODE_CSTN_8BIT (0x20010x2001)#define LCD_XSIZE_CSTN #define LCD_XSIZE_CSTN (32

723、0320)define LCD_YSIZE_CSTN define LCD_YSIZE_CSTN (240240)#define SCR_XSIZE_CSTN #define SCR_XSIZE_CSTN (LCD_XSIZE_CSTN*2LCD_XSIZE_CSTN*2)/虚拟屏幕大小虚拟屏幕大小05:50553定义与LCD相关的寄存器#define SCR_YSIZE_CSTN #define SCR_YSIZE_CSTN (LCD_YSIZE_CSTN*2LCD_YSIZE_CSTN*2)#define HOZVAL_CSTN #define HOZVAL_CSTN (LCD_XSIZE

724、_CSTN*3/8-1LCD_XSIZE_CSTN*3/8-1)/有效的有效的VDVD数据是数据是8 8#define LINEVAL_CSTN #define LINEVAL_CSTN (LCD_YSIZE_CSTN- 1LCD_YSIZE_CSTN- 1)#define WLH_CSTN #define WLH_CSTN (0 0)#define WDLY_CSTN #define WDLY_CSTN (0 0)#define LINEBLANK_CSTN #define LINEBLANK_CSTN (16 &0xff16 &0xff)#define CLKVAL_CSTN #defin

725、e CLKVAL_CSTN (6 6)/130Hz50MHz,WLH=16hclk/130Hz50MHz,WLH=16hclk,WDLY=16hclk,LINEBLANK=16*8hclk,VD=8WDLY=16hclk,LINEBLANK=16*8hclk,VD=8#define LCDFRAMEBUFFER 0x33t800000 /#define LCDFRAMEBUFFER 0x33t800000 /帧缓冲区起始地址帧缓冲区起始地址05:505542.初始化LCD 初始化初始化LCDLCD程序完成对相关寄存器的赋初值。这里使用函数程序完成对相关寄存器的赋初值。这里使用函数LCD Ini

726、tLCD Init实现,实现,其中参数其中参数typetype用于传递显示器的类型,如用于传递显示器的类型,如STN8STN8位彩色、位彩色、STN12STN12位彩色等。具位彩色等。具体代码如下:体代码如下:Void LCD_InitVoid LCD_Init(inttYPeinttYPe) /用于降低功耗用于降低功耗 rIISPSR=(25)|(20) rIISPSR=(25)|(20); /IIS_LRCK=44.1kHz384fs/IIS_LRCK=44.1kHz384fs,PCLK=50MHzPCLK=50MHz rGPHCON=rGPHCON rGPHCON=rGPHCON -(-

727、(0xf18)|(0x5180xf18)|(0x518);); switch switch(typetype) case MODE_CSTN_8BIT case MODE_CSTN_8BIT: /STN8/STN8位彩色模式位彩色模式05:50555初始化LCD frameBuffer8Bit=(U32( frameBuffer8Bit=(U32( frameBuffer8Bit=(U32( frameBuffer8Bit=(U32(*)*)*)*)SCR_XSIZE_CSTN/4)LCDFRAMEBUFFERSCR_XSIZE_CSTN/4)LCDFRAMEBUFFERSCR_XSIZE_C

728、STN/4)LCDFRAMEBUFFERSCR_XSIZE_CSTN/4)LCDFRAMEBUFFER; rLCDCON1=(CLKVAL_CSTN8)|(MVAL_USED7)|(25)|(31)|0 rLCDCON1=(CLKVAL_CSTN8)|(MVAL_USED7)|(25)|(31)|0 rLCDCON1=(CLKVAL_CSTN8)|(MVAL_USED7)|(25)|(31)|0 rLCDCON1=(CLKVAL_CSTN8)|(MVAL_USED7)|(25)|(31)|0; /8- bit/8- bit/8- bit/8- bit单扫描,单扫描,单扫描,单扫描,8bpp C

729、STN8bpp CSTN8bpp CSTN8bpp CSTN,ENVID=ENVID=ENVID=ENVID=关闭关闭关闭关闭 rLCDCON2=rLCDCON2=rLCDCON2=rLCDCON2=(0 240 240 240 24)| | | |(LINEVAL_CSTN 14LINEVAL_CSTN 14LINEVAL_CSTN 14LINEVAL_CSTN 14)| | | |(0 60 60 60 6)|0|0|0|0; rLCDCON3=(WDLY_CSTN19)|(HOZVAL_CSTN8)|(LINEBLANK_CSTN0rLCDCON3=(WDLY_CSTN19)|(HOZV

730、AL_CSTN8)|(LINEBLANK_CSTN0rLCDCON3=(WDLY_CSTN19)|(HOZVAL_CSTN8)|(LINEBLANK_CSTN0rLCDCON3=(WDLY_CSTN19)|(HOZVAL_CSTN8)|(LINEBLANK_CSTN0); ; ; ; rLCDCON4=rLCDCON4=rLCDCON4=rLCDCON4=(MVAL 8MVAL 8MVAL 8MVAL 8)| | | |(WLH CSTN 0WLH CSTN 0WLH CSTN 0WLH CSTN22)22)22)22)1frameBuffer8Bit1frameBuffer8Bit1fram

731、eBuffer8Bit1););););05:50556初始化LCD rLCDSADDR2=M5D(U32)frameBuffer8Bit+(SCR_XSIZE_CSTN) rLCDSADDR2=M5D(U32)frameBuffer8Bit+(SCR_XSIZE_CSTN)* *LCD LCD _YSIZE_CSTN)1_YSIZE_CSTN)1);); rLCDSADDR3=(SCR_XSIZE_CSTN-LCD_XSIZE_CSTN)/2)11)|(LCD_ rLCDSADDR3=(SCR_XSIZE_CSTN-LCD_XSIZE_CSTN)/2)11)|(LCD_ XSIZE_CSTN

732、/2)XSIZE_CSTN/2); rDITHMODE=0rDITHMODE=0; rREDLUT=0xfdb96420rREDLUT=0xfdb96420; rGREENLUT=0xfdb96420rGREENLUT=0xfdb96420; rBLUELUT=0xfb40rBLUELUT=0xfb40; breakbreak; defaultdefault:breakbreak; 05:505573.常用的绘图函数 将将LCDLCD控制器配置为控制器配置为STN8STN8位位256256色显示屏之后,只需要修改帧缓冲的相应色显示屏之后,只需要修改帧缓冲的相应内容就可在内容就可在LCDLCD上

733、显示数据了。下面的函数上显示数据了。下面的函数PutCstnBBitPutCstnBBit()实现了在()实现了在LCDLCD的的(x,yx,y)处打点的功能。)处打点的功能。void PutCstn8Bit(U32x,U32 y,U32 c)void PutCstn8Bit(U32x,U32 y,U32 c) if(xSCR_XSIZE_CSTN& ySCR_YSIZE_CSTN)if(xSCR_XSIZE_CSTN& y(x)-(0xff000000(x)4)4)* *8)(c&0x000000ff) (4-1-8)(c&0x000000ff) (top(0,0)-(04d,04d,04d

734、)n04d)n”,ts_lefttop_x,ts_lefttop_y),ts_lefttop_x,ts_lefttop_y); PRINTF( PRINTF(“请触摸屏幕右下角位置请触摸屏幕右下角位置 n n”) );else if(ts_status=TS_JUSTIFY_RIGHTBOT)else if(ts_status=TS_JUSTIFY_RIGHTBOT) ts_rightbot_x=Ptx5 ts_rightbot_x=Ptx5; ts_rightbot_y=Pty5 ts_rightbot_y=Pty5; ts_status=TS_START ts_status=TS_STAR

735、T; PRINTF(PRINTF(“nRight bottom(319,239)-(nRight bottom(319,239)-(04d,04d,04d)n04d)n”,ts_rightbot_x,ts_rightbot_y),ts_rightbot_x,ts_rightbot_y) PRINTF( PRINTF(“22请点击触摸屏请点击触摸屏 n n”) );else else 05:50579触摸屏坐标计算 屏幕校准之后将自动转入到采集状态,获取的触摸屏坐标需要转换成为屏幕校准之后将自动转入到采集状态,获取的触摸屏坐标需要转换成为I_cnI_cn坐标,方法是根据获取的根据坐标,方法是根据

736、获取的根据LCDLCD左上角左上角(0,0(0,0)和右下角()和右下角(319,239)319,239)的的触摸屏坐标触摸屏坐标( (ts_lefttop_x,ts_left-top_y)ts_lefttop_x,ts_left-top_y)和和( (ts_rightbot_x,ts_rightbot ts_rightbot_x,ts_rightbot _y)_y)计算得到。计算得到。 计算公式如下计算公式如下: : ts_lcd_xts_lcd_x320-(x-ts_rightbot_x)*1.0/(ts_lefttop_x-ts_rightbot_x)*320.0320-(x-ts_ri

737、ghtbot_x)*1.0/(ts_lefttop_x-ts_rightbot_x)*320.0 ts_lcd_y ts_lcd_y(Pty5-ts_lefttop_y)*1.0/(ts_rightbot_y-ts_lefttop_y)*240.0(Pty5-ts_lefttop_y)*1.0/(ts_rightbot_y-ts_lefttop_y)*240.0 其中(其中(x x,y y)为待求点的触摸屏坐标:)为待求点的触摸屏坐标:05:50580触摸屏坐标计算代码代码如下所示:代码如下所示:ts_lcd_xts_lcd_x=320-(Ptx5-ts_rightbot_x)*1.0/(ts

738、_lefttop_x-ts_rightbot_x)*320.0=320-(Ptx5-ts_rightbot_x)*1.0/(ts_lefttop_x-ts_rightbot_x)*320.0;ts_lcd_yts_lcd_y=(Pty5-ts_lefttop_y)*1.0/(ts_rightbot_y_ts_lefttop_y)* 240.0=(Pty5-ts_lefttop_y)*1.0/(ts_rightbot_y_ts_lefttop_y)* 240.0; if(ts_lcd_xif(ts_lcd_x319)ts_lcd_x=319319)ts_lcd_x=319; if(ts_lcd_

739、xif(ts_lcd_x0)ts_lcd_x=00)ts_lcd_x=0;if(ts_lcd_yif(ts_lcd_y239)ts_lcd_x=239239)ts_lcd_x=239;if(ts_lcd_yif(ts_lcd_y0)ts_lcd_x=0B 200mVAB 200mV,RORO将是将是高电平高电平;如果;如果AB Aarmcc-helpC:armcc-help”可可以以查查看看armccarmcc的的语语法格式以及最法格式以及最常用常用的一些的一些操作选项操作选项。(2 2)armcpp: armcpp: armcpparmcpp是是ARMARM C+C+编编译译器器。它它将将I

740、SO ISO C+C+或或EC+EC+源源码码编编译译成成3232位位ARMARM指令代码指令代码; ;(3 3)tcc: tcctcc: tcc是是Thumb CThumb C编译器编译器。编译器通过了。编译器通过了Plum Hall C Validation Plum Hall C Validation SuiteSuite为为ANSIANSI一致性测试。一致性测试。tcctcc将将ANSICANSIC源代码编译源代码编译成成1616位的位的ThumbThumb指令代码指令代码。 05:51772命令行开发工具(4 4)tcpp: tcpptcpp: tcpp是是Thumb C+Thumb

741、 C+编译器编译器。它将。它将ISO C+ISO C+或或EC+EC+源码编译源码编译成成1616位位ThumbThumb指令代码指令代码; ;armcpparmcpp、tcctcc和和tcpptcpp的命令行格式与的命令行格式与armccarmcc相同。相同。(5 5)armsm: armsmarmsm: armsm是是ARMARM和和ThumbThumb的的汇编器汇编器. .它对用它对用ARMARM汇编语言汇编语言和和ThumbThumb汇编汇编语言语言写的源代码进行写的源代码进行汇编汇编; ;(6 6)armlink: armlinkarmlink: armlink是是ARMARM连接器

742、连接器。该命令即可以将编译得到的一个或多。该命令即可以将编译得到的一个或多个个目标文件目标文件和相关的一个或多个和相关的一个或多个库文件库文件进行进行链接链接,生成一个,生成一个可执行文件可执行文件,也,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。ARMARM链链接器生成的是接器生成的是ELFELF格式的可执行映像文件格式的可执行映像文件; ;(7 7)armsd: armsdarmsd: armsd是是ARMARM和和ThumbThumb的的符号调试器符号调试器。它能够进行。它能够进行源码级源码级的的程序程序调试调

743、试。用户可以在用。用户可以在用C C语言或汇编语言写的代码中进行语言或汇编语言写的代码中进行单步调试单步调试,设置,设置断点断点,查看查看变量变量值和值和内存内存单元的单元的内容内容。05:517732.GUI开发环境 图形用户界面图形用户界面(graphic user interface,(graphic user interface,简称简称gui)gui)的大量使用很好的方的大量使用很好的方便了非专业用户的使用。便了非专业用户的使用。guigui应用程序的设计是嵌入式系统设计的一个关键应用程序的设计是嵌入式系统设计的一个关键技术,能极大地提高技术,能极大地提高人机交互人机交互的效率。的效

744、率。 ADS GUI ADS GUI开发环境主要包含开发环境主要包含Code WarriorCode Warrior和和AXDAXD,其中,其中Code WarriorCode Warrior是用是用于于编译编译和和链接链接的的集成开发工具集成开发工具,而,而AXDAXD则是支持则是支持单步执行单步执行、断点设置断点设置等功能等功能的的集成调试工具集成调试工具。(1 1)Code WarriorCode Warrior Code Warrior for ARM Code Warrior for ARM是一套完整的是一套完整的集成开发工具集成开发工具,充分发挥了,充分发挥了ARM ARM RIS

745、CRISC指令系统的优势指令系统的优势, ,可加速并简化开发过程的环节,只用集成软件开发环可加速并简化开发过程的环节,只用集成软件开发环境就能研制出境就能研制出ARMARM产品。在开发过程中无需离产品。在开发过程中无需离Code WarriorCode Warrior开发环境,可节开发环境,可节省开发时间省开发时间, ,将精力投入到代码编写上。将精力投入到代码编写上。Code Warrior IDECode Warrior IDE为管理和开发项为管理和开发项目提供了简单、多样化的图形用户界面。用户可以使用目提供了简单、多样化的图形用户界面。用户可以使用ADSADS的的Code Warrior

746、Code Warrior IDEIDE为为ARMARM处理器开发处理器开发使用使用C C、C+C+或或ARMARM汇编语言汇编语言的程序的程序代码代码。Code Warrior Code Warrior IDEIDE缩短缩短了用户了用户开发项目代码开发项目代码的的周期周期,主要基于两点,主要基于两点: :一是全面的一是全面的项目管理项目管理功功能能; ;二是二是子函数子函数的代码的代码导航功能导航功能,使得用户迅速找到程序中的子函数。,使得用户迅速找到程序中的子函数。 05:51774GUI开发环境(2 2)AXDAXD调试器调试器 AXD AXD调试器调试器本身是一个软件,用户通过这个软件可

747、以对包含本身是一个软件,用户通过这个软件可以对包含有调试信息的、正在运行的可执行代码进行有调试信息的、正在运行的可执行代码进行变量变量的的查看查看、断点断点的的设置设置、单步执行单步执行等调试操作。在等调试操作。在ARMARM体系中,它有体系中,它有Multi-ICEMulti-ICE、ARMulatorARMulator和和AngelAngel等几种方式。等几种方式。AXDAXD可以在可以在WindowsWindows和和UNIXUNIX下进下进行程序的行程序的调试调试,它为用,它为用C C、C+C+和汇编语言的和汇编语言的源代码提供源代码提供了一个了一个全面的全面的WindowsWindo

748、ws和和UNIXUNIX环境环境。05:517753.实用程序 ADSADS提供实用工具来配合前面介绍的提供实用工具来配合前面介绍的命令行开发工具命令行开发工具使用。使用。(1 1)fromELFfromELF是是ARMARM映像映像文件转换工具文件转换工具。该工具可以将。该工具可以将ELFELF格式文件转换为格式文件转换为各种输出格式的文件,包括各种输出格式的文件,包括Plain Binary(BINPlain Binary(BIN格式映像文件格式映像文件) )、Free scale Free scale 32 bit S-record format(Frees-cale 3232 bit

749、S-record format(Frees-cale 32位位S S格式映像文件格式映像文件) )、Intel Hex 32 Intel Hex 32 format(Intel 32format(Intel 32位格式映像文件位格式映像文件) )和和Verilog-like hex format(VerilogVerilog-like hex format(Verilog十十六进制文件六进制文件) )。它也能够为输入映像文件产生代码和数据长度等文本信息。它也能够为输入映像文件产生代码和数据长度等文本信息。(2 2)armararmar是是ARMARM库库函数生成器函数生成器,它将一系列,它将一

750、系列ELFELF格式的格式的目标文件目标文件以以库函数库函数的的形式集合形式集合在一起,用户可以把一个库传递给一个链接器,以代替几个在一起,用户可以把一个库传递给一个链接器,以代替几个ELFELF文文件。这个工具可用于开发库文件,以提供给应用程序员做二次开发。件。这个工具可用于开发库文件,以提供给应用程序员做二次开发。(3 3)FlashFlash downloaderdownloader用于把二进制映像文件用于把二进制映像文件下载下载到到ARMARM嵌入式设备上嵌入式设备上的的 FlashFlash存储器中。存储器中。05:517769.1.3CodeWarriorIDE的创建 Code C

751、ode Warrior Warrior IDEIDE提提供供了了一一个个简简单单的的图图形形化化用用户户界界面面用用于于管管理理软软件件项项目目,支持支持C C、C+C+和和ARMARM的开发。通过的开发。通过实例实例讲述讲述Code Warrior IDECode Warrior IDE的的具体使用具体使用。1.1.创建项目工程创建项目工程(1 1)新建工程)新建工程 “开开始始”菜菜单单中中选选择择ARM ARM Developer Developer Suite Suite v1.2v1.2Code Code Warrior Warrior for for ARM ARM Develop

752、eDevelope:SuiteSuite,运运行行ADS1.2ADS1.2集集成成开开发发环环境境( (Code Code Warrior Warrior for for ARM ARM Developer Developer Suite)Suite),选选择择FileFileNewNew项项,在在NewNew对对话话框框中中,选选择择ProjectProject选选项项卡卡,ARM ARM Executable Executable lmagelmage,在在Project Project namename文文本本框框中中输输入入项项目目的的名名称称,在在LocationLocation中输

753、入其存放的位置中输入其存放的位置( (见图见图9.1.2)9.1.2)。 注意:注意:ADSl.2ADSl.2不支持中文的目录名字,所以新建工程的文件夹向上一直不支持中文的目录名字,所以新建工程的文件夹向上一直到根目录的所有文件夹的名字都要英文。到根目录的所有文件夹的名字都要英文。 05:51777新建工程 在新建工程对话框中为用户提供了在新建工程对话框中为用户提供了7 7种可选择的工程类型:种可选择的工程类型: (1) (1)ARM Executable lmage ARM Executable lmage 由由ARMARM指令代码生成指令代码生成ELFELF格式可执行映像文件。格式可执行映

754、像文件。 (2) (2)ARM Object Library ARM Object Library 由由ARMARM指令的代码生成指令的代码生成armararmar格式的目标文件库。格式的目标文件库。 (3) (3)Empty Project Empty Project 用于创建一个不包含任何库或源文件的工程。用于创建一个不包含任何库或源文件的工程。 (4)(4)Makefile Makefile lmporter lmporter WizardWizard将将Visual Visual C C语语言言的的nmakenmake或或GNU GNU makemake文文件件转转入到入到Code W

755、arrior IDECode Warrior IDE工程文件。工程文件。 (5)(5)Thumb Thumb ARM ARM Interworking Interworking lmagelmage用用于于由由ARMARM指指令令和和ThumbThumb指指令令的的混混和和代代码码生成一个可执行的生成一个可执行的ELFELF格式的映像文件。格式的映像文件。 (6) (6)Thumb Executable Image Thumb Executable Image 由由ThumbThumb指令创建一个指令创建一个ELFELF格式的映像文件。格式的映像文件。 (7) (7)Thumb Object

756、LibraryThumb Object Library由由ThumbThumb指令代码生成指令代码生成armararmar格式的目标文件库。格式的目标文件库。 05:51778(2)选择Debug版本 在新建的工程中在新建的工程中, ,选择选择DebugDebug版本,生成目录选项版本,生成目录选项 每个工程目录都有每个工程目录都有3 3种种生成目标生成目标: Debug Debug 包含包含所有所有的的调试信息调试信息。 DebugRel DebugRel 包含包含部分部分调试调试信息信息。 Release Release 不包含不包含调试调试信息信息的发行版本。的发行版本。 05:5177

757、9(3)Post-Linker选项 从从EditEdit下拉菜单中选择下拉菜单中选择Debug SettingDebug Setting,弹出图所示对话框,选中,弹出图所示对话框,选中Target Target SettingsSettings项,在项,在Post-linkerPost-linker列表框中选中列表框中选中ARM fromELFARM fromELF项,单击项,单击OKOK按钮。这按钮。这是为是为生成可执行的代码生成可执行的代码的的初始开关初始开关。05:51780(4) 选择要编译的CPU核 如下图所示,单击如下图所示,单击ARM AssemblerARM Assembler

758、,在,在Architecture or ProcessorArchitecture or Processor列表列表框中框中选择选择要编译的要编译的CPUCPU核。此处以核。此处以ARM920TARM920T为例。为例。05:51781ARM C Compiler选项 如下图,单击如下图,单击ARM C CompilerARM C Compiler,在,在Architecture or ProcessorArchitecture or Processor列表框中列表框中选择选择ARM920TARM920T。这是要。这是要编译的编译的CPUCPU核核。05:51782(5)设定起始地址 如下图,

759、单击如下图,单击ARMLinkerARMLinker,在,在OutputOutput选项卡中选项卡中设定程序的代码段地址设定程序的代码段地址,以,以及及数据使用的地址数据使用的地址。在图。在图9.1.79.1.7中的中的ROBaseROBase文本框中填写文本框中填写程序代码程序代码存放的起存放的起始始地址地址,一般为,一般为FlashFlash的起始地址;的起始地址;RW BaseRW Base文本框中填写文本框中填写数据存放数据存放的起始地的起始地址,一般为址,一般为SDRAMSDRAM的起始地址。的起始地址。05:51783(6)设置ARM from ELF选项 如下图,即在如下图,即在

760、Debug SettingsDebug Settings对话框中单击左栏的对话框中单击左栏的ARM from ELFARM from ELF项,在项,在Out-put file nameOut-put file name框中设置框中设置输出文件名输出文件名* *.bin.bin,前缀名可以自己取;在,前缀名可以自己取;在Output formatOutput format列表框中选择列表框中选择Plain binaryPlain binary,这是设置要下载到,这是设置要下载到F1ashF1ash中的中的二二进制文件进制文件。下图选择的是。下图选择的是test.bintest.bin。05:5

761、1784(7)保存新建的项目文件 ADSl.2ADSl.2中的基本设置中的基本设置完成后完成后,可以将该新建的空项目文件作,可以将该新建的空项目文件作为为模板保存模板保存。首先,要将该项目工程文件改一个。首先,要将该项目工程文件改一个合适的名字合适的名字,如如S3C2410 ARM.mcpS3C2410 ARM.mcp等;然后,在等;然后,在ADSl.2ADSl.2软件安装的目录下的软件安装的目录下的StationaryStationary目录下目录下新建新建一个合适的一个合适的模板目录名模板目录名,如,如S3C2410 ARM S3C2410 ARM Executable lmageExec

762、utable lmage;再将刚刚设置完的;再将刚刚设置完的S3C2410 ARM.mcpS3C2410 ARM.mcp项目文项目文件件存放存放到该到该目录下目录下即可。这样,就能在图即可。这样,就能在图9.1.89.1.8中看到该模板。中看到该模板。接下来就可以编写接下来就可以编写C C语言或者汇编语言程序语言或者汇编语言程序( (后缀为后缀为.s).s),并添加,并添加到这个工程中来。到这个工程中来。05:517852.对工程进行编译和链接 对前面创建的工程进行编译、链接。可以打开对前面创建的工程进行编译、链接。可以打开ADSADS自带的自带的ExampleExample进行学进行学习习,

763、例如打开示例,例如打开示例C:Program FilesARMADSvl_2ExamplesasmC:Program FilesARMADSvl_2Examplesasm下的下的armex.mcparmex.mcp工程文件,如下图。工程文件,如下图。05:51786对工程进行编译和链接 选选择择菜菜单单ProjectMakeProjectMake项项对对工工程程进进行行编编译译和和链链接接,MakeMake的的行行为为包包括括以以下下过程过程: 编译编译和和汇编源程序汇编源程序文件,文件,产生产生*.*.o o对象文件;对象文件; 链接链接对象文件和库产生对象文件和库产生可执行映像文件可执行映

764、像文件; 产生产生二进制代码二进制代码。 MakeMake之之后后将将弹弹出出Errors Errors & & WarningsWarnings对对话话框框,报报告告出出错错和和警警告告情情况况。编编译译成功后的显示如图成功后的显示如图9.1.109.1.10所示。所示。 注意:左上方表示的错误和警告数目都是注意:左上方表示的错误和警告数目都是0 0。05:51787编译和链接后的结果 MakeMake结束后产生了结束后产生了可执行映像文件可执行映像文件( (axfaxf文件文件) )。这个文件可以载人。这个文件可以载人AXDAXD进进行行仿真调试仿真调试,也可以采用,也可以采用fromEL

765、FfromELF工具将其转换为工具将其转换为二进制格式二进制格式文件,以文件,以烧录烧录到嵌人式设备的到嵌人式设备的FlashROMFlashROM中,或者中,或者下载下载到嵌入式设备的内存中到嵌入式设备的内存中调试运行调试运行。 05:517889.1.4AXD调试器的使用 AXDAXD是是ADSADS套套件件中中的的IDEIDE调调试试器器,打打开开AXDAXD软软件件,默默认认打打开开的的目目标标是是ARMulatorARMulator方方式式。这这里里以以ARMulatorARMulator模模拟拟器器方方式式为为例例,介介绍绍在在AXDAXD中进行中进行代码调试代码调试的的方法方法和

766、和过程过程。 1.1.启动启动AXDAXD,配置配置CPUCPU环境环境 有有两种方式两种方式可以可以启动启动AXDAXD:一种是在一种是在Code WarriorCode Warrior中编译、中编译、链接成功后,选择链接成功后,选择ProjectProject菜单菜单下的下的DebugDebug就可以自动启动就可以自动启动AXDAXD,并同时会将并同时会将axfaxf映像文件映像文件装载装载到到模拟器模拟器中;另一种方式就是从中;另一种方式就是从“开始开始”菜单中单击菜单中单击AXD AXD DebuggerDebugger项启动项启动。 05:517892.装入映像文件 在菜单在菜单Fi

767、leFile中选择中选择Load lmageLoad lmage选项,打开选项,打开Load lmageLoad lmage对话框,对话框,找到要找到要装载装载的的axfaxf映像文件映像文件,单击,单击“打开打开”按钮,把映像文件装按钮,把映像文件装载到目标内存中。在映像文件中有个蓝色的箭头指示当前执行载到目标内存中。在映像文件中有个蓝色的箭头指示当前执行的位置。比如对于的位置。比如对于armex.mcparmex.mcp,打开映像文件后的界面如下图。打开映像文件后的界面如下图。05:51790装入映像文件 如如果果不不能能自自动动装装载载映映像像文文件件,窗窗口口是是空空白白的的,则则说说

768、明明在在AXDAXD软软件件中中还还没没加加载载CPUCPU内内核核,需需手手动动将将CPUCPU内内核核加加载载。选选择择菜菜单单项项OptionConfigure OptionConfigure TargetTarget,对对调调试试目目标标进进行行配配置置,如如图图9.1.129.1.12所示。所示。 从从图图9.1.129.1.12可可看看出出,这这里里的的软软件件模模拟拟器器用用的的是是ARMUL.dllARMUL.dll驱驱动动程程序序。选选择择ConfigureConfigure,弹弹出出ARMulator ARMulator ConfigurationConfiguration

769、对对话话框框,如如图图9.1.139.1.13所所示示。在在此此对对话话框框加加入入目目标标CPUCPU内内核核,并并且且选选择择数据存储模式数据存储模式( (小端模式或大端模式小端模式或大端模式) )。 配置结束,再通过配置结束,再通过FileLoad lmageFileLoad lmage命令装入命令装入AXDAXD映像文件映像文件即可。即可。05:517913.程序的调试 通过菜单通过菜单ExcuteExcute来进行来进行单步单步执行、执行、断点断点设置等操作,也可以设置等操作,也可以通过菜单通过菜单Processor ViewsProcessor Views来来观测观测CPUCPU的

770、的寄存器寄存器、程序中的、程序中的变量变量、内存内存等值变换情况。等值变换情况。05:51792 ARMulator Configuration对话框 05:517939.2ARM汇编伪指令 9.2.19.2.1数据常量定义伪指令数据常量定义伪指令9.2.29.2.2数据变量定义伪指令数据变量定义伪指令9.2.39.2.3内存分配伪指令内存分配伪指令9.2.49.2.4汇编控制伪指令汇编控制伪指令9.2.59.2.5其他常用的伪指令其他常用的伪指令05:51794ARM汇编伪指令 在在ARMARM汇编语言程序里,有一些汇编语言程序里,有一些特殊指令助记符特殊指令助记符,这些助记,这些助记符与指

771、令系统的助记符不同,符与指令系统的助记符不同,没有没有相对应的相对应的操作码操作码,也就是,也就是不不会会生成机器码生成机器码,仅仅是在编译器软件中起着,仅仅是在编译器软件中起着格式化格式化的的作用作用,通,通常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用常称这些特殊指令助记符为伪指令。伪指令在源程序中的作用是为是为完成汇编程序完成汇编程序作各种作各种准备工作准备工作的,这些伪指令仅在的,这些伪指令仅在汇编过汇编过程中起作用程中起作用,一旦汇编结束,伪指令的使命就完成。,一旦汇编结束,伪指令的使命就完成。 在在ARMARM的汇编程序中,有如下几种伪指令:的汇编程序中,有如下几种伪指令:

772、数据常量定义数据常量定义伪伪指令、指令、数据变量定义数据变量定义伪指令、伪指令、内存分配内存分配伪指令伪指令及其他伪指令及其他伪指令。05:517959.2.1数据常量定义伪指令 数据常量定义伪指令数据常量定义伪指令EQUEQU用于为程序中的常量、标号等定义用于为程序中的常量、标号等定义一个一个等效的字符名称等效的字符名称,类似于,类似于C C语言中的语言中的#define#define。 EQUEQU语法格式语法格式:名称:名称 EQU EQU 表达式表达式 ,类型,类型 ;其中;其中EQUEQU可用可用“* *”代替。代替。 EQUEQU伪指令定义的字符名称,当表达式为伪指令定义的字符名称

773、,当表达式为3232位常量时位常量时, ,可指定可指定表达式的数据类型表达式的数据类型, ,有三种有三种类型类型:CODE16CODE16、CODE32CODE32和和DATADATA。示例:示例:Data_in EQU 100 Data_in EQU 100 ;定义标号定义标号Data_inData_in的值为的值为100100Addr EQU 0xff,CODE32;Addr EQU 0xff,CODE32;定义定义AddrAddr值为值为0 0xff,xff,3232位的位的ARMARM指令指令05:517969.2.2数据变量定义伪指令 数据变量定义伪指令用于数据变量定义伪指令用于定义

774、定义ARMARM汇编程序汇编程序中的中的变量变量、对变量赋值以及定、对变量赋值以及定义寄存器的别名等操作。常见的数据变量定义伪指令有如下几种:义寄存器的别名等操作。常见的数据变量定义伪指令有如下几种: (1 1)GBLAGBLA、GBLLGBLL和和GBLSGBLS 语法格式:语法格式:GBLA GBLA ( GBLL GBLL 或或 GBLS GBLS ) 全局变量名全局变量名 GBLAGBLA、GBLLGBLL和和GBLS GBLS 伪指令用于定义全局变量伪指令用于定义全局变量, ,并将其初始化。其中:并将其初始化。其中: GBLAGBLA用于定义一个用于定义一个全局的数字变量全局的数字变

775、量,并初始化为,并初始化为 0 0 ; GBLLGBLL用于定义一个用于定义一个全局的逻辑变量全局的逻辑变量,并初始化,并初始化F F(假);(假); GBLSGBLS用于定义一个用于定义一个全局的字符串变量全局的字符串变量,并初始化为空;,并初始化为空; 以上以上3 3条伪指令用于定义全局变量条伪指令用于定义全局变量, ,在整个程序范围内变量名必须唯一。在整个程序范围内变量名必须唯一。 示例:示例: GBLA Test1 GBLA Test1 ;定义一个全局的数字变量,变量名为;定义一个全局的数字变量,变量名为Test1Test1 GBLL Test2 GBLL Test2 ;定义一个全局的

776、逻辑变量,变量名为;定义一个全局的逻辑变量,变量名为Test2Test2 GBLS Test3 GBLS Test3 ;定义一个全局的字符串变量,变量名为;定义一个全局的字符串变量,变量名为Test3Test305:51797(2)LCLA、LCLL和LCLS 语法格式:语法格式: LCLA LCLA(LCLLLCLL或或LCLSLCLS) 局部变量名局部变量名 LCLA LCLA、LCLLLCLL和和LCLSLCLS伪指令用于定义一个伪指令用于定义一个ARMARM程序中的局部变量,并将其初程序中的局部变量,并将其初始化。始化。 LCLALCLA伪指令用于定义一个伪指令用于定义一个局部的数字变

777、量局部的数字变量,并初始化为,并初始化为0 0; LCLLLCLL伪指令用于定义一个伪指令用于定义一个局部的逻辑变量局部的逻辑变量并初始化为并初始化为F F(假);(假); LCLSLCLS伪指令用于定义一个伪指令用于定义一个局部的字符串变量局部的字符串变量,并初始化为空。,并初始化为空。 以上伪指令用于声明局部变量,在其作用范围内变量名必须唯一。以上伪指令用于声明局部变量,在其作用范围内变量名必须唯一。 示例:示例: LCLA LCLA Test4 Test4 ;声明一个局部的数字变量,变量名为;声明一个局部的数字变量,变量名为Test4Test405:51798(3)SETA、SETL和S

778、ETS 语法格式:语法格式: 变量名变量名 SETASETA(SETLSETL或或SETSSETS) 表达式表达式 变量名为已定义过的全局变量或局部变量变量名为已定义过的全局变量或局部变量, ,表达式为将要表达式为将要赋给变量的值赋给变量的值。 伪指令伪指令SETASETA、SETLSETL和和SETSSETS给一个已定义的全局变量或局部变量赋值。给一个已定义的全局变量或局部变量赋值。 SETASETA伪指令用于伪指令用于给一个数学变量赋值给一个数学变量赋值; SETLSETL伪指令用于伪指令用于给一个逻辑变量赋值给一个逻辑变量赋值; SETSSETS伪指令用于伪指令用于给一个字符串变量赋值给

779、一个字符串变量赋值。 示例示例 Test1 SETA 0xaa Test1 SETA 0xaa ;将该变量赋值为;将该变量赋值为0xaa0xaa Test2 SETL TRUE Test2 SETL TRUE ;将该变量赋值为真;将该变量赋值为真 Test3 SETS Test3 SETS “TestingTesting” ;将该变量赋值为;将该变量赋值为“TestingTesting”05:51799(4)RLIST 语法格式:语法格式: 名称名称 RLISTRLIST寄存器列表寄存器列表 RLIST RLIST伪指令可用于对一个通用伪指令可用于对一个通用寄存器列表定义名称寄存器列表定义名称

780、,使用该伪指令定义,使用该伪指令定义的名称可在的名称可在ARMARM指令指令LDM/STMLDM/STM中使用。在中使用。在LDM/STMLDM/STM指令中,列表中的寄存器访指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。 示例:示例: RegList RLIST R0-R5 RegList RLIST R0-R5,R8R8,R10 R10 ;将寄存器列表名称定义为;将寄存器列表名称定义为RegListRegList,可在可在ARMARM指令指令LDM/STMLDM/STM中通过该名称

781、访问寄存器列表。中通过该名称访问寄存器列表。05:518009.2.3内存分配伪指令内存分配伪指令一般用于为内存分配伪指令一般用于为特定的数据分配存储单元特定的数据分配存储单元,同时完成已分配存,同时完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:储单元的初始化。常见的数据定义伪指令有如下几种:(1 1)DCBDCB 标号标号标号标号 DCB DCB DCB DCB 表达式表达式表达式表达式 DCB DCB DCB DCB伪指令伪指令伪指令伪指令分配分配一片连续的一片连续的一片连续的一片连续的字节存储单元字节存储单元,并用伪指令中指定的表达式初,并用伪指令中指定的表达式初,并用伪指

782、令中指定的表达式初,并用伪指令中指定的表达式初始化。表达式可以为始化。表达式可以为始化。表达式可以为始化。表达式可以为0 0 0 0255255255255的数字或字符串。的数字或字符串。的数字或字符串。的数字或字符串。DCBDCBDCBDCB也可用等号(也可用等号(也可用等号(也可用等号(= = = =)代替。)代替。)代替。)代替。(2 2 2 2)DCW(DCW(DCW(DCW(或或或或DCWU)DCWU)DCWU)DCWU) 标号标号标号标号 DCW(DCW(DCW(DCW(或或或或DCWU) DCWU) DCWU) DCWU) 表达式表达式表达式表达式 DCW DCW DCW DCW

783、或或或或DCWUDCWUDCWUDCWU伪指令伪指令伪指令伪指令分配分配一片连续的一片连续的一片连续的一片连续的半字存储单元半字存储单元。表达式为程序标号或数。表达式为程序标号或数。表达式为程序标号或数。表达式为程序标号或数字表达式。字表达式。字表达式。字表达式。DCWDCWDCWDCW分配的字是半字对齐的,分配的字是半字对齐的,分配的字是半字对齐的,分配的字是半字对齐的,DCWUDCWUDCWUDCWU分配的字并不严格半字对齐。分配的字并不严格半字对齐。分配的字并不严格半字对齐。分配的字并不严格半字对齐。(3 3 3 3)DCD(DCD(DCD(DCD(或或或或DCDU)DCDU)DCDU)

784、DCDU) 标号标号标号标号 DCD(DCD(DCD(DCD(或或或或DCDU) DCDU) DCDU) DCDU) 表达式表达式表达式表达式 DCD DCD DCD DCD或或或或DCDUDCDUDCDUDCDU伪指令用于伪指令用于伪指令用于伪指令用于分配分配一片连续的一片连续的一片连续的一片连续的字存储单元字存储单元。表达式可以是程序标。表达式可以是程序标。表达式可以是程序标。表达式可以是程序标号或数字表达式。号或数字表达式。号或数字表达式。号或数字表达式。DCDDCDDCDDCD也可用也可用也可用也可用“ “& & & &” ”代替。用代替。用代替。用代替。用DCDDCDDCDDCD分配

785、的字存储单元是字对齐分配的字存储单元是字对齐分配的字存储单元是字对齐分配的字存储单元是字对齐的,而用的,而用的,而用的,而用DCDUDCDUDCDUDCDU分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。05:51801内存分配伪指令(4 4)DCFD(DCFD(或或DCFDU)DCFDU) 标号标号 DCFD(DCFD(或或DCFDU) DCFDU) 表达式表达式 DCFD DCFD或或DCFDUDCFDU伪指令用于为伪指令用于为双精度的浮点数分配双精度的浮点数分配一片连续的一片连续的字存储单元字存储单元。每个双

786、精度的浮点数占据每个双精度的浮点数占据两个字单元两个字单元。用。用DCFDDCFD分配的宇存储单元是字对齐的,分配的宇存储单元是字对齐的,而用而用DCFDUDCFDU分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。(5 5)DCFS(DCFS(或或DCFSU)DCFSU) 标号标号 DCFS(DCFS(或或DCFSU) DCFSU) 表达式表达式 DCFS DCFS或或DCFSUDCFSU伪指令用于为伪指令用于为单精度的浮点数单精度的浮点数分配一片连续的分配一片连续的字存储单元字存储单元。每个单精度的浮点数占据每个单精度的浮点数占据一个字单元一个字单元。用。用DCFSDCFS分

787、配的字存储单元是字对齐的,分配的字存储单元是字对齐的,而用而用DCFSUDCFSU分配的字存储单元并不严格字对齐。分配的字存储单元并不严格字对齐。(6 6)DCQ(DCQ(或或DCQU)DCQU) 标号标号 DCQ(DCQ(或或DCQU) DCQU) 表达式表达式 DCQ DCQ或或DCQUDCQU伪指令用于伪指令用于分配分配一片以一片以8字节为单位字节为单位的连续的连续存储区域存储区域,并用伪,并用伪指令中指定的表达式初始化。用指令中指定的表达式初始化。用DCQDCQ分配的存储单元是字对齐的,而用分配的存储单元是字对齐的,而用DCQUDCQU分配的存储单元并不严格字对齐。分配的存储单元并不严

788、格字对齐。05:51802内存分配伪指令(7 7)SPACESPACE 标号标号 SPACE SPACE 表达式表达式 用于用于分配一片连续的存储区域分配一片连续的存储区域并初始化为并初始化为0 0。SPACESPACE可用可用“”代替。代替。(8 8)MAPMAP MAP MAP 表达式表达式 ,基址寄存器,基址寄存器 定义定义一个一个结构化的内存表结构化的内存表的的首地址首地址。MAPMAP可用可用“ ”代替。基址寄存器为可代替。基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存

789、表的首地址为表达式的值与基址寄存器的和。选项存在时,内存表的首地址为表达式的值与基址寄存器的和。 MAP MAP伪指令通常与伪指令通常与FIELDFIELD伪指令配合使用来定义结构化的内存表。伪指令配合使用来定义结构化的内存表。(9 9)FIELDFIELD 标号标号 FIELD FIELD 表达式表达式 定义定义一个一个结构化内存表结构化内存表中的中的数据域数据域。FIELDFIELD可用可用“# #”代替。表达式的值为代替。表达式的值为当前数据域在内存表中所占的字节数。当前数据域在内存表中所占的字节数。 FIELD FIELD伪指令常与伪指令常与MAPMAP伪指令配合使用来定义结构化的内存

790、表。伪指令配合使用来定义结构化的内存表。MAPMAP伪指令伪指令定义内存表的首地址,定义内存表的首地址,FIELDFIELD伪指令定义内存表中的各个数据域。伪指令定义内存表中的各个数据域。 注意:注意:MAPMAP和和FIELDFIELD伪指令仅用于定义数据结构伪指令仅用于定义数据结构, ,并不实际分配存储单元。并不实际分配存储单元。05:518039.2.4汇编控制伪指令 用于用于控制控制汇编程序的汇编程序的执行流程执行流程,常用的汇编控制伪指令包括以下几条:,常用的汇编控制伪指令包括以下几条:(1 1)IFIF、ELSEELSE、ENDIFENDIF IF IF逻辑表达式逻辑表达式 指令序

791、列指令序列1 1 ELSEELSE 指令序列指令序列2 2 ENDIF ENDIF IF IF、ELSEELSE、ENDIFENDIF伪指令能伪指令能根据条件的成立与否根据条件的成立与否决定是否决定是否执行某个指令序执行某个指令序列列。当。当IFIF后面的逻辑表达式为真,则执行指令序列后面的逻辑表达式为真,则执行指令序列1 1,否则执行指令序列,否则执行指令序列2 2。(2 2)WHILE WHILE 、WENDWEND WHILE WHILE 逻辑表达式逻辑表达式 指令序列指令序列 WEND WEND 伪指令伪指令根据条件的成立与否根据条件的成立与否决定是否决定是否循环执行指令序列循环执行指

792、令序列。当。当WHILEWHILE后面的后面的逻辑表达式为真,则执行指令序列,该指令序列执行完后,再判断逻辑表达逻辑表达式为真,则执行指令序列,该指令序列执行完后,再判断逻辑表达式的值,若为真则继续执行,一直到逻辑表达式为假。式的值,若为真则继续执行,一直到逻辑表达式为假。05:51804汇编控制伪指令(3 3)MACROMACRO、MENOMENO MACRO $ MACRO $标号宏名标号宏名 $ $参数参数1 1,$ $参数参数2 2, 指令序列指令序列 MEND MEND MACRO MACRO、MENDMEND伪指令伪指令将一段代码定义为一个整体将一段代码定义为一个整体,程序中通过,

793、程序中通过宏指令宏指令多次多次调用该段代码调用该段代码。$ $标号在宏指令被展开时,标号会被替换为用户定义的符号,标号在宏指令被展开时,标号会被替换为用户定义的符号,宏指令可用一个或多个参数,宏指令被调用时,参数被相应的值替换。宏指令可用一个或多个参数,宏指令被调用时,参数被相应的值替换。 宏指令的使用方式和功能与子程序相似宏指令的使用方式和功能与子程序相似, ,子程序节省存储空间并提高运行子程序节省存储空间并提高运行速度速度, ,但需要保护现场但需要保护现场, ,在代码较短且需传递参数较多时在代码较短且需传递参数较多时, ,可使用宏指令。可使用宏指令。 MACRO MACRO和和MENDME

794、ND间的指令序列称间的指令序列称宏定义体宏定义体,宏定义体的第一行应声明宏的原,宏定义体的第一行应声明宏的原型型( (含宏名、参数含宏名、参数) )。源程序编译时,将。源程序编译时,将宏调用展开宏调用展开,用宏定义中的指令序列,用宏定义中的指令序列代替程序中的宏调用,并将实际参数的值传递给宏定义中的形式参数。代替程序中的宏调用,并将实际参数的值传递给宏定义中的形式参数。 MACROMACRO、MENDMEND伪指令可以嵌套使用。伪指令可以嵌套使用。(4 4)MEXITMEXIT MEXIT MEXIT MEXIT MEXIT用于用于从宏定义中跳转出去从宏定义中跳转出去。 05:518059.2

795、.5其他常用的伪指令 还有一些其他的伪指令,在汇编程序中经常会被使用,主要包括还有一些其他的伪指令,在汇编程序中经常会被使用,主要包括AREAAREA、ALIGNALIGN、CODEl6CODEl6、CODE32CODE32、ENTRYENTRY、ENDEND、EXPOR(EXPOR(或或GLOBAL)IMPORTGLOBAL)IMPORT、EXTERNEXTERN、GET(GET(或或INCLUDE)INCBININCLUDE)INCBIN、RNRN、ROUTROUT等。等。(1 1)AREAAREA AREA AREA 段名段名 属性属性1 1,属性,属性2 2, AREA AREA定义定

796、义一个一个代码段代码段或或数据段数据段。段名若以数字开头。段名若以数字开头, ,需用需用“| |”括起来括起来, ,如如|1_test|1_test|;属性段表示该代码段;属性段表示该代码段( (或数据段或数据段) )的相关属性的相关属性, ,常用的属性如下:常用的属性如下: CODECODE属性属性:用于定义:用于定义代码段代码段, ,默认为默认为READONLYREADONLY; DATADATA属性属性:用于定义:用于定义数据段数据段, ,默认为默认为READWRITEREADWRITE; READONLYREADONLY属性属性:指定本段为:指定本段为只读只读, ,代码段默认为代码段默

797、认为READONLYREADONLY; READWRITEREADWRITE属性属性:指定本段为:指定本段为可读可写可读可写, ,数据段的默认属性为数据段的默认属性为READWRITEREADWRITE; ALIGNALIGN属性属性:使用方式为:使用方式为ALIGNALIGN表达式。默认时表达式。默认时,ELF(,ELF(可执行连接文件可执行连接文件) )代码代码段和数据段按字对齐段和数据段按字对齐, ,表达式取值为表达式取值为0 031,31,相应的对齐方式为相应的对齐方式为2 2表达式次方。表达式次方。 COMMONCOMMON属性属性:该属性定义一个:该属性定义一个通用的段通用的段,不

798、包含任何的用户代码和数据。,不包含任何的用户代码和数据。各源文件中同名的各源文件中同名的COMMONCOMMON段共享同一段存储单元。段共享同一段存储单元。 一个汇编语言程序至少包含一个段一个汇编语言程序至少包含一个段, ,程序长时程序长时, ,可分多个代码段和数据段。可分多个代码段和数据段。 05:51806常用伪指令(2 2)ALIGNALIGN ALIGN ALIGN 表达式表达式 ,偏移量,偏移量 ALIGN ALIGN伪指令可通过伪指令可通过添加填充字节添加填充字节的方式,使当前位置满足一定的的方式,使当前位置满足一定的对齐方对齐方式式。其中,表达式的值用于指定对齐方式,可能的取值为

799、。其中,表达式的值用于指定对齐方式,可能的取值为2 2的幂,如的幂,如1 1、2 2、4 4、8 8、1616等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:2 2的表达的表达式次幂式次幂+ +偏移量。偏移量。(3 3)CODE16CODE16和和CODE32CODE32 CODE16 CODE16(或(或CODE32CODE32) CODE16CODE16伪指令通知编译器,其后的指令序列为伪指令通知编译器,

800、其后的指令序列为16位的位的Thumb指令指令; ; CODE32CODE32伪指令通知编译器,其后的指令序列为伪指令通知编译器,其后的指令序列为32位的位的ARM指令指令。05:51807常用伪指令(4 4)ENTRYENTRY ENTRY ENTRY ENTRY ENTRY伪指令用于伪指令用于指定汇编程序的人口点指定汇编程序的人口点。在一个完整的汇编程序中至少。在一个完整的汇编程序中至少要有要有ENTRYENTRY,也可以有多个。当有多个,也可以有多个。当有多个ENTRYENTRY时,程序的真正人口点由链接器时,程序的真正人口点由链接器指定。但在源文件里最多只能有一个指定。但在源文件里最多

801、只能有一个ENTRYENTRY,也可以没有。,也可以没有。(5 5)ENDEND END END END END用于通知编译器已经到了用于通知编译器已经到了源程序的结尾源程序的结尾, ,通常放在程序的最后一行。通常放在程序的最后一行。(6 6)EXPORTEXPORT(或(或OBALOBAL) EXPORT EXPORT 标号标号WEAKWEAK EXPORT EXPORT伪指令用于在程序中伪指令用于在程序中声明一个全局的标号声明一个全局的标号,该标号可以在其他的,该标号可以在其他的文件中引用。文件中引用。EXPORTEXPORT可用可用GLOBALGLOBAL代替代替。标号在程序中区分大小写

802、,。标号在程序中区分大小写,WEAKWEAK选选项声明其他的同名标号优先于该标号被引用。项声明其他的同名标号优先于该标号被引用。 05:51808常用伪指令(7 7)IMPORTIMPORT IMPORT IMPORT 标号标号WEAKWEAK 用于通知编译器要用于通知编译器要使用的标号使用的标号在其他的在其他的源文件中定义源文件中定义, ,要在要在当前源文件当前源文件中中引用引用, ,无论当前源文件是否引用该标号无论当前源文件是否引用该标号, ,该标号均会该标号均会被加入被加入到当前符号表中。到当前符号表中。(8 8)EXTERNEXTERN EXTERN EXTERN 标号标号LWEAKL

803、WEAK 用于通知编译器要用于通知编译器要使用的标号使用的标号在其他的源文件中在其他的源文件中定义定义, ,要在当前源文件中要在当前源文件中引用。如果当前源文件实际并未引用该标号引用。如果当前源文件实际并未引用该标号, ,该标号就该标号就不会被加入不会被加入到当前源到当前源文件的符号表中。文件的符号表中。(9 9)GET(GET(或或INCLUDE)INCLUDE) GET GET 文件名文件名 用于将一个用于将一个源文件包含源文件包含到到当前的源文件中当前的源文件中,并将被包含的源文件在当前,并将被包含的源文件在当前位置进行汇编处理。可使用位置进行汇编处理。可使用INCLUDEINCLUDE

804、代替代替GETGET。 汇编程序中常用的方法是在某源文件中定义一些宏指令,用汇编程序中常用的方法是在某源文件中定义一些宏指令,用EQUEQU定义常量定义常量的符号名称,用的符号名称,用MAPMAP和和FIELDFIELD定义结构化的数据类型,然后用定义结构化的数据类型,然后用GETGET伪指令将这伪指令将这个源文件包含到其他的源文件中。使用方法与个源文件包含到其他的源文件中。使用方法与C C语言语言中的中的includeinclude相似。相似。05:51809常用伪指令(1010)INCBININCBIN INCBIN INCBIN 文件名文件名 用于将一个用于将一个目标文件目标文件或或数据

805、文件包含数据文件包含到当前的到当前的源文件中源文件中,被包含的文件,被包含的文件不作任何变动地存放在当前文件中,编译器从其后开始继续处理。不作任何变动地存放在当前文件中,编译器从其后开始继续处理。(1111)RNRN 名称名称 RN RN 表达式表达式 用于给一个用于给一个寄存器定义寄存器定义一个一个别名别名。这种方式可以方便程序员记忆该寄存。这种方式可以方便程序员记忆该寄存器的功能。其中器的功能。其中, ,名称为给寄存器定义的别名名称为给寄存器定义的别名; ;表达式为寄存器的编码。表达式为寄存器的编码。(1212)ROUTROUT 名称名称 ROUT ROUT 用于给一个用于给一个局部变量定

806、义作用范围局部变量定义作用范围。在程序中若未使用该伪指令。在程序中若未使用该伪指令, ,局部变局部变量的作用范围为所在的量的作用范围为所在的AREA,AREA,而使用而使用ROUTROUT后后, ,局部变量的作用范围在当前局部变量的作用范围在当前ROUTROUT和下一个和下一个ROUTROUT之间。之间。05:518109.3ARM的汇编语言结构 9.3.19.3.1ARMARM汇编语言程序结构汇编语言程序结构9.3.29.3.2ARMARM汇编语言的语句格式汇编语言的语句格式9.3.39.3.3基于基于WindowsWindows下下ADSADS的汇编语言程序结构的汇编语言程序结构9.3.4

807、9.3.4基于基于LinuxLinux下下GCCGCC的汇编语言程序结构的汇编语言程序结构 05:518119.3.1ARM汇编语言程序结构 在在ARM(Thumb)ARM(Thumb)汇编语言程序中,以相对独立的指令或数据序列的程序段汇编语言程序中,以相对独立的指令或数据序列的程序段为单位组织程序代码。段可以分为为单位组织程序代码。段可以分为代码段代码段和和数据段数据段,代码段代码段的内容为的内容为执行代执行代码码,数据段数据段存放代码运行时需要存放代码运行时需要用到的数据用到的数据。一个汇编程序至少应该有一个。一个汇编程序至少应该有一个代码段,也可以分割为多个代码段和数据段,多个段在程序编

808、译链接时最终代码段,也可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的形成一个可执行的映像文件映像文件。可执行映像文件通常由以下几部分构成:。可执行映像文件通常由以下几部分构成: 一个或多个一个或多个代码段代码段,代码段的属性为,代码段的属性为只读只读; 零个或多个包含零个或多个包含初始化数据初始化数据的的数据段数据段,数据段的属性为,数据段的属性为可读可读/ /写写; 零个或多个零个或多个不包含初始化数据不包含初始化数据的的数据段数据段,数据段的属性为,数据段的属性为可读可读/ /写写。05:51812代码段的汇编例子 AREA AREA InitInit,CODEC

809、ODE,READONLYREADONLY ENTRY ENTRYStartStart LDR LDR R0R0,= 0x3FF5000= 0x3FF5000 LDR LDR R1R1,0xFF0xFF STR STR R1R1,R0R0 END END 在汇编语言程序中在汇编语言程序中, ,用用AREAAREA定义一个段定义一个段, ,并说明所定义段的并说明所定义段的相关属性相关属性。 ENTRYENTRY伪指令标识程序的伪指令标识程序的入口点入口点, ,程序程序末尾末尾为为ENDEND伪指令。通常每一个汇编伪指令。通常每一个汇编程序段都必须有一条程序段都必须有一条ENDEND伪指令,以指示代

810、码段的结束。伪指令,以指示代码段的结束。 下面是一个下面是一个数据段数据段的小例子:的小例子: AREA AREA DATAAREADATAAREA,DATADATA,BIINITBIINIT,ALLGN=2ALLGN=2 DISPBUF DISPBUF SPACE 200SPACE 200 RCVBUF RCVBUF SPACE 200SPACE 200 DATA DATA数据段标识数据段标识.SPACE.SPACE分配分配200200字节的存储单元字节的存储单元, ,并初始化为并初始化为0 0。05:518139.3.2ARM汇编语言的语句格式1.1.基本语句格式基本语句格式 ARM AR

811、M和和ThumbThumb汇编语言的语句格式为:汇编语言的语句格式为: 标号标号 指令或伪指令指令或伪指令 ;注释;注释 规则:规则: 语句太长语句太长, ,可可分若干行书写分若干行书写, ,在行末用在行末用“ ”来来标识标识; ; 指令助记符可全部用大写或小写指令助记符可全部用大写或小写, ,但但不能不能在一条指令中在一条指令中大、小写混用大、小写混用. .2.2.汇编语言程序中常用的符号汇编语言程序中常用的符号 在汇编语言程序设计中,可以使用各种在汇编语言程序设计中,可以使用各种符号代替地址符号代替地址、变量变量和和常量常量等,等,以增加程序的以增加程序的可读性可读性。以下为符号命名的约定

812、:。以下为符号命名的约定: 符号名不应与符号名不应与指令指令或者或者伪指令同名伪指令同名; 符号在其作用范围内必须符号在其作用范围内必须唯一唯一; 符号区符号区分大小写分大小写,同名的大、小写符号被视为两个不同的符号;,同名的大、小写符号被视为两个不同的符号; 自定义的符号名不能与系统自定义的符号名不能与系统保留字相同保留字相同。 05:51814程序中的常量和变量3.3.程序中的常量程序中的常量 程序中的程序中的常量常量是指其值在程序的运行过程中是指其值在程序的运行过程中不能被改变的量不能被改变的量。ARMARM和和ThumbThumb汇编程序所支持的常量有汇编程序所支持的常量有逻辑常量逻辑

813、常量、数字常量数字常量和和字符串常量字符串常量。 数字常量数字常量一般为一般为3232位的整数位的整数,无符号常量取值范围为,无符号常量取值范围为0 0232-l232-l,有符,有符号常量取值范围为号常量取值范围为-2-231312 23131-1-1; 逻辑常量逻辑常量只有两种取值:只有两种取值:真真或或假假; 字符串常量字符串常量为一个固定的为一个固定的字符串字符串,一般用来,一般用来提示提示程序运行时的程序运行时的信息信息。4.4.汇编语言程序中的变量汇编语言程序中的变量 程序中的变量是指其值在程序的运行过程中可以改变的量。程序中的变量是指其值在程序的运行过程中可以改变的量。ARMAR

814、M和和ThumbThumb汇编程序所支持的变量包括逻辑变量、数字变量和字符串变量。汇编程序所支持的变量包括逻辑变量、数字变量和字符串变量。 逻辑变量逻辑变量用于在程序的运行中保存逻辑值用于在程序的运行中保存逻辑值( (真或假真或假) ); 数字变量数字变量用于在程序的运行中保存数字值,但数字值的大小不应超出用于在程序的运行中保存数字值,但数字值的大小不应超出数字变量所能表示的范围;数字变量所能表示的范围; 字符串变量字符串变量用于在程序的运行中保存一个字符串,但字符串的长度不用于在程序的运行中保存一个字符串,但字符串的长度不应超出字符串变量所能表示的范围。应超出字符串变量所能表示的范围。05:

815、518155.程序中的变量代换 程序中的程序中的变量变量可通过可通过代换操作代换操作取得一个取得一个常量常量。代换。代换操作符操作符为为“$ $”。如。如“$ $”在在数字变量前面数字变量前面, ,编译器会将该数字变量的编译器会将该数字变量的值转换为十六进制值转换为十六进制的字符串的字符串, ,并将该十六进制的字符串代换并将该十六进制的字符串代换“$ $”后的数字变量。如果后的数字变量。如果“$ $”在逻辑变量前在逻辑变量前面面, ,编译器会将该逻辑变量代换为它的编译器会将该逻辑变量代换为它的取值取值( (真真或或假假) )。如果。如果“$ $”在字符串变在字符串变量前面量前面有一个代换操作符

816、有一个代换操作符, ,编译器会将该字符串变量的编译器会将该字符串变量的值值代换代换“$ $”后的后的字符字符串变量串变量。示例:示例:LCLS LCLS Y1 Y1 ;定义局部字符串变量;定义局部字符串变量Y1Y1和和Y2Y2LCLS LCLS Y2Y2Y1 Y1 SETS SETS “WORLD!WORLD!”Y2 Y2 SETS SETS “HELLOHELLO,$Y1$Y1” ;字符串变量;字符串变量Y2Y2的值为的值为“HELLOHELLO,WORLD!WORLD!”05:518169.3.3基于Windows下ADS的汇编语言程序结构 ADS ADS环境下的环境下的ARMARM汇编语

817、言汇编语言程序结构程序结构与其他环境下的汇编语言程序结构与其他环境下的汇编语言程序结构大大体相同体相同,整个程序也是,整个程序也是以段为单元以段为单元来来组织代码组织代码。段可分为。段可分为代码段代码段和和数据段数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。整个程序至代码段的内容为执行代码,数据段存放代码运行时所需的数据。整个程序至少有少有1 1个代码段,只读属性,数据段的属性为可读个代码段,只读属性,数据段的属性为可读/ /写。但是语法规则上有其写。但是语法规则上有其独自的特点,现将其语法规则总结如下:独自的特点,现将其语法规则总结如下: 所有所有标号标号必须在一行的必须在

818、一行的顶格书写顶格书写,其后不要添,其后不要添加冒号加冒号( (:) ); 所有的所有的指令指令均均不能顶格写不能顶格写; 大小写敏感大小写敏感( (可以全部大写或全部小写,但不能大小写混合使用可以全部大写或全部小写,但不能大小写混合使用) ); 注释注释使用使用分号分号( (;) )。05:51817ADS的汇编语言程序结构举例 以一个简单的汇编程序文件以一个简单的汇编程序文件testl.stestl.s为例,对以上规则作相应的介绍。为例,对以上规则作相应的介绍。 AREA ARMex,CODE,READONLY ;AREA AREA ARMex,CODE,READONLY ;AREA定义段

819、定义段, ,段名段名Init;Init;代码段代码段, ,只读只读 ENTRY ENTRY ;伪指令;伪指令, ,第一条指令的人口第一条指令的人口Start Start ;标号;标号( (必须顶格必须顶格) ) MOV MOV r0r0,#10#10 MOV MOV r1r1,#3#3 ADD ADD r0r0,r0r0,r1 r1 ;r0=r0+r1r0=r0+r1 ; ;以下以下3 3行为软件中断行为软件中断, ,用来停止用来停止ADSADSStop Stop MOV MOV r0r0,#0x18 #0x18 ;软件异常中断响应;软件异常中断响应 LDR LDR r1r1,=0x20026

820、 =0x20026 ;ADPADP停止运行,应用退出停止运行,应用退出 SWI SWI 0x123456 0x123456 ;ARMARM半主机软件中断半主机软件中断 END END ;每一个汇编文件都要以;每一个汇编文件都要以ENDEND结束结束 对于上例程序对于上例程序, ,将将test1.stest1.s添加到添加到CoderwarriorCoderwarrior工程文件中工程文件中, ,用用MakeMake即可完即可完成编译、链接。成编译、链接。05:518189.3.4基于Linux下GCC的汇编语言程序结构 Linux Linux下下GCCGCC的汇编语言结构的汇编语言结构与其他环

821、境下的汇编语言结构与其他环境下的汇编语言结构相似相似,整个程,整个程序都可以是序都可以是程序段程序段为单位组织代码,但是在为单位组织代码,但是在语言规则语言规则上与上与ADSADS环境下的环境下的ARMARM汇汇编语言规则有编语言规则有明显的区别明显的区别。将。将LinuxLinux下下GCCGCC的汇编语言下的汇编语言规则的汇编语言下的汇编语言规则总结总结如下:如下: 所有所有标号标号必须在一行的必须在一行的顶格书写顶格书写,并且其后必须添,并且其后必须添加冒号加冒号(:);(:); 所有的所有的指令指令均均不能顶格写不能顶格写; 大小写敏感大小写敏感(可以全部大写或全部小写,但(可以全部大

822、写或全部小写,但不能不能大小写大小写混合使用混合使用);); 注释注释使用符号使用符号“ ”( (注释的内容由注释的内容由“ ”号起到此行结束,号起到此行结束,注释注释可以在可以在一行的一行的顶格书写顶格书写) )。05:51819GCC的汇编语言程序结构举例 以一个简单的汇编程序以一个简单的汇编程序test2.stest2.s为例,对以上规则作相应的介绍。为例,对以上规则作相应的介绍。 .text .text 表示是只读代码段表示是只读代码段_start:_start:global global start start startstart作为链接器来使用作为链接器来使用 globalglo

823、bal main main mainmain函数函数 b b main main 跳转到跳转到mainmain函数函数mainmain: mov mov roro,#0 #0 r0=0r0=0 ldr ldr r1r1,#1 #1 r1=1r1=1Addop:Addop: add add r2r2,r1r1,r0 r0 r2=r1+r0r2=r1+r0 mov mov pcpc,lr lr 程序结束,交出对程序结束,交出对CPUCPU的控制权的控制权 endend 05:51820GCC的汇编语言程序说明 在桌面在桌面LinuxLinux环境下,用环境下,用arm-linux-gccarm-l

824、inux-gcc可对其进行交叉编译和链接:可对其进行交叉编译和链接:arm-linux-gcc test2.s-o testarm-linux-gcc test2.s-o test。但要注意,不能用。但要注意,不能用gccgcc来编译,因为来编译,因为gccgcc是是支持支持Intel 386Intel 386系列系列CPUCPU的,而这里的的,而这里的test2.stest2.s是是ARM CPUARM CPU的汇编程序;的汇编程序; 在在LinuxLinux环境下,也用环境下,也用gccgcc、arm-linux-gccarm-linux-gcc编译器来生成相应的编译器来生成相应的.s.s

825、汇编汇编程序文件:程序文件:gcc-S filename.cgcc-S filename.c,这样就会生成,这样就会生成filename.sfilename.s。这里的参数。这里的参数-S-S表表示只进行预处理、编译,到生成示只进行预处理、编译,到生成* *.s.s为止,而不进行汇编;为止,而不进行汇编; 程序计数器程序计数器PCPC是寄存器是寄存器r15r15的别名,链接寄存器的别名,链接寄存器1r1r是寄存器是寄存器r14r14的别名。的别名。当用当用b b指令调用指令调用mainmain函数过程时,函数过程时,mainmain函数的返回地址函数的返回地址PCPC将自动存放到将自动存放到1

826、r1r中,中,所以将所以将lrlr的值放到的值放到PCPC中实际就是函数返回;中实际就是函数返回; 指令指令“lda register=expressionlda register=expression”的作用是将的作用是将3232位的立即数存放到寄位的立即数存放到寄存器中,而存器中,而MOVMOV和和MVNMVN指令一般只用于传送指令一般只用于传送8 82424位的立即数;位的立即数; 05:518219.4ARM汇编语言程序调试 9.4.19.4.1ADSADS软件模拟环境下的程序调试软件模拟环境下的程序调试9.4.29.4.2ADSADS硬件仿真器环境下的程序调试硬件仿真器环境下的程序调

827、试9.4.39.4.3ADSADSWigglerWiggler调试电缆环境下的程序调试调试电缆环境下的程序调试9.4.49.4.4LinuxLinux环境下的环境下的gdbgdb程序调试程序调试05:51822ARM汇编语言程序调试 无论进行嵌入式系统软件开发还是硬件电路设计,调试永远无论进行嵌入式系统软件开发还是硬件电路设计,调试永远是不可缺少的、非常重要的一个环节。其中,嵌入式软件的调是不可缺少的、非常重要的一个环节。其中,嵌入式软件的调试不同于普通的软件调试,因为开发程序的平台试不同于普通的软件调试,因为开发程序的平台( (通用是通用是i386i386平平台台) )和目标运行的平台和目标

828、运行的平台( (如如ARM)ARM)是不同的。通常嵌入式系统的调是不同的。通常嵌入式系统的调试方法和类型有很多种,最为常见的包括试方法和类型有很多种,最为常见的包括软件模拟调试软件模拟调试、硬件硬件仿真器在线调试仿真器在线调试、WigglerWiggler电缆调试电缆调试和和LinuxLinux环境下的环境下的gdbgdb程序调程序调试试。05:518239.4.1ADS软件模拟环境下的程序调试 ADS ADS软件模拟调试软件模拟调试是利用是利用ARMUL.dllARMUL.dll提供的一个提供的一个软软ARMARM内核内核,其其调试工具调试工具和待调试的嵌入式和待调试的嵌入式软件软件都在都在

829、主机上运行主机上运行,由主机提,由主机提供一个供一个模拟的目标运行环境模拟的目标运行环境,可以进行,可以进行语法语法和和逻辑上的调试逻辑上的调试。它的优点是它的优点是简单方便简单方便,不需要不需要嵌入式嵌入式目标板目标板,软件的调试功能,软件的调试功能较强较强;缺点是;缺点是功能有限功能有限,不能进行实时联机调试。具体使用,不能进行实时联机调试。具体使用9.1.49.1.4小节已介绍过,这里不再赘述。小节已介绍过,这里不再赘述。05:518249.4.2ADS硬件仿真器环境下的程序调试 在在ADSADS环境下利用环境下利用JTAGJTAG硬件仿真器硬件仿真器可以实现可以实现联机调试联机调试,即

830、在,即在线调试嵌入式设备的线调试嵌入式设备的FlashFlash中的程序或者中的程序或者SDRAMSDRAM中的程序中的程序。仿真仿真器器与与目标板目标板通过仿真头通过仿真头连接连接,与主机有,与主机有串口串口、并口并口、网口网口或或USBUSB接口接口等连接方式。由于仿真器等连接方式。由于仿真器自成体系自成体系,因此调试时既可以连,因此调试时既可以连接目标板,也可以不连接目标板。当然,仿真器的价格也相对接目标板,也可以不连接目标板。当然,仿真器的价格也相对比较贵。一般在程序的比较贵。一般在程序的前期开发前期开发,通常让程序只,通常让程序只在在SDRAMSDRAM中调试中调试运行,运行,最后最

831、后才下载到才下载到FlashFlash中中进行调试运行。因为首先要用专门进行调试运行。因为首先要用专门的的FlashFlash烧录软件将程序下载到烧录软件将程序下载到FlashFlash中去,所以其速度慢,操中去,所以其速度慢,操作复杂,同时程序在作复杂,同时程序在FlashFlash中运行和调试的速度也比较慢,而且中运行和调试的速度也比较慢,而且对对FlashFlash的频繁擦写会缩短的频繁擦写会缩短FlashFlash的使用寿命。的使用寿命。 05:51825ADS硬件仿真器环境下的程序调试 ARMARM仿真器仿真器是通过内部是通过内部硬件实现硬件实现PCPC机并口协议到机并口协议到串行串

832、行JTAGJTAG协议的转换协议的转换。利。利用用高速高速JTAGJTAG串行扫描链串行扫描链,通过调试通信通道,通过调试通信通道(DCC)(DCC)连接连接ARMARM核心内嵌的名为核心内嵌的名为Embedded-ICEEmbedded-ICE的调试逻辑,调试逻辑实时监测的调试逻辑,调试逻辑实时监测ARMARM核心的寄存器、数据总核心的寄存器、数据总线和地址总线。调试器设置线和地址总线。调试器设置BreakpointBreakpoint及及WatchpointWatchpoint,后程序在,后程序在ARMARM内核全内核全速运行;调试逻辑实时监测地址与数据总线,并与预设值比较,在吻合时产速运

833、行;调试逻辑实时监测地址与数据总线,并与预设值比较,在吻合时产生异常中断通知内核并把控制权交给调试器。这样,在程序全速运行时,可生异常中断通知内核并把控制权交给调试器。这样,在程序全速运行时,可以在断点处停止,也可以设置条件断点、条件观察断点等,而且又不占用以在断点处停止,也可以设置条件断点、条件观察断点等,而且又不占用CPUCPU时间及内存资源。有些仿真器支持多个时间及内存资源。有些仿真器支持多个ARMARM处理器以及混合结构核心处理器以及混合结构核心(DSP(DSP及及FPGAFPGA等等) )的在线调试。的在线调试。 Multi-ICEMulti-ICE是由是由ARMARM公司公司推出的

834、官方推出的官方仿真器仿真器,主要是为了配合,主要是为了配合ADSADS通过通过JTAGJTAG接口对接口对ARMARM器件进行调试。广义说,器件进行调试。广义说,Multi-ICEMulti-ICE应该包含应该包含Multi-ICE Multi-ICE serverserver这个软件和这个软件和Multi-ICEMulti-ICE仿真器硬件。软件作为调试代理,接收调试器仿真器硬件。软件作为调试代理,接收调试器发来的信息,并转发到硬件,由硬件和目标发来的信息,并转发到硬件,由硬件和目标ARMARM内核上的调试部件通信,再内核上的调试部件通信,再将信息返回。由于软件采用了将信息返回。由于软件采用

835、了RDIRDI的接口,因此可以在支持的接口,因此可以在支持RDIRDI接口的调试器接口的调试器里进行调试,比如里进行调试,比如AXDAXD、IARIAR的调试器。的调试器。 05:518261.Multi-ICE server软件的安装 Multi-ICE server Multi-ICE server软件软件可以在可以在网上网上找到,当前的最新版本为找到,当前的最新版本为2.2.62.2.6安装完成后,会产生如下图所示文件。安装完成后,会产生如下图所示文件。05:518272.运行Multi-ICE server 硬件正确连接后硬件正确连接后, ,运行运行Multi-ICE server,M

836、ulti-ICE server,会用自动配置连接目标器件。会用自动配置连接目标器件。可在可在SettingsSettings菜单下选择配置的方式菜单下选择配置的方式, ,一般选择一般选择Atuo-ConfigureAtuo-Configure即可。即可。 正确连接到正确连接到ARMARM内核的嵌入式目标板内核的嵌入式目标板, ,显示下图显示下图, ,说明和说明和PCPC机成功链接。机成功链接。 下图的方框即代表所找到的下图的方框即代表所找到的ARMARM内核;内核;ARM920TARM920T表示检测的表示检测的ARMARM类型类型, ,绿色绿色表示未连接调试软件。内核名称左边有一个带方括号的

837、文字表示未连接调试软件。内核名称左边有一个带方括号的文字, ,其含义如下:其含义如下: X X 表示被调试的处理器类型未知或者没有和调试软件连接;表示被调试的处理器类型未知或者没有和调试软件连接; S S 表示被调试的处理器处于停止状态,已经和调试软件连接成功;表示被调试的处理器处于停止状态,已经和调试软件连接成功; D D 表示被调试的处理器处于下载程序的状态;表示被调试的处理器处于下载程序的状态; R R 表示被调试的处理器处于运行状态。表示被调试的处理器处于运行状态。 05:518283.配置ADS以支持JTAG仿真器 启动启动ADSADS的调试器的调试器AXDAXD后,从后,从Opti

838、ongOptiong菜单中选择菜单中选择Configure TargetConfigure Target,在弹,在弹出的对话框中选择出的对话框中选择Multi-ICEMulti-ICE。如果没有此项,则需要将驱动添加到对话框。如果没有此项,则需要将驱动添加到对话框中。单击按钮,以添加对的支持。添加完后,还要注意配置(使用中。单击按钮,以添加对的支持。添加完后,还要注意配置(使用ConfigureConfigure按钮)按钮)ICEICE和和ADSADS的链接参数,如下图。的链接参数,如下图。 单击单击OKOK按钮,按钮,Multi-ICE serverMulti-ICE server就与就与A

839、XDAXD成功地链接到一起了。下面的工成功地链接到一起了。下面的工作就是把程序下载到作就是把程序下载到RAMRAM中,并使用中,并使用ADSADS进行调试。可参阅进行调试。可参阅ADSADS有关文档。有关文档。 05:518299.4.3ADSWiggler调试电缆环境下的程序调试 Wiggler Wiggler调试电缆实际上就是一个调试电缆实际上就是一个简易的简易的JTAGJTAG仿真器仿真器,它也,它也支持支持ADSADS集成开发环境集成开发环境和在线联机调试,支持和在线联机调试,支持单步单步、全速全速及及断点断点等调试功能等调试功能Multi-ICEMulti-ICE一头采用标准一头采用

840、标准2020脚的脚的JTAGJTAG接口接口,与嵌入式,与嵌入式目标板相连;另一头采用标准目标板相连;另一头采用标准2525针并口针并口与与PCPC机机连接连接,如下图。,如下图。05:518301.Wiggler JTAG调试电缆的驱动安装 要使用要使用Wiggler JTAGWiggler JTAG调试电缆来调试调试电缆来调试ARMARM处理器,除了处理器,除了ADS 1.2ADS 1.2集成开发集成开发环境外,还需要安装一个环境外,还需要安装一个ARMARM调试代理,一般使用调试代理,一般使用H-JTAGH-JTAG软件。软件。 H-JTAG H-JTAG软件的特点如下:软件的特点如下:

841、 支持支持ARM7/ARM9ARM7/ARM9,支持自动检测和手动指定内核;,支持自动检测和手动指定内核; 使用使用RDIRDI接口接口, ,支持支持SDT 2.51SDT 2.51、ADS 1.2ADS 1.2、REALVIEWREALVIEW和和IARIAR集成开发环境;集成开发环境; 支持支持2 2个硬件断点或数量不限的软件断点;个硬件断点或数量不限的软件断点; 支持支持ARM/ThumbARM/Thumb模式;模式; 支持支持little endianlittle endian和和big endianbig endian模式;模式; 支持支持SemihostingSemihosting

842、调试;调试; 支持支持WigglerWiggler、SDT JTAGSDT JTAG和自定义接口。和自定义接口。 H-JTAG H-JTAG软件的安装步骤如下:软件的安装步骤如下: 双击双击H-JTAGH-JTAG软件的安装文件软件的安装文件H-JTAG v0.2.exe,H-JTAG v0.2.exe,启动启动H-JTAGH-JTAG安装界面;安装界面; 按照提示操作完成安装。按照提示操作完成安装。 05:518312.运行H-JATG软件 将将Wiggler JTAGWiggler JTAG调试电缆一头通过并口延长线与调试电缆一头通过并口延长线与PCPC机的并口机的并口连接,另一头接到嵌入

843、式目标板的连接,另一头接到嵌入式目标板的JTAGJTAG插座上,然后启动插座上,然后启动H-H-JTAGJTAG。H-JTAGH-JTAG会自动检测会自动检测ARMARM内核,如果内核,如果JTAGJTAG连接正确,将会在连接正确,将会在H-JTAGH-JTAG主窗口中显示处理器的型号主窗口中显示处理器的型号( (如如S3C2410AS3C2410A处理器的内核处理器的内核ARM920T)ARM920T),如图,如图9.4.59.4.5所示。一般可以用这种方法来检测嵌入式所示。一般可以用这种方法来检测嵌入式目标板是否与目标板是否与PCPC机成功连接上。机成功连接上。05:518323.配置AD

844、S以支持JTAG仿真器 启动启动ADSADS的调试器的调试器AXDAXD后,从菜单后,从菜单OptionOption中选择中选择Configure Configure TargetTarget,在弹出的对话框中添加或选择,在弹出的对话框中添加或选择H-JTAG.dllH-JTAG.dll,如图,如图9.4.69.4.6所示。所示。05:518339.4.4Linux环境下的gdb程序调试 Linux Linux下提供了一个叫下提供了一个叫gdbgdb的的GNUGNU调试程序,主要用来调试调试程序,主要用来调试C C、C+C+等应用程序。它可以提供:等应用程序。它可以提供: 监视程序中变量的值;

845、监视程序中变量的值; 设置断点,以使程序在指定的代码行上暂停执行;设置断点,以使程序在指定的代码行上暂停执行; 单步执行。单步执行。 语法格式:语法格式: gdb gdb 为使为使gdbgdb正常工作正常工作, ,目标程序目标程序filenamefilename在编译时要包含调试信在编译时要包含调试信息息, ,调试信息包括程序中的每个变量的类型和在可执行文件中的调试信息包括程序中的每个变量的类型和在可执行文件中的地址映射及源代码的行号等。地址映射及源代码的行号等。gdbgdb就是利用这些信息使源代码和就是利用这些信息使源代码和机器码相关联。一般在用机器码相关联。一般在用gccgcc进行编译时带

846、上进行编译时带上“-g-g”参数即可。参数即可。05:518341.gdb基本命令命命令令功功能能命命令令功功能能file装入想要调试的可执行文件装入想要调试的可执行文件watch监视一个变量的值而不管它何时被改变监视一个变量的值而不管它何时被改变next执行一行源代码,但不进入函数内部执行一行源代码,但不进入函数内部step执行一行源代码,并且进入函数内部执行一行源代码,并且进入函数内部kill停止正在调试的程序停止正在调试的程序break在代码里设置断点,这将使程序执行到在代码里设置断点,这将使程序执行到run执行当前被调试的程序执行当前被调试的程序在代码里设置断点,这将使程序执行到里时被

847、挂起在代码里设置断点,这将使程序执行到里时被挂起quit停止停止gdbmake使得不退出使得不退出gdb就可以重新产生可执行文就可以重新产生可执行文list列出产生执行文件的源代码的一部分列出产生执行文件的源代码的一部分shell使得不离开使得不离开gdb就执行就执行Unixshell命令命令05:518359.5ARM汇编语言与C语言混合编程 9.5.19.5.1基本的基本的ATPCSATPCS9.5.29.5.2汇编程序中调用汇编程序中调用C C程序程序9.5.39.5.3C C程序中调用汇编程序程序中调用汇编程序9.5.49.5.4C C程序中内嵌汇编语句程序中内嵌汇编语句9.5.59.

848、5.5从汇编程序中访问从汇编程序中访问C C程序变量程序变量 05:51836ARM汇编语言与C语言混合编程 ARM ARM体系结构体系结构支持支持C/C+C/C+语言及语言及汇编语言汇编语言的的混合编程混合编程。一个完整的程序设。一个完整的程序设计中除了初始化部分用汇编完成以外,其计中除了初始化部分用汇编完成以外,其主要的编程主要的编程任务一般都任务一般都用用C/C+C/C+语语言言完成。在实际编程应用中,程序在执行时首先完成行初始化过程,然后跳完成。在实际编程应用中,程序在执行时首先完成行初始化过程,然后跳转到转到C/C+C/C+程序代码中。汇编程序和程序代码中。汇编程序和C/C+C/C+

849、程序之间一般没有参数的传递,也程序之间一般没有参数的传递,也没有频繁的相互调用,因此,整个程序的结构显得相对简单,容易理解。没有频繁的相互调用,因此,整个程序的结构显得相对简单,容易理解。 汇编语言和汇编语言和C/C+C/C+语言的语言的混合编程混合编程通常有以下通常有以下几种方式几种方式: 汇编汇编程序中程序中调用调用C C程序;程序; C C程序程序中中调用汇编调用汇编程序;程序; C C程序程序中中内嵌汇编内嵌汇编语句;语句; 从从汇编汇编程序中程序中访问访问C C程序变量程序变量。 在以上的几种混合编程技术中,子程序之间的调用必须在以上的几种混合编程技术中,子程序之间的调用必须遵循遵循

850、一定的一定的调用调用规则规则,如,如物理存储器物理存储器的使用、的使用、参数的传递参数的传递等,这些规则统等,这些规则统称称为为ATPCSATPCS(ARM (ARM Thumb Procedure Call Standard)Thumb Procedure Call Standard)其最其最核心的问题核心的问题就是如何在就是如何在C C和和汇编汇编之间之间传值传值,剩下的问题就是,剩下的问题就是各自用各自用自己的自己的方式方式来进行来进行05:518379.5.1基本的ATPCS 基本的基本的ATPCSATPCS规定了在混合编程时子程序调用的一些规定了在混合编程时子程序调用的一些基本规则基

851、本规则,主要包括,主要包括寄存器寄存器、堆栈的使用堆栈的使用、参数传递参数传递和和子程序返回子程序返回等。相对于其他类型的等。相对于其他类型的ATPCS,ATPCS,基本基本ATPCSATPCS的程序执行的程序执行速度更快速度更快, ,占用占用内存更少内存更少, ,但不提供但不提供ARMARM和和thumbthumb调用。调用。 1.1.寄存器的使用规则寄存器的使用规则 程序通过寄存器程序通过寄存器R0-R3R0-R3来来传递参数传递参数, ,这时这些寄存器可以记作这时这些寄存器可以记作A0-A3A0-A3, ,被被调用的子程序在返回前无需恢复寄存器调用的子程序在返回前无需恢复寄存器R0R0R

852、3R3的内容。的内容。 子程序中子程序中, ,用用R4-R11R4-R11保存局部变量保存局部变量, ,可记作可记作V1V1V8V8。如在子程序中用到。如在子程序中用到V1V1V8V8某些寄存器某些寄存器, ,子程序进入时必须保存子程序进入时必须保存, ,返回前必须恢复。在返回前必须恢复。在ThumbThumb程序程序中中, ,通常只能使用寄存器通常只能使用寄存器R4R4R7R7来保存局部变量。来保存局部变量。 寄存器寄存器R12R12用作子程序间用作子程序间scratchscratch寄存器寄存器, ,记作记作IPIP。 R13R13作栈指针作栈指针, ,记作记作SP,SP,子程序中子程序中

853、R13R13不能。不能。SPSP在进入子程序时的值和退在进入子程序时的值和退出于程序时的值必须相等。出于程序时的值必须相等。 寄存器寄存器R14R14用作链接寄存器用作链接寄存器, ,记作记作LRLR,它用于保存子程序的,它用于保存子程序的返回地址返回地址,如果在子程序中保存了返回地址如果在子程序中保存了返回地址, ,则则R14R14可用作其他的用途。可用作其他的用途。 寄存器寄存器R15R15是是程序计数器程序计数器, ,记作记作PC,PC,它不能用作其他用途。它不能用作其他用途。 ATPCSATPCS中的各寄存器在中的各寄存器在ARMARM编译器和汇编器中都是预定义的。编译器和汇编器中都是

854、预定义的。 05:518382.堆栈的使用规则 栈指针通常可以指向不同的位置,当栈指针指向栈顶元素时,栈指针通常可以指向不同的位置,当栈指针指向栈顶元素时,称为称为FULLFULL栈。当栈指针指向与栈顶元素相邻的一个元素时,称栈。当栈指针指向与栈顶元素相邻的一个元素时,称为为EmptyEmpty栈。数据栈的栈。数据栈的增长方向增长方向也可以也可以不同不同,当数据栈向内存减,当数据栈向内存减小的地址方向增长时,称为小的地址方向增长时,称为DescendingDescending栈;反之称为栈;反之称为AscendingAscending栈。栈。ATPCSATPCS规定数据栈为规定数据栈为FULL

855、&Descending(FD)FULL&Descending(FD)类型,并要求对类型,并要求对堆栈的操作是堆栈的操作是8 8字节对齐的。字节对齐的。05:518393.参数的传递规则 根据参数个数是否固定,可以将子程序分为根据参数个数是否固定,可以将子程序分为参数个数可变参数个数可变的的子程序子程序和参和参数数个数固定个数固定的的子程序子程序。这两种子程序的参数。这两种子程序的参数传递规则是不同传递规则是不同的。的。 参数个数可变参数个数可变的子程序参数的子程序参数传递规则传递规则。对于参数个数可变的子程序,。对于参数个数可变的子程序,当参数不超过当参数不超过4 4个时,可以使用寄存器个时,

856、可以使用寄存器R0R0R3R3来传递参数;当参数超过来传递参数;当参数超过4 4个时,个时,可以使用堆栈来传递参数。在参数传递时,将所有参数看作是存放在连续的可以使用堆栈来传递参数。在参数传递时,将所有参数看作是存放在连续的内存单元中的字数据;然后,依次将各名字数据传送到寄存器内存单元中的字数据;然后,依次将各名字数据传送到寄存器R0R0R3R3;如果;如果参数多于参数多于4 4个,将剩余的字数据传送到堆栈中,人栈的顺序与参数顺序相反,个,将剩余的字数据传送到堆栈中,人栈的顺序与参数顺序相反,即最后一个字数据先人栈。即最后一个字数据先人栈。 参数个数固定参数个数固定的子程序参数传递规则。对于参

857、数个数固定的子程序,的子程序参数传递规则。对于参数个数固定的子程序,第一个整数参数通过寄存器第一个整数参数通过寄存器R0R0R3R3来传递,其他参数通过堆栈传递。如果系来传递,其他参数通过堆栈传递。如果系统包含浮点运算的硬件部件,浮点参数则将按照这样的规则传递:各个浮点统包含浮点运算的硬件部件,浮点参数则将按照这样的规则传递:各个浮点参数按顺序处理;为每个浮点参数分配参数按顺序处理;为每个浮点参数分配FPFP寄存器寄存器( (满足该浮点参数需要的且满足该浮点参数需要的且编号最小的一组连续的编号最小的一组连续的FPFP寄存器寄存器) )。05:518404.子程序结果返回规则 结果为一个结果为一

858、个3232位的整数位的整数时,可通过寄存器时,可通过寄存器R0R0返回返回; 结果为一个结果为一个6464位整数位整数时时, ,可以通可以通R0R0和和R1R1返回返回, ,以此类推;以此类推; 结果为一个结果为一个浮点数浮点数时,可以通过浮点运算部件的寄存器时,可以通过浮点运算部件的寄存器f0f0、d0d0或者或者s0s0来返回来返回; 结果为一个结果为一个复合的浮点数复合的浮点数时,可以通过寄存器时,可以通过寄存器f0-fNf0-fN或者或者d0-dNd0-dN来返回;来返回; 对于对于位数更多位数更多的结果,则需要通过的结果,则需要通过调用内存调用内存来传递。来传递。05:518419.

859、5.2汇编程序中调用C程序 汇编中汇编中调用调用C C函数函数, ,需在汇编中需在汇编中使用使用IMPORTIMPORT伪指令伪指令对对C C函数进行声明函数进行声明; ;然后将然后将C C的代码的代码放在一个放在一个独立的独立的C C文件中进行编译文件中进行编译, ,剩下的工作由剩下的工作由链接器来处理链接器来处理。汇编语言文件:汇编语言文件: AREA AREA asmfileasmfile,CODECODE,READONLYREADONLY IMPORT IMPORT cFun cFun ;使用;使用IMPORTIMPORT伪指令声明伪指令声明C C程序程序cFuncFun()() EN

860、TRY ENTRY mov mov r0r0,#0#0 mov mov r1r1,#1#1 mov mov r2r2,#2#2 BL BL cFun cFun ;用;用C C程序程序cFuncFun()() END ENDC C语言文件:语言文件: /*C file /*C file,called by asmfile */called by asmfile */ int cFun int cFun(int aint a,int bint b,int cint c) return a + b + c return a + b + c; 参数传递用寄存器参数传递用寄存器r0r0r2r2。当函数的

861、参数个数大于。当函数的参数个数大于4 4时就要借助堆栈。时就要借助堆栈。 05:518429.5.3C程序中调用汇编程序 汇编程序中用汇编程序中用EXPORTEXPORT伪指令伪指令声明程序声明程序, ,就可被其他程序就可被其他程序调用调用; ;在在C C程序中用程序中用EXTERNEXTERN关键词声明关键词声明该汇编程序该汇编程序, ,就可在就可在C C程序中程序中使用该函数使用该函数。从。从C C的角度的角度, ,并不并不知道该函数的实现是用知道该函数的实现是用C C语言还是汇编语言。因为语言还是汇编语言。因为C C语言的函数名仅仅是代表语言的函数名仅仅是代表函数代码的起始地址函数代码的

862、起始地址, ,这与汇编中的标号、数组名等作用是一样的。这与汇编中的标号、数组名等作用是一样的。 #include #include ExternExtern void void asm_strcpy(constasm_strcpy(const char * char *srcsrc,char * char * destdest) ) ;/*/*用用EXTERNEXTERN声明声明asm_strcpyasm_strcpy()为可被调用的外部函数()为可被调用的外部函数* */ / intint main main()() const char * s = const char * s = ”he

863、llohello,worldworld”; char d32 char d32; asm_strcpyasm_strcpy(s(s,d)d); printfprintf(“sourcesource:%s%s”,s)s); printfprintf(“destinationdestination:%s%s”,d d);); return 0 return 0; 05:51843C程序中调用汇编程序 汇编语言文件:汇编语言文件: AREA AREA asmfileasmfile,CODECODE,READONLYREADONLY EXPORTEXPORT asm_strcpyasm_strcpy

864、; ;声明此程序可被别的程序调用声明此程序可被别的程序调用asm_strcpyasm_strcpylooploop: ldrbldrb r4r4,r0r0,#1 #1 ;读取数据后地址加;读取数据后地址加1 1 cmpcmp r4r4,#0#0 beqbeq overover strbstrb r4r4,r1r1,#1#1 b b looploopoverover: movmov pcpc,lrlr END END05:518449.5.4C程序中内嵌汇编语句 在在c c程序中程序中内嵌内嵌的的汇编指令汇编指令支持大部分的支持大部分的ARMARM和和ThumbThumb指令,指令,不过其使用与

865、汇编文件中的指令有些不同,存在一些不过其使用与汇编文件中的指令有些不同,存在一些限制限制,主,主要有下面要有下面几个方面几个方面: 不能不能直接向直接向PCPC寄存器赋值寄存器赋值, ,程序程序跳转跳转要使用要使用B B或者或者BLBL指令指令; 在在使用物理寄存器使用物理寄存器时时, ,不要使用过于不要使用过于复杂的复杂的C C表达式表达式,避免,避免物理寄存器物理寄存器冲突冲突; R12R12和和R13R13可能被编译器用来可能被编译器用来存放中间编译结果存放中间编译结果, ,计算表达计算表达式值时可能将式值时可能将R0R0到到R3R3、R12R12及及R14R14用于用于子程序调用子程序

866、调用, ,因此要因此要避免避免直直接接使用使用这些物理寄存器;这些物理寄存器; 一般一般不要不要直接直接指定物理寄存器指定物理寄存器, ,而是让编译器进行分配。而是让编译器进行分配。05:51845C程序中内嵌汇编语句 1. 1.内嵌汇编标记内嵌汇编标记 内嵌汇编使用的标记是内嵌汇编使用的标记是_ _asmasm或者或者asmasm关键字,用法如下:关键字,用法如下:_ _asmasm instructioninstruction;instructioninstructioninstructioninstruction 或或asmasm(“instructioninstruction;inst

867、ructioninstruction”);); 05:518469.5.5从汇编程序中访问C程序变量 在在C C中声明的全局变量中声明的全局变量可被可被汇编汇编通过地址间接通过地址间接访问访问, ,具体方法如下:具体方法如下: 使用使用IMPORTIMPORT伪指令声明该全局变量;伪指令声明该全局变量; 用用LDRLDR读取该变量的内存地址读取该变量的内存地址, ,通常该变量地址在数据缓冲区中;通常该变量地址在数据缓冲区中; 用用LDRLDR读取该全局变量的值,用相应的读取该全局变量的值,用相应的STRSTR指令修改该全局变量的值;指令修改该全局变量的值; 各数据类型及其对应的各数据类型及其对

868、应的LDR/STRLDR/STR指令如下:指令如下: 对于无符号的对于无符号的charchar类型的变量通过指令类型的变量通过指令LDRB/STRBLDRB/STRB来读来读/ /写;写; 对于无符号的对于无符号的shortshort类型的变量通过指令类型的变量通过指令LDRH/STRHLDRH/STRH来读来读/ /写;写; 对于对于intint类型的变量通过指令类型的变量通过指令LDR/STRLDR/STR来读来读/ /写;写; 对于有符号的对于有符号的charchar类型的变量通过指令类型的变量通过指令LDRSBLDRSB来读取;来读取; 对于有符号的对于有符号的charchar类型的变

869、量通过指令类型的变量通过指令STRBSTRB来写入;来写入; 对于有符号的对于有符号的shortshort类型的变量通过指令类型的变量通过指令LDRSHLDRSH来读取;来读取; 对于有符号的对于有符号的shortshort类型的变量通过指令类型的变量通过指令STRHSTRH来写入;来写入; 对于小于对于小于8 8个字的结构型变量个字的结构型变量, ,可用可用LDM/STMLDM/STM指令来读指令来读/ /写整个变量;写整个变量; 对于结构型变量的数据成员,可以使用相应的对于结构型变量的数据成员,可以使用相应的LDR/STRLDR/STR指令来访问,这指令来访问,这时必须知道该数据成员相对于

870、结构型变量开始地址的偏移量。时必须知道该数据成员相对于结构型变量开始地址的偏移量。05:51847汇编程序中访问C程序全局变量的例子AREA AREA global_expglobal_exp, CODE, CODE,READONLYREADONLY EXPORT EXPORT asmsubasmsub IMPORTIMPORT globvglobv ;声明全局变量;声明全局变量asmsubasmsub LDR LDR r1, = r1, = globvglobv ;将内存地址读人到;将内存地址读人到r1r1中中 LDR LDR r0, r1 r0, r1 ;将数据读人到;将数据读人到r0r0

871、中中 ADD ADD r0, r0, #2r0, r0, #2 STR STR r0, r1 r0, r1 ;修改后再将值赋予变量;修改后再将值赋予变量 MOV MOV pc, pc, lrlr ENDEND 程序中程序中, ,变量变量globvglobv是在是在C C程序中声明的程序中声明的全局变量全局变量, ,在汇编程序中首先使用在汇编程序中首先使用IMPORTIMPORT伪指令声明该变量伪指令声明该变量, ,再将其内存地址读人到寄存器再将其内存地址读人到寄存器r1r1中中, ,将其值读人到将其值读人到寄存器寄存器r0r0中中, ,修改后再将寄存器修改后再将寄存器r0r0的值赋予变量的值赋予变量globvglobv。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号