本节提要本节提要1 13 32 26 64 4ARM处理器体系结构处理器体系结构ARM处理器工作模式处理器工作模式S3C44B0X简介简介ARM中断处理中断处理ARM系统启动过程系统启动过程5 5ARM微处理器的指令系统微处理器的指令系统4.1.1ARM处理器概述处理器概述lARMARMAdvanced RISC MachinesAdvanced RISC MachineslARMARM3232位位RISCRISC结构结构IPIP核提供商核提供商lARMARM即即Advanced RISC MachinesAdvanced RISC Machines的缩写l19851985年年4 4月月2626日,第一个日,第一个ARMARM原型在英国剑桥的原型在英国剑桥的AcornAcorn计算机有限公司诞生计算机有限公司诞生l2020世纪世纪8080年代后期,年代后期,ARMARM很快开发成很快开发成AcornAcorn的台的台式机产品,形成英国的计算机教育基础式机产品,形成英国的计算机教育基础l19901990年成立了年成立了Advanced RISC Machines Advanced RISC Machines LimitedLimited。
l2020世纪世纪9090年代,年代,ARM32ARM32位嵌人式位嵌人式RISCRISC(Reduced Reduced Instruction Set ComputerInstruction Set Computer)处理器扩展到世)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位入式系统应用领域的领先地位ARMARM的发展历程的发展历程-1-1l3232位位RISCRISC处理器受到青理器受到青睐,领先的是先的是ARMARM嵌入式嵌入式微微处理器系列理器系列.lARMARM公司公司虽然只成立然只成立2 20 0多年,但在多年,但在19991999年因移年因移动火爆市火爆市场,其,其3232位位RISCRISC处理器占市理器占市场份份额超超过了了50%50%,20012001年初,年初,ARMARM公司的公司的3232位位RISCRISC处理器理器市市场占有率超占有率超过了了75%75%ARMARM公司是知公司是知识产权供供应商,是商,是设计公司由合作伙伴公司来生公司由合作伙伴公司来生产各具特各具特色的芯片色的芯片。
ARMARM的发展历程的发展历程-2-2l1991-1991-ARM ARM 推出第一款推出第一款RISCRISC嵌入式微嵌入式微处理器核理器核 ARM6 ARM6l1993-ARM 1993-ARM 推出推出 ARM7 ARM7 核核l1995 1995 ARM ARM的的ThumbThumb扩展指令集展指令集结构构为1616位系位系统增加了增加了3232位的性能位的性能,提供提供业界界领先的代先的代码密度密度ARMARM的发展历程的发展历程-3-3ARMARM处理器的理器的3 3大特点如下:大特点如下:l小体小体积、低功耗、成本低、高性能;、低功耗、成本低、高性能;l1616位位/32/32位双指令集;位双指令集;l全球众多的合作伙伴全球众多的合作伙伴ARMARM处理器系列提供的解决方案包括:理器系列提供的解决方案包括:l在无在无线、消、消费电子和子和图像像应用方面的开放平台;用方面的开放平台;l存存储、自、自动化、工化、工业和网和网络应用的嵌入式用的嵌入式实时系系统l智能卡和智能卡和SIMSIM卡的安全卡的安全应用ARMARM处理器的特点处理器的特点ARMARM体系结构版本体系结构版本 -1-1lVersion 1(obsolete)Version 1(obsolete)l基本数据基本数据处理理l字字节,字以及多字字以及多字 load/store load/storel软件中断件中断l26 bit 26 bit 地址地址总线lVersion 2(obsolete)Version 2(obsolete)lMultiply&Multiply-accumulateMultiply&Multiply-accumulatel支持支持协处理器理器l支持支持线程同步程同步l26 bit 26 bit 地址地址总线ARMARM体系结构版本体系结构版本 -2-2lV3V3版本推出版本推出3232位寻址能力位寻址能力,结构扩展变化为结构扩展变化为uT T1616位压缩指令集位压缩指令集uM M增强型乘法器增强型乘法器,产生全产生全6464位结果位结果(32X32(32X3264or32X32+64 64or32X32+64 64)64)lV4V4版本增加了半字版本增加了半字loadload和和storestore指令指令lV5V5版本改进了版本改进了ARMARM和和ThumbThumb之间的交互之间的交互,结构扩展变化为结构扩展变化为:uE-E-增强型增强型DSPDSP指令集指令集,包括全部算法操作和包括全部算法操作和1616位乘法位乘法操作操作uJ-J-支持新的支持新的JAVA,JAVA,提供字节代码执行的硬件和优化软提供字节代码执行的硬件和优化软件加速功能件加速功能ARM ARM 体系结构更新体系结构更新ARMARM微处理器的应用领域微处理器的应用领域l工工业控制控制领域域l无无线通通讯领域域l网网络应用用l消消费电子子产品品l成像和安全成像和安全产品品在在ARM处理器内核中有多个功能模理器内核中有多个功能模块可供生可供生产厂商根据不同用厂商根据不同用户的不同的不同要求来配置生要求来配置生产。
这些模些模块分分别用用T、D、M、I、E、J、S等来表示,等来表示,这些模些模块一般从一般从处理器的内核版本上可以区分出来理器的内核版本上可以区分出来T:表示支持:表示支持Thumb指令,指令,说明明该内核可从内核可从16位位Thumb指令集指令集扩充到充到32位位ARM指令集D:表示支持:表示支持Debug,说明明该内核中放置了用于内核中放置了用于调试的的结构,通常它构,通常它为一个一个边界界扫描描链JTAG,可使,可使CPU进入入调试模式,从而方便地模式,从而方便地进行断点行断点设置、置、单步步调试M:表示:表示Multiplier,说明明处理器内部理器内部带有有8位乘法器位乘法器I:表示:表示EmbeddedICELogic,用于,用于实现断点断点观测及及变量量观测的的逻辑电路部路部分,其中的分,其中的TAP控制器可接入到控制器可接入到边界界扫描描链除了以上一些特性外,除了以上一些特性外,ARM处理器内核中理器内核中还有一些有一些处理器内核理器内核带EJ-S模模块E:表示:表示DSPEnhancement,即增加了前,即增加了前导零零处理和理和饱和运算等一些常用的和运算等一些常用的DSP运算指令,极大地改善音、运算指令,极大地改善音、视频处理程序的性能。
理程序的性能J:表示:表示JazelleDBX(DirectBytecodeeXecution),),这是是ARM公司推出公司推出的的Java加速解决方案加速解决方案Jazelle不是一个不是一个简单的加速硬件,它是融入于的加速硬件,它是融入于处理器理器流水流水线之中的一之中的一项专门针对Java指令指令执行的硬件功能,使得行的硬件功能,使得CPU可以直接接可以直接接收一部分收一部分Java指令,并加以指令,并加以译码执行4.1.2ARM内核种类分类内核种类分类1.ARM71.ARM7系列系列lARM7处理器采用了理器采用了ARMV4T(冯诺依曼)体系依曼)体系结构构l分分为三三级流水流水,空空间统一的指令与数据一的指令与数据Cache,平均功耗平均功耗为0.6mW/MHz,时钟速度速度为66MHz,每条指令平均每条指令平均执行行1.9个个时钟周期其中的周期其中的ARM710,ARM720和和ARM740为内内带Cache的的ARM核lARM7体系体系结构是小型、快速、低能耗、集成式的构是小型、快速、低能耗、集成式的RISC内核内核结构l该产品的典型用途是数字蜂品的典型用途是数字蜂窝和硬和硬盘驱动器器l主流的主流的ARM7内核是内核是ARM7TDMI、ARM7TDMI-S、ARM7EJ-S、ARM720Tl常用的有常用的有Samsung公司的公司的S3C44BOX与与S3C4510处理器、理器、Atmel公司的公司的AT91FR40162系列系列处理器、理器、Cirrus公司的公司的EP73xx系列等系列等2.ARM92.ARM9系列系列lARM9处理器采用理器采用ARMV4T(哈佛)体系(哈佛)体系结构构lARM9采用五采用五级流水流水处理及分离的理及分离的Cache结构,平均功耗构,平均功耗为0.7mW/MHz。
时钟速度速度为120MHz200MHz,每条指令平,每条指令平均均执行行1.5个个时钟周期周期l与与ARM7处理器系列相似,其中的理器系列相似,其中的ARM920、ARM940和和ARM9E处理器均理器均为含有含有Cache的的CPU核,性能核,性能为132MIPS(120MHz时钟,3.3V供供电)或)或220MIPS(200MHz时钟)l常用于无常用于无线设备、仪器器仪表、表、联网网设备、机、机顶盒盒设备、高端、高端打印机及数打印机及数码相机相机应用中用中l主流的主流的ARM9内核是内核是ARM920T、ARM922T、ARM940lSamsung公司的公司的S3C2510、S3C2410,Cirrus公司的公司的EP93xx系列等系列等3.ARM10E3.ARM10E系列系列lARM10E处理器采用理器采用ARMVST体系体系结构构l可以分可以分为六六级流水流水处理,采用指令与数据分离的理,采用指令与数据分离的Cache结构,构,平均功耗平均功耗1000mW,时钟速度速度为300MHz,每条指令平均,每条指令平均执行行1.2个个时钟周期周期l其系其系统时钟高达高达300MHz时钟,指令,指令Cache和数据和数据Cache分分别为32KB,数据,数据宽度度为64位位l能能够支持多种商用操作系支持多种商用操作系统,适用于下一代高性能手持式因,适用于下一代高性能手持式因特网特网设备及数字式消及数字式消费类应用用l主流的主流的ARM10内核是内核是ARM1020E、ARM1022E、ARM1026EJ-S等等4SecurCore处理器理器lSecurCore系列系列处理器提供了基于高性能的理器提供了基于高性能的32位位RISC技技术的安全解决方案,的安全解决方案,该系列系列处理器具有体理器具有体积小、功耗低、代小、功耗低、代码密度大和性能高等特点。
密度大和性能高等特点l采用采用软内核技内核技术,以提供最大限度的灵活性,以及防止外部,以提供最大限度的灵活性,以及防止外部对其其进行行扫描探描探测,提供面向智能卡的和低成本的存,提供面向智能卡的和低成本的存储保保护单元元MPU,可以灵活地集成用,可以灵活地集成用户自己的安全特性和其他的自己的安全特性和其他的协处理器理器l目前含有目前含有SC100、SC110、SC200、SC2104种种产品5.Intel5.Intel的的StrongARMStrongARMl采用采用ARMV4T的五的五级流水体系流水体系结构l目前有目前有SA110、SA1100、SA1110等等3个版本另外另外Intel公司的基于公司的基于ARMv5TE体系体系结构的构的XScalePXA27x系列系列处理器,与理器,与StrongARM相比增加了相比增加了I/DCache,并且加入了,并且加入了部分部分DSP功能,更适合于移功能,更适合于移动多媒体多媒体应用目前市目前市场上的大部分智能的核心上的大部分智能的核心处理器就是理器就是XScale系列系列处理器6.ARM11系列系列lARM11处理器系列可以在使用理器系列可以在使用130nm代工厂技代工厂技术、小至、小至2.2mm2芯片面芯片面积和低至和低至0.24mW/MHz的前提下达到高达的前提下达到高达500MHz的性能表的性能表现。
lARM11处理器系列以众多消理器系列以众多消费产品市品市场为目目标l主要的主要的ARM11处理器有理器有ARM1136JF-S、ARM1156T2F-S、ARM1176JZF-S、ARM11MCORE等多种l这里里对各各类处理器核的理器核的ARM流水流水线做一下做一下对比比表表4-1ARM处理器分理器分类本节提要本节提要1 13 32 26 64 4ARM处理器体系结构处理器体系结构ARM处理器工作模式处理器工作模式S3C44B0X简介简介ARM中断处理中断处理ARM系统启动过程系统启动过程5 5ARM微处理器的指令系统微处理器的指令系统4.2.1ARM和和Thumb状态状态lARM体系体系结构在构在V4T及其以上版本定及其以上版本定义了称了称为Thumb指令集的指令集的16位指令集位指令集Thumb指令集的功能是指令集的功能是32位位ARM指令集的功能子集指令集的功能子集l正在正在执行行Thumb指令集的指令集的处理器是工作在理器是工作在Thumb状状态下的同样,正在,正在执行行ARM指令集的指令集的处理器是工作理器是工作在在ARM状状态下ARM状状态下的下的处理器不能理器不能执行行Thumb指令,在指令,在Thumb状状态下的下的处理器也不能理器也不能执行行ARM指令。
必指令必须确保确保处理器不接受理器不接受对当前状当前状态来来说为错误指令集的指令每个指令集都包括切指令集的指令每个指令集都包括切换处理器状理器状态的指令ARM处理器理器总是在是在ARM状状态下开始下开始执行代行代码lTHUMBTHUMB指令集指令集 (T T)uTHUMB THUMB 指令集指令集:3232位位ARMARM指令集的子集,按指令集的子集,按1616位指位指令重新令重新编码u代代码尺寸小尺寸小 (up to 40%compression)(up to 40%compression)u简化化设计THUMBTHUMB指令的特点:指令的特点:1 1、THUMBTHUMB代代码所需空所需空间为ARMARM代代码的的70%70%;2 2、THUMBTHUMB代代码所使用的指令数比所使用的指令数比ARMARM代代码多多40%40%;3 3、用、用3232位存位存储器,器,ARMARM代代码比比THUMBTHUMB代代码快快40%40%;4 4、用、用1616位存位存储器,器,THUMBTHUMB代代码比比ARMARM代代码快快45%45%;5 5、使用、使用THUMBTHUMB代代码,外部存,外部存储器功耗比器功耗比ARMARM代代码少少30%30%4.2.2ARM处理器模式处理器模式除了用户模式以外,其他除了用户模式以外,其他6种处理器模式可以称为特权模式,种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
其中除了系统模式外的其他进行处理器模式的切换其中除了系统模式外的其他5种特权模种特权模式又称为异常模式式又称为异常模式ARM处理器运行模式处理器运行模式处理器模式处理器模式描描 述述用户模式(用户模式(User,usrUser,usr)正常程序执行的模式正常程序执行的模式快速中断模式(快速中断模式(FIQ,fiqFIQ,fiq)用于高速数据传输和通道处理用于高速数据传输和通道处理外部中断模式(外部中断模式(IRQ,irqIRQ,irq)用户通常的中断使用用户通常的中断使用特权模式(特权模式(Supervisor,sveSupervisor,sve)供操作系统使用的一种保护模式供操作系统使用的一种保护模式数据访问中止模式(数据访问中止模式(Abort,abtAbort,abt)用于虚拟存储及存储保护用于虚拟存储及存储保护未定义指令中止模式未定义指令中止模式(Undefined,undUndefined,und)用于支持通过软件仿真硬件的协处用于支持通过软件仿真硬件的协处理器理器系统模式(系统模式(System,sysSystem,sys)用于运行特权级的操作系统任务用于运行特权级的操作系统任务ARM寄存器介绍寄存器介绍l通用寄存器通常又可以分通用寄存器通常又可以分为下面下面3类。
未未备份寄存器:包括份寄存器:包括R0R7备份寄存器:包括份寄存器:包括R8R14程序程序计数器数器PC:即:即R151.未未备份寄存器份寄存器R0R7对于每个未于每个未备份寄存器来份寄存器来说,在所有的,在所有的处理器模式理器模式下指的都是同一个物理寄存器,在异常中断造成下指的都是同一个物理寄存器,在异常中断造成处理理器模式切器模式切换时,由于不同的,由于不同的处理器模式使用相同的物理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏未理寄存器,可能造成寄存器中数据被破坏未备份寄份寄存器没有被系存器没有被系统用于特用于特别的用途,任何可采用通用寄的用途,任何可采用通用寄存器的存器的应用用场合都可以使用未合都可以使用未备份寄存器份寄存器2.备份寄存器份寄存器R8R14l备份寄存器中的每个寄存器份寄存器中的每个寄存器对应于两个不同的物理寄存器于两个不同的物理寄存器l对于于备份寄存器份寄存器R13、R14来来说,每个寄存器,每个寄存器对应于于6个不同个不同的物理寄存器,其中的一个是用的物理寄存器,其中的一个是用户模式和系模式和系统模式共用的,模式共用的,另外的另外的5个个则对应于其他于其他5种种处理器模式,采用下面的方法来理器模式,采用下面的方法来标识。
u寄存器寄存器R14又被称又被称为连接寄存器(接寄存器(LR),在),在ARM中有下中有下面两种特殊用途面两种特殊用途每一种每一种处理器模式在自己的物理理器模式在自己的物理R14中存放当前子程序中存放当前子程序的返回地址当通的返回地址当通过BL或者或者BLX指令指令调用子程序用子程序时,R14被被设置成置成该子程序的返回地址在子程序中,当把子程序的返回地址在子程序中,当把R14的的值复制到程序复制到程序计数器数器PC中中时,就,就实现了子程序了子程序返回具体的返回具体的汇编调用方式是:用方式是:MOVPC,LR或或BXLR当当发生异常中断的生异常中断的时候,候,该模式下的特定物理模式下的特定物理R14被被设置成置成该异常模式将要返回的地址异常模式将要返回的地址3.程序程序计数器数器PCR15:l由于由于ARM处理器采用的是流水理器采用的是流水线机制,当正确地机制,当正确地读取取了了PC值时,该值为当前指令地址当前指令地址值加加8字字节也就是说对于于ARM指令来指令来说,PC指向当前指令的下两条指指向当前指令的下两条指令的地址,由于令的地址,由于ARM指令是字指令是字对齐的,的,PC值的第的第0位位和第和第1位位总是是为0。
l当成功地向当成功地向PC写入一个地址数写入一个地址数值时,程序将跳,程序将跳转到到该地址地址执行4.程序状态寄存器(程序状态寄存器(PSR)CPSR(当前程序状态寄存器)可以在任何处理器模式下(当前程序状态寄存器)可以在任何处理器模式下被访问每一种模式下都有一个专用的物理状态寄存器,称为被访问每一种模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)当特定的异常中断发生时,(备份程序状态寄存器)当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容在异常退出这个寄存器用于存放当前程序状态寄存器的内容在异常退出时,可以用时,可以用SPSR中保存的值来恢复中保存的值来恢复CPSR313029282726876543210NZCVQDNMLRAZIFIM4M3M2M01)条件标志位)条件标志位lN(Negative)、)、Z(Zero)、)、C(Carry)及)及V(oVerflow)统称为条件标志位统称为条件标志位标标志志含含义义N本位设置成当前指令运算结果的本位设置成当前指令运算结果的bit31的值的值当两个补码表示的有符号整数运算时,当两个补码表示的有符号整数运算时,N1表示运算的结果为负数,表示运算的结果为负数,N0表示结果为正数或零表示结果为正数或零ZZ1表示运算结果是表示运算结果是0,Z0表示运算结果不是零表示运算结果不是零对于对于CMP指令,指令,Z1表示进行比较的两个数大小相等表示进行比较的两个数大小相等C在加法指令中(包括比较指令在加法指令中(包括比较指令CMN),结果产生进位了,则),结果产生进位了,则C1,表示,表示无符号数运算发生上溢出,其他情况下无符号数运算发生上溢出,其他情况下C0在减法指令中(包括比较指令在减法指令中(包括比较指令CMP),结果产生借位了,则),结果产生借位了,则C0,表示,表示无符号数运算发生下溢出,其他情况下无符号数运算发生下溢出,其他情况下C1对于包含移位操作的非加对于包含移位操作的非加/减法运算指令,减法运算指令,C中包含最后一次被溢出的位中包含最后一次被溢出的位的数值,对于其他非加的数值,对于其他非加/减法运算指令,减法运算指令,C位的值通常不受影响位的值通常不受影响V对于加对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,号数时,V1表示符号位溢出表示符号位溢出,其他的指令通常不影响其他的指令通常不影响V位位2)Q标志位志位l在在ARMv5的的E系列系列处理器中,理器中,CPSR的的bit27称称为Q标志位,主要用于指示增志位,主要用于指示增强的的DSP指令是否指令是否发生了溢生了溢出,同出,同样的,的,SPSR的的bit27也称也称为Q标志位,用于在志位,用于在异常中断异常中断发生生时保存和恢复保存和恢复CPSR中的中的Q标志位。
志位3)CPSR中的控制位中的控制位CPSR的低的低8位位I、F、T及及M4:0统称称为控制位,当异常中断控制位,当异常中断发生生时这些些位位发生生变化在特权级的的处理器模式下,理器模式下,软件可以修改件可以修改这些控制位些控制位中断禁止位中断禁止位当当I1时禁止禁止IRQ中断当当F1时禁止禁止FIQ中断通常一旦通常一旦进入中断服入中断服务程序可以通程序可以通过置位置位I和和F来禁止中断,但是在来禁止中断,但是在本中断服本中断服务程序退出前必程序退出前必须恢复原来恢复原来I、F位的位的值T控制位控制位用来控制指令用来控制指令执行的状行的状态,即,即说明本指令是明本指令是ARM指令指令还是是Thumb指令对于不同版本的于不同版本的ARM处理器,理器,T控制位的含控制位的含义是有些不同的是有些不同的对于于ARMv4及更高版本的及更高版本的T系列系列处理器,理器,T控制位含控制位含义如下当当T0,表示,表示执行行ARM指令当当T1,表示,表示执行行Thumb指令M控制位控制位M4:0处理器模式处理器模式可访问的寄存器可访问的寄存器0b10000UserPC,R14R0,CPSR0b10001FIQPC,R14_fiqR8_fiq,R7R0,CPSR,SPSR_fiq0b10010IRQPC,R14_irqR13_irq,R12R0,CPSR,SPSR_irq0b10011SupervisorPC,R14_svcR13_svc,R12R0,CPSR,SPSR_svc0b10111AbortPC,R14_abtR13_abt,R12R0,CPSR,SPSR_abt0b11011UndefinedPC,R14_undR13_und,R12R0,CPSR,SPSR_und0b11111SystemPC,R14R0,CPSR(ARMv4及更高版本)及更高版本)本节提要本节提要1 13 32 26 64 4ARM处理器体系结构处理器体系结构ARM处理器工作模式处理器工作模式S3C44B0X简介简介ARM中断处理中断处理ARM系统启动过程系统启动过程5 5ARM微处理器的指令系统微处理器的指令系统4.3ARM中断处理中断处理4.3.1中断基中断基础知知识中中断断和和轮询方方式式不不一一样,在在中中断断执行行完完成成后后需需要要恢恢复被中断的程序。
复被中断的程序1保存上下文和恢复上下文保存上下文和恢复上下文在在中中断断处理理的的前前后后需需要要对处理理器器被被中中断断中中止止的的现场进行行保保护和和恢恢复复,通通常常称称为压栈和和出出栈保保护现场的的目目的的就就是是将将当当前前程程序序处理理的的数数据据、程程序序执行行被被中中断断的的位位置置、工作状工作状态等保存起来以便于中断返回能等保存起来以便于中断返回能继续正常正常执行行2数据共享数据共享问题在使用中断中都会遇到在使用中断中都会遇到这样一个一个问题:中断程序可:中断程序可能会与用能会与用户所写的其他任所写的其他任务代代码通信通常来通常来讲,要保,要保证微微处理器的理器的实时性和中断的及性和中断的及时响响应,必,必须要求中断服要求中断服务程序所占程序所占时间尽可能短如果尽可能短如果把微把微处理器所做的工作全部放到中断程序中去做既不可理器所做的工作全部放到中断程序中去做既不可能也不合算因此,中断程序需要通知任能也不合算因此,中断程序需要通知任务代代码来做后来做后续工作工作处理在这种情况下,中断程序和任种情况下,中断程序和任务代代码就必就必须共享一个或多个共享一个或多个变量来量来实现它它们之之间的通信。
的通信经典的共享数据问题经典的共享数据问题static int iTemperatures2;void interrupt vReadTemperatures(void)iTemperatures0=/从硬件中读出温度值iTemperatures1=/从硬件中读出温度值void main()int iTemp0,iTemp1;while(TURE)iTemp0=iTemperatures0;iTemp1=iTemperatures1;if(iTemp0!=iTemp1)/发出报警;MOVE R1,(iTemperature0)MOVE R2,(iTemperature1)SUBTRACT R1,R2JCOND ZERO,TEMPRATURES_OK;发出警报TEMPRATURES_OK:禁止中断来解决图禁止中断来解决图4-3中的共享数据问题中的共享数据问题static int iTemperatures2;void interrupt vReadTemperatures(void)iTemperatures0=/从硬件中读出温度值iTemperatures1=/从硬件中读出温度值void main()int iTemp0,iTemp1;while(TURE)disable();iTemp0=iTemperatures0;iTemp1=iTemperatures1;enable();if(iTemp0!=iTemp1)/发出报警;.DIMOV R1,(iTemperature0)MOV R2,(iTemperature1)EISUBTRACT R1,R2JCOND ZERO,TEMPRATURES_OK;发出警报TEMPRATURES_OK:3“原子区原子区”和和“临界区界区”l程序中不能被中断的部分代程序中不能被中断的部分代码成成为“原子的原子的”。
任任务是是用用“原子的原子的”指不能被任何可能指不能被任何可能扰乱正在使用数据的乱正在使用数据的操作所中断操作所中断l更精确看法是:中断程序、任更精确看法是:中断程序、任务代代码共享数据和使用共共享数据和使用共享数据的任享数据的任务代代码不是原子的只要在任不是原子的只要在任务代代码使用共使用共享数据的享数据的时候禁止中断,就可以保候禁止中断,就可以保证那些代那些代码是原子的是原子的l我我们把必把必须是是“原子的原子的”以保以保证系系统正常运正常运转的指令的的指令的集合定集合定义为临界区4中断延中断延迟时间所所谓中断延中断延迟时间是指系是指系统响响应一个中断所需要花一个中断所需要花费的的时间,主要取决于以下四个因素:主要取决于以下四个因素:(1)中断被禁止的最)中断被禁止的最长时间;(2)任一个)任一个优先先级更高的中断的中断服更高的中断的中断服务程序程序执行行时间;(3)处理器停止当前任理器停止当前任务、保存必要的信息以及、保存必要的信息以及执行中断程序行中断程序中的指令所需要花中的指令所需要花费的的时间;(4)从中断程序保存上下文到完成一次响)从中断程序保存上下文到完成一次响应所需要的所需要的时间。
5中断的一些常中断的一些常见问题(1)在中断)在中断发生生时,微,微处理器怎么知道去哪里理器怎么知道去哪里执行中断服行中断服务程程序呢?序呢?(2)使用中断向量表的微)使用中断向量表的微处理器怎么知道中断向量表在哪里呢理器怎么知道中断向量表在哪里呢?(3)一条指令在)一条指令在执行行过程中,微程中,微处理器能被中断理器能被中断吗?(4)如果两个中断同)如果两个中断同时产生,微生,微处理器会理器会优先先执行那一个中断行那一个中断服服务程序呢?程序呢?(5)一个中断)一个中断请求信号能求信号能够中断另外一个中断程序中断另外一个中断程序吗?(6)在中断被禁止的)在中断被禁止的时候候发生中断生中断请求会怎么求会怎么样?(7)可以用)可以用C语言写中断程序言写中断程序吗?4.3.2ARM的异常类型的异常类型lARM处理器提供理器提供7种可以使正常指令中止种可以使正常指令中止执行的异常行的异常情况,按情况,按优先先级从高到低排列如下:从高到低排列如下:ResetDataAbortFIQIRQPrefetchAbortSWIUndefinedinstruction异常向量异常向量l异常异常处理就是理就是处理理这些异常情况的方法。
大多数异常些异常情况的方法大多数异常都都对应一个一个软件的异常件的异常处理程序理程序一个在异常一个在异常发生生时执行的行的软件程序l每种异常都每种异常都导致内核致内核进入一种特定的模式,如表入一种特定的模式,如表4-5表表4-5ARM处理器异常和其模式处理器异常和其模式异常异常模式模式目的目的快速中断请求快速中断请求FIQ快速中断请求处理快速中断请求处理中断请求中断请求IRQ中断请求处理中断请求处理SWI和复位和复位SVC操作系统的受保护模式操作系统的受保护模式预取指中止和数据中止预取指中止和数据中止 abort虚存或存储器保护处理虚存或存储器保护处理未定义指令未定义指令undefined软件模拟硬件协处理器软件模拟硬件协处理器ARM处理器的中断理器的中断处理需要注意以下几个理需要注意以下几个问题:1.首先就是知道首先就是知道ARM状状态下的通用寄存器和程序下的通用寄存器和程序计数器,如数器,如图4-2,带阴影的就是相阴影的就是相应模式下的私有寄存器模式下的私有寄存器2.在模式切在模式切换的的过程中,要保程中,要保护系系统和用和用户模式下的通用寄模式下的通用寄存器状存器状态,以便在异常,以便在异常处理完成之后程序能正常返回。
理完成之后程序能正常返回3.异常异常处理的理的动作怎样触触发异常并通知异常并通知处理器是由相理器是由相应的的硬件来自硬件来自动完成4.3.3ARM对异常的响应对异常的响应lARM对异常的响异常的响应过程是从中断向量表开始的一般程是从中断向量表开始的一般来来说,ARM处理器中断向量表的地址是放在从理器中断向量表的地址是放在从0开始开始的的32个字个字节内,如表内,如表4-6所示表表4-6ARM异常中断向量及优先级异常中断向量及优先级地址地址异常中断类型异常中断类型入口时处理器的操作模式入口时处理器的操作模式优先级优先级0 x00000000复位复位超级用户超级用户00 x00000004未定义指令未定义指令未定义未定义60 x00000008软件中断软件中断超级用户超级用户50 x0000000c中止(预取指)中止(预取指)中止中止40 x00000010中止(数据)中止(数据)中止中止10 x00000014保留保留保留保留0 x00000018IRQIRQ30 x0000001cFIQFIQ2对一个中断的操作一个中断的操作过程包括:程包括:进入中断、中断入中断、中断执行和行和中断返回。
中断返回当一个异常出当一个异常出现以后,以后,ARM微微处理器在理器在进入异常入异常处理程序之前会理程序之前会执行以下几步操作:(行以下几步操作:(这些是中断些是中断发生生时,处理器硬件自理器硬件自动处理的)理的)1、将下一条指令的地址存入相、将下一条指令的地址存入相应连接寄存器接寄存器LR,以便程,以便程序在序在处理异常返回理异常返回时能从正确的位置重新开始能从正确的位置重新开始执行2、将、将CPSR复制到相复制到相应的的SPSR中3、根据异常、根据异常类型,型,强制制设置置CPSR的运行模式位的运行模式位4、强制制PC从相关的异常向量地址取下一条指令从相关的异常向量地址取下一条指令执行,从行,从而跳而跳转到相到相应的异常的异常处理程序理程序处表表4-7ARM进入进入/退出异常退出异常PC、LR值值异常或入口异常或入口返回指令返回指令中断执行之前的状态中断执行之前的状态备注备注ARMTHUMBBLMOVPC,R14PC+4PC+2此处此处PC为为BL、SWI、未定义的取址或、未定义的取址或预取址中止指令的预取址中止指令的地址地址SWIMOVSPC,R14_svcPC+4PC+2未定义指令未定义指令MOVSPC,R14_undPC+4PC+2预取指中止预取指中止SUBSPC,R14_abt,#4PC+4PC+4FIQSUBSPC,R14_fiq,#4PC+4PC+4此处此处PC为被为被FIQ、IRQ抢占而没有被抢占而没有被执行的指令的地址执行的指令的地址IRQSUBSPC,R14_irq,#4PC+4PC+4数据中止数据中止SUBSPC,R14_abt,#4PC+8PC+8此处此处PC为产生数据为产生数据中止的装载或保存中止的装载或保存指令的地址指令的地址复位复位_复位时保存在复位时保存在R14_svc中的值不可中的值不可预知预知l如以前介如以前介绍异常向量表异常向量表时所提到所提到过的,每一个异常的,每一个异常发生生时,总是从异常向量表开始起跳的,最是从异常向量表开始起跳的,最简单的一种的一种情况是:情况是:l向量表里面的每一条指令直接跳向向量表里面的每一条指令直接跳向对应的异常的异常处理函理函数。
其中数其中FIQ_Handler()可以直接从地址可以直接从地址0 x1C处开始,开始,省下一条跳省下一条跳转指令但是当指令但是当执行跳行跳转的的时候有候有2个个问题需要需要讨论:跳:跳转范范围和异常分支和异常分支如当如当发生生IRQ中断中断时:模式模式进入到入到IRQ模式,模式,处理器自理器自动完成以下完成以下动作:作:将原来将原来执行程序的下一条指令地址保存到行程序的下一条指令地址保存到LR中,就是将中,就是将R14保存到保存到R14_irq里面拷拷贝CPSR到到SPSR_irq改改变CPSR模式位的模式位的值,改到,改到IRQ模式改改变PC值,将其指向异常,将其指向异常处理向量所指的下一条指令理向量所指的下一条指令PC跳到跳到0 x00000018处运行因为这是是IRQ的中断入口的中断入口通通过0 x00000018:LDRPC,IRQ_ADDR跳转到相到相应的中断服的中断服务程序这个里面就有个确定哪个中断源的个里面就有个确定哪个中断源的问题了,即异常分支,那就有了,即异常分支,那就有优先先级的的问题了每个中断源会有自己的中断服了每个中断源会有自己的中断服务程序得到中断源有硬件得到中断源有硬件实现和和软件件处理两种方式。
比如理两种方式比如LPC21XX的就是利用硬的就是利用硬件方式,件方式,为了利用向量中断控制器的了利用向量中断控制器的优点,点,IRQ中断向量入口中断向量入口处代代码做了修做了修改,改,变成成0 x00000018:LDRPC,PC,#0 xff0这条指令从内存映射地址条指令从内存映射地址0 xfffff030处获得数据装得数据装载到到PC,这样就能就能够直接从硬件中直接从硬件中获得中断源得中断源这样就减少了中断延就减少了中断延迟三星的S3C44B0需要需要用用软件确定中断源,因此要建立中断向量表件确定中断源,因此要建立中断向量表异常异常处理完理完毕之后,之后,ARM微微处理器会理器会执行以下几步行以下几步操作从异常返回:操作从异常返回:1、将、将链接寄存器接寄存器LR(R14_irq)的)的值减去相减去相应的的偏移量后送到偏移量后送到PC中SUBSPC,LR_irq,#42、将、将SPSR(SPSR_irq)复制回)复制回CPSR中3、若在、若在进入异常入异常处理理时设置了中断禁止位,要在置了中断禁止位,要在此清除4.3.4ARM系统的中断编程机制系统的中断编程机制lARM编程特程特别是系是系统初始化代初始化代码的的编写中通常需要写中通常需要实现中断的响中断的响应、解析跳、解析跳转和返回等操作和返回等操作。
l如前所述,如前所述,ARM系系统一般采用一般采用IRQ异常中断来帮助外异常中断来帮助外部部设备向向CPU请求服求服务ARM系系统可接受可接受32个异常中个异常中断源,同断源,同时也构成了一个也构成了一个IRQ中断向量表在中断向量表在该表中表中可以放置自己可以放置自己编写的写的对应中断源的中断服中断源的中断服务程序入口程序入口地址S3C44B0X系系统的中断的中断编程就是基于程就是基于这张IRQ中断向量表来中断向量表来进行1)在)在ARM系系统初始化程序中放置初始化程序中放置IRQ异常中断解析程序异常中断解析程序的入口地址通的入口地址通过ARM两条指令来两条指令来实现:LDRPC,IRQ_AddrIRQ_AddrDCDINT_IRQ上面代上面代码中的中的INT_IRQ是是该系系统中中IRQ解析程序的入口地址解析程序的入口地址只要有一个只要有一个IRQ中断中断请求,系求,系统就会自就会自动的跳的跳转到到IRQ异常中异常中断解析程序断解析程序2)编写写IRQ中断解析程序中断解析程序ARM处理器响理器响应中断的中断的时候,候,总是从固定的地址开始的,而是从固定的地址开始的,而在高在高级语言言环境下开境下开发中断服中断服务程序程序时,无法控制固定地址开,无法控制固定地址开始的跳始的跳转流程。
流程为了使得上了使得上层应用程序与硬件中断跳用程序与硬件中断跳转联系起系起来,需要来,需要编写一段中写一段中间的服的服务程序来程序来进行行连接这样的服的服务程程序常被称作中断解析程序,通常用序常被称作中断解析程序,通常用ARM汇编指令指令编写PC跳转到固定地址跳转到固定地址跳至目标中断函数地址跳至目标中断函数地址从起始固定地址跳转到用户定义的固定地址的内存区,从起始固定地址跳转到用户定义的固定地址的内存区,其中存放着中断再跳转的解析程序其中存放着中断再跳转的解析程序解析程序读取中断向量表,得到具体解析程序读取中断向量表,得到具体中断源的中断函数的目标地址中断源的中断函数的目标地址中断请求中断请求图图4-6中断跳转流程中断跳转流程(3)编写写对应中断源的中断服中断源的中断服务程序流程程序流程图如如图4-7所示:所示:图图4-7中断服务程序流程图中断服务程序流程图中断现场保存中断现场保存用用BL指令跳转到由高级语指令跳转到由高级语言编写的中断服务言编写的中断服务中断返回中断返回图图4-8ARM系统中断编程机制图系统中断编程机制图4.3.5ARM系统中断编程机制的应用实例系统中断编程机制的应用实例l4.3.5ARM系系统中断中断编程机制的程机制的应用用实例例举例举例IRQENTRYbResetHandler;fordebugbHandlerUndef;handlerUndefbHandlerSWI;SWIinterrupthandlerbHandlerPabort;handlerPAbortbHandlerDabort;handlerDAbortb.;handlerReserved;*bIRQ_HandlerbFIQ_HandlerIMPORTISR_IrqHandlerIRQ_HandlerSUBLR,LR,#4STMFDsp!,r0-r12,lrBLISR_IrqHandlerLDMFDsp!,r0-r12,lrvoidISR_IrqHandler()intIntOffset=GetISROffsetClr();/得到中断向量的偏移地址得到中断向量的偏移地址if(IntOffset0)return;if(InterruptHandlersIntOffset=NULL)return;OSIntEnter();(*InterruptHandlersIntOffset)();/CallISROSIntExit();IMPORT HandleEINT3IMPORT HandleEINT2IMPORT HandleEINT1IMPORT HandleEINT0InterruptHandlersldrpc,=HandlerEINT0;mGA硬件中断向量表硬件中断向量表H/Wldrpc,=HandlerEINT1;ldrpc,=HandlerEINT2;ldrpc,=HandlerEINT3;本节提要本节提要1 13 32 26 64 4ARM处理器体系结构处理器体系结构ARM处理器工作模式处理器工作模式S3C44B0X简介简介ARM中断处理中断处理ARM系统启动过程系统启动过程5 5ARM微处理器的指令系统微处理器的指令系统4.4ARM系统启动过程系统启动过程4.4.1BootLoader的概念的概念简单地地说,BootLoader就是在主程序或操作系就是在主程序或操作系统内内核运行之前运行的一段小程序。
通核运行之前运行的一段小程序通过这段小程序,我段小程序,我们可可以初始化硬件以初始化硬件设备、建立内存空、建立内存空间的映射的映射图,从而将系,从而将系统的的软硬件硬件环境境带到一个合适的状到一个合适的状态,以便,以便为程序正常运行程序正常运行准准备好正确的好正确的环境BootLoader是是严重地依重地依赖于硬件而于硬件而实现的,特的,特别是是在嵌入式系在嵌入式系统因此,在嵌入式系因此,在嵌入式系统里建立一个通用的里建立一个通用的BootLoader几乎是不可能的几乎是不可能的可以可以对BootLoader归纳出一些通用的概念来,以出一些通用的概念来,以指指导用用户特定的特定的BootLoader设计与与实现1.BootLoader所支持的所支持的CPU和嵌入式板和嵌入式板每种不同的每种不同的CPU体系体系结构都有不同的构都有不同的BootLoader有些有些BootLoader也支持多种体系也支持多种体系结构的构的CPU,比如,比如U-Boot就同就同时支持支持ARM体系体系结构和构和MIPS体系体系结构除了依构除了依赖于于CPU的体系的体系结构外,构外,BootLoader实际上也依上也依赖于具于具体的嵌入式板体的嵌入式板级设备的配置。
的配置2.BootLoader的安装媒介(的安装媒介(InstallationMedium)系系统加加电或复位后,所有的或复位后,所有的CPU通常都从某个由通常都从某个由CPU制造商制造商预先安排的地址上取指令比如,基于先安排的地址上取指令比如,基于ARM7TDMIcore的的CPU在复位在复位时通常都从地址通常都从地址0 x00000000取它的第取它的第一条指令而基于一条指令而基于CPU构建的嵌入式系构建的嵌入式系统通常都有某种通常都有某种类型型的固的固态存存储设备(比如:比如:ROM、EEPROM或或FLASH等等)被映被映射到射到这个个预先安排的地址上因此在系先安排的地址上因此在系统加加电后,后,CPU将首将首先先执行行BootLoader程序l图4-10就是一个同就是一个同时装有装有BootLoader、内核的启、内核的启动参数、内核映像和根文件系参数、内核映像和根文件系统映像的固映像的固态存存储设备的的典型空典型空间分配分配结构构图内核内核文件系统文件系统Bootloader启动参数启动参数3.用来控制用来控制BootLoader的的设备或机制或机制主机和目主机和目标机之机之间一般通一般通过串口建立串口建立连接,接,BootLoader软件在件在执行行时通常会通通常会通过串口来串口来进行行I/O,比如:,比如:输出打印信息到串口,从串口出打印信息到串口,从串口读取用取用户控制字符等。
控制字符等4.BootLoader的启的启动过程是程是单阶段(段(SingleStage)还是多是多阶段(段(Multi-Stage)通常多通常多阶段的段的BootLoader能提供更能提供更为复复杂的功能,的功能,以及更好的可移植性从固以及更好的可移植性从固态存存储设备上启上启动的的BootLoader大多都是大多都是2阶段的启段的启动过程,也即启程,也即启动过程可以程可以分分为stage1和和stage2两部分5.BootLoader的操作模式的操作模式(OperationMode)大多数大多数BootLoader都包含两种不同的操作模式:都包含两种不同的操作模式:“启启动加加载”模式和模式和“下下载”模式,模式,这种区种区别仅对于开于开发人人员才有才有意意义启启动加加载(Bootloading)模式:)模式:这种模式也称种模式也称为“自主自主”(Autonomous)模式也即)模式也即BootLoader从目从目标机上机上的某个固的某个固态存存储设备上将操作系上将操作系统加加载到到RAM中运行,中运行,整个整个过程并没有用程并没有用户的介入应用用场合:系合:系统正常工作模式正常工作模式下下载(Downloading)模式:目)模式:目标机上的机上的BootLoader将通将通过串口串口连接或网接或网络连接等通信手段从主机(接等通信手段从主机(Host)下)下载文件。
文件应用用场合:合:第一次安装内核与根文件系第一次安装内核与根文件系统时被使用;系被使用;系统更新或升更新或升级6.BootLoader与主机之与主机之间进行文件行文件传输所用的通信所用的通信设备及及协议最常最常见的情况就是,目的情况就是,目标机上的机上的BootLoader通通过串口与串口与主机之主机之间进行文件行文件传输,传输协议通常是通常是xmodemymodemzmodem协议中的一种中的一种但是,串口但是,串口传输的速度是有限的,因此通的速度是有限的,因此通过以太网以太网连接并接并借助借助TFTP协议来下来下载文件是个更好的文件是个更好的选择4.4.2BootLoader的主要任务的主要任务由于由于BootLoader的的实现依依赖于于CPU的体系的体系结构,构,因此大多数因此大多数BootLoader都分都分为stage1和和stage2两大部分依两大部分依赖于于CPU体系体系结构的代构的代码,比如,比如设备初初始化代始化代码等,通常都放在等,通常都放在stage1中,而且通常都用中,而且通常都用汇编语言来言来实现,以达到短小精悍的目的而,以达到短小精悍的目的而stage2则通常用通常用C语言来言来实现,这样可以可以实现给复复杂的功能,而的功能,而且代且代码会具。