XidianUniversity西安电子科技大学1ARM培训讲义提纲单位:西安电子科技大学编写:何方勇编写日期:2005年7月1日XidianUniversity西安电子科技大学21.绪言本次ARM培训主要使各位受训人员了解嵌入式操作系统的基本概念、软硬件构成框架、以及掌握与嵌入式操作系统相关的知识。随着通信技术、电子技术、计算机技术、以及微电子技术的发展,片上系统(SOC)成为当今电子技术的一大主流;这就使得嵌入式开发技术成为整个业界的研究和开发的热点。我们知道当今世界通信与信息技术发展的3大热点是:第三、四代移动通信技术、数字电视技术、以及汽车电子技术。在这几个热点技术的最终实现将被纳入系统的概念,其中嵌入式系统将在里面伴有重要的角色。2.嵌入式操作系统嵌入式操作系统作为一种新的系统,我们应该怎么把握呢?以下我们将简要介绍一下嵌入式系统。2.1.嵌入式操作系统的基本概念从字面上,我们可以从两方面理解嵌入式系统:嵌入式、系统。列举适当的例子说明嵌入式系统的应用:手持设备、大型通信设备2.2.嵌入式操作系统与常见的单片机、DSP系统的细微区别从系统的概念出发讲解:单片机、和DSP是没有系统概念的2.3.嵌入式操作系统的软硬件平台开发1.嵌入式操作系统的硬件构成:核心处理器、程序和数据存储器、总线系统、外围接口(设备)等;2.嵌入式操作系统的软件构成:系统软件、API、底层驱动、应用程序等结合微机系统操作系统讲解3.常见嵌入式操作系统:VxWorks、PSOS、LINUX、WINCE、NUCLEUS等,各种操作系统的区别和优点及应用前景。2.4.怎样进行嵌入式系统设计嵌入式系统开发是本次培训的主要内容,那我们应该从以下方面入手:处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件开发平台、软件组成。1)处理器:速度、IO设计指标、处理器的软件支持、处理器调试方式、处理器提供商的信誉度;XidianUniversity西安电子科技大学32)硬件部件:硬件实现难度、开发周期、市场前景、供货情况3)操作系统:产品的适合度、调试难度、代码结构、可开发潜力、移植可行性4)编程语言:高级语言、低级语言5)软件开发工具:系统调试功能如何、支持的库函数、开发商的软件支持3.嵌入式处理器在以上的讲义中我们简要提到了嵌入式开发的各方面的问题,接下来我们将从硬件开始讲解。在嵌入式系统中,主要以ARM芯片作为该系统的核心芯片。3.1.嵌入式处理器简介ARM是AdvancedRISCMachines的缩写,ARM公司于1990成立,ARM以低成本、低功耗、高性能迅速占领了全球市场。其产品广泛应用到移动通信、消费电子、以及嵌入式市场。ARM公司不生产芯片,只是IP供应商,只做设计。常见ARM处理器系列有:ARM7系列、ARM9系列、ARM9E系列、ARM10系列、SecurCoreSC100、StrongARM、XScale。在此,我们主要讲解ARM7系列、ARM9系列:1)ARM7系列:0.9MIPS/MHz3级流水、冯.诺依曼结构;其内核主要有ARM7TDMI和ARM720T;T:支持16位THUMB指令,D支持在片调试,M增强型乘法器,产生全64位结果,I:嵌入式ICE硬件提供片上断点和调试点支持2)ARM9系列:1.1MIPS/MHz5级流水、哈佛结构;其内核主要有ARM920T、ARM722T和ARM940T;3.2.基于ARM内核的芯片扩展由于ARM公司只做IP,不生产具体的芯片;所以我们所使用的ARM芯片都是全世界其他硬件芯片厂商在经过ARM公司的授权,然后在此基础上进行硬件扩展,以满足不同领域的需求。ARM9系列是当今嵌入式系统应用的主流芯片内核技术。全世界各大厂商都采用ARM公司的IP来开发自己的ARM芯片,主要厂商有:三星、AD、TI、菲利普、Intel、CIRRUSLOGIC等。下面,我们以三星公司的ARM芯片S3C2410X为例来简要介绍基于ARM内核的芯片扩展。注意:ARM9系列是兼容ARM7系列的。XidianUniversity西安电子科技大学43.3.ARM920T内核详解现在基于ARM920T内核的芯片逐渐成为嵌入式系统芯片的主流,我们有必要详解其结构;这是进一步学习软件开发的基础。内核的结构图如下所示:XidianUniversity西安电子科技大学5下面我们将重点介绍ARM920T的协处理器CP15和内存管理单元MMU3.3.1.协处理器CP153.3.2.内存管理单元MMU4.软件开发嵌入式系统的软件开发包括:操作系统和应用程序开发两个方面。下面我们进一步讲解基于ARM芯片的汇编语言。4.1.ARM编程模型ARM常见版本是V4和V5,现在主要用的是V4,处理器工作状态:ARM,THUMB开关状态:进入THUMB状态、进入ARM状态存储器格式:大小端点格式指令长度:32位、16位XidianUniversity西安电子科技大学6数据类型:字,半字,字节操作模式:7种寄存器:31个通用寄存器和6个状态寄存器中断:4.2.ARM基本寻址方式寄存器寻址:立即寻址:寄存器移位寻址:寄存器间接寻址:变址寻址:多寄存器寻址:堆栈寻址:块拷贝寻址:相对寻址:4.3.ARM指令集本章内容是详细讲解ARM指令集。4.3.1.ARM指令格式1.指令集格式:ARM指令集格式如下表4-1所示:XidianUniversity西安电子科技大学7表4-1:ARM指令集格式注意:某些指令码没有定义,但并不导致未定义指令陷阱出现,例如一个乘法指令的第6位变为1。不应使用这些指令,因为它们的作用也许会由未来的ARM执行2.ARM指令集表:下面表4-2、表4-3列出了ARM指令集:表4-2:XidianUniversity西安电子科技大学8表4-2:ARM指令集表4-3:表4-3:ARM指令集3.条件码:XidianUniversity西安电子科技大学9在ARM状态下,所有指令都会根据CPSR条件码和指令条件域的状态被有条件地执行。该域(位31:28)决定了执行一条指令的环境。如果C、N、Z和V标志的状态满足该域的编码条件,指令就被执行,否则不予执行。存在着16个可能条件,每种由复加在指令记忆符后的一个双字符后缀表示。例如,Branch(B为汇编语言)变为BEQ表示“BranchifEqual”,意思是当Z标志被置位时执行Branch指令。实际上,表3-2中所列的15个不同的条件也许会用到,第16个(1111)保留,不能使用。在后缀缺省时,大多数指令的条件域被设置成“Always”(后缀AL)。这意味着不管CPSR的条件码是什么,指令永远被执行。下表4-4给出了条件码概况:表4-4:ARM指令中的条件码4.3.2.ARM指令集详解★★1分支与交换(BX指令,Branch和Exchange指令):该指令仅仅在条件为真时被执行,参见表4-4。该指令通过将一个通用寄存器Rn的内容复制到程序计数器PC来执行一个分支。这个分支会引起管道流,并会根据Rn指定的地址再入。该指令也允许交换指令集。当执行该指令时,Rn[0]的值决定了是否按照ARM指令还是THUMB指令对指令流进行解码。指令格式如下图4-1所示:XidianUniversity西安电子科技大学10图4-1:BX指令格式★指令循环时间:执行BX指令占用2S+1N周期(与BL一样),这里S和N分别代表连续(S周期)和非连续(N周期)。★汇编程序语法:BX-分支和交换指令BX{cond}Rn;{cond}为双字母条件记忆符(即条件码),见表4-4,而Rn表示一个有效寄存器(比如:R0)★使用R15作操作数:如果将R15作操作数,该情况未定义。例:ADRR0,Into_THUMB+1;产生分支目标地址,bit0置位,进入THUMB状态BXR0;分支并改变到THUMB状,R15(PC):=R0CODE16;汇编作为THUMB指令的后续码Into_THUMBADRR5,Back_to_ARM;产生分支目标到字排列地址,bit0置低,变回到ARMBXR5;分支并变回到ARM状态,R15(PC):=R0ALIGN;字排列CODE32;汇编作为ARM指令的后续码Back_to_ARM★★2分支与带链接分支(B、BL)该指令仅仅在条件为真时被执行,参见表4-4。该指令的编码如下图4-2所示。图4-2:B、BL指令格式分支指令包含有一个有符号的2态补充24位偏移(相当于25根地址线+符号位,即+/-32MXidianUniversity西安电子科技大学11字节)。这被左移两位,符号扩展至32位,并加到程序计数器PC。因此该指令可以指定+/-32M字节的分支。该指令偏置必须考虑预取操作,它会引起程序计数器PC超前当前指令2个字(8个字节)。超过+/-32M字节的分支必须使用偏置或事先装入寄存器的绝对目标。在这种情况下,如果要求有带链接类型的分支操作,应当将PC值人工存入R14。★链接位:带链接的分支(BL)将旧的PC写入当前存储空间的链接寄存器(R14)。写入R14的值被调整到允许预取,并包含紧跟着“分支与链接指令”的指令地址。注意CPSR不保留PC值,R14[1:0]总是清零。从带链接的分支返回,如果链接寄存器仍然有效,可使用MOVPC,R14;或如果链接寄存器以被Rn存作堆栈指针,使用LDMRn!,{..PC}。★指令循环时间:分支和带链接分支指令占用2S+1N增加的周期(与BX一样),这里S和N分别代表连续(S周期)和内部(I周期)。★汇编程序语法:{}中的内容任意,中的内容必须出现B{L}{cond}expression{L}常用请求带链接分支的指令形式。如果缺省,R14不受指令影响,即不将旧的PC值存入R14。{cond}如表4-4中所示的双字母助记符(条件码),如果缺省,默认为AL(Always)。expression目标单元,汇编程序计算偏移量。例hereBALhere;等待,指令汇编成0xEAFFFFFEBthere;等待,默认条件是“Always”CMPR1,#0;R1=0?比较BEQfred;为零,则跳转;反之,继续下一个指令BLsub+ROM;跳转,调用子程序ADDSR1,#1;R1=R1+1,设置CPSR标志BLCCsub;C=0,调用子程序★★3数据处理:数据处理指令仅在条件为真时被执行,参见表4-4。该指令编码如下图4-3所示。XidianUniversity西安电子科技大学12图4-3:数据处理指令该指令通过对一或两个操作数进行指定的算术或逻辑运算产生结果。第一个操作数总是一个寄存器(Rn)。根据指令中L(即D25)位的值,第二个操作数可能是一个移位寄存器(Rm)或一个8位循环立即数(Imm)。根据指令中S位的值,确定该指令的结果是否可以保护或更新CPSR中的条件码。确定的运算(TST(OP1与OP2)、TEQ(OP1异或OP2)、CMP(OP1-OP2)、CMN(OP1+OP2))不将结果写入Rd。它们只用执行检测和设置结果中的条件码并总对S位置位。★CPSR标志:数据处理运算可分为逻辑运算和算术运算,逻辑运算(AND、EOR、TST、TEQ、ORR、MOV、XidianUniversity西安电子科技大学13BIC、MVN)对操作数的所有相应位或产生结果的操作数执行逻辑运算。如果S位被置位(并且Rd不是R15,见下表),则CPSR中的V标志不受影响,C标志将被置位来执行barrelshifter(或当移位操作为LSL#0时保护),Z标志当且仅当结果全零时被置位,N被置为结果bit31的逻辑值。ARM数据处理指令见下表4-5表4-5:数据处理指令算术运算(SUB、RSB、ADD、ADC、SBC、RSC、CMN)将每个操作数都看作是一个32位的整数(无符号或两个独立的符号,两种情况时一样的)。如果S位被置位(并且Rd不是R15),则CPSR中的V标志在结果的bit31出现溢出时被置位,如果操作数均为无符号数可以不理会,但如果操作数为两个独立的有符号数则会发出错误提示