第2章_ARM体系结构课件

PPT
  • 阅读 95 次
  • 下载 0 次
  • 页数 131 页
  • 大小 4.759 MB
  • 2022-12-05 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第2章_ARM体系结构课件
可在后台配置第一页与第二页中间广告代码
第2章_ARM体系结构课件
可在后台配置第二页与第三页中间广告代码
第2章_ARM体系结构课件
可在后台配置第三页与第四页中间广告代码
第2章_ARM体系结构课件
第2章_ARM体系结构课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 131
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】第2章_ARM体系结构课件.ppt,共(131)页,4.759 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-92614.html

以下为本文档部分文字说明:

第2章ARM体系结构本章主要介绍的内容:ARM体系结构、寄存器结构、异常处理、中断、存储器结构、数据类型、工作模式和工作状态。重点内容:寄存器结构、异常处理、中断、存储器结构、数据类型、工作模式和工作状态

。目的和要求:了解ARM分类方法,掌握存储结构、寄存器结构、处理器状态与模式及两种状态集。2.1.1ARM体系结构的技术特征1.ARM的体系结构采用了若干BerkeleyRISC处理器设计中的特征Loa

d/store体系结构固定的32位指令3地址指令格式2.也放弃了其它若干BerkeleyRISC特征寄存器窗口延迟转移所有的指令单周期执行2.1ARM体系结构简介RISC架构的ARM微处理器特点:(1)支持Thumb(16位)/ARM(32

位)双指令集;(2)指令执行采用3级流水线/5级流水线技术;(3)带有指令cache和数据cache,大量使用寄存器;(4)支持大端格式和小端格式两种方法存储字数据;(5)支持用户、快速中断、中断、管理、中止、系统和未定义这7种处理器模式;(6

)使用JTAG仿真调试ARM体系结构芯片;(7)具有片上总线AMBA(AdvancedMicrocontrollerBusArchitecture)。AMBA定义了3组总线:先进高性能总线AHB、先进系统总线ASB和先进外围总线APB。2.1.1ARM体系结构

的技术特征2.1ARM体系结构简介2.1.1ARM体系结构的技术特征2.1ARM体系结构简介测试接口ARMCPUSDRAMControlSRAMLCDControl并行接口串行接口TimerUART基于AMBA总线的典型系统桥高性能总线AHB外部总线APB2.1ARM体系结构简介写

缓冲器ARM7TDMI核8KBCacheCPU单元电源管理AIN[7:0]A/D转换器看门狗定时器32768Hz实时时钟RTCTCLK总线仲裁器ARM7TDMI边界扫描节拍控制器时钟产生器(PLL)JTAG模拟量输入EXTCLK存储器ROM/SRAMDRAM/SDRAMLCDDMA中断控制

器ZDMA(2路)系统总线桥&仲裁/BDMA(两路)GPIO(控制器)I2C总线控制器I2S总线控制器UART0、1同步输入/输出口PWM定时器0~4、5SIOCK通用输入/输出系统总线AHBLCDCONT外围设备总线APB2.1.2ARM体系结

构的演变1.Thumb指令集(T变种)Thumb指令集是把32位的ARM指令集的一个子集重新编码后而形成的一个特殊的16位的指令集。2.长乘指令(M变种)长乘指令是一种生成64位相乘结果的乘法指令(此指令为AR

M指令),M变种增加了两条长乘指令。3.增强型DSP指令(E变种)E变种的ARM体系增加了一些增强处理器对典型的DSP算法处理能力的附加指令。4.Java加速器Jazelle(J变种)ARM的Jazelle技术是Java语言和先进的32位RISC芯片完美结合的产

物。5.ARM媒体功能扩展(SIMD变种)2.1.2ARM体系结构的演变2.1.3ARM体系结构的命名规则ARM/Thumb体系版本由下面几部分组成:1.基本字符串ARMv。2.基本字符串后为ARM指令集版本号,目前是1-8的数字字符。3.ARM指令集版本号后为表示所含变种的字符。

由于在ARM体系版本4以后,M变种成为系统的标准部件,所以字符M通常也不单独列出来。4.最后使用的字符x表示排除某种功能。例:ARM7TDMI支持32位寻址范围,ARM7TDMI的后缀意义为:支持高密度16位的Thumb指令集支持片上调试支持64位乘法支

持EmbededICE观察硬件ARM7TDMI的可综合版本(软核),对应用工程师来说其编程模型与ARM7TDMI一致ARM7TDMI-S2.1.3ARM体系结构的命名规则2.2ARM处理器的数据格式2.2.1A

RM存储数据类型ARM处理器支持以下6种数据类型:(1)8位有符号和无符号字节(Byte)。(2)16位有符号和无符号半字(Halfword)。它们必须以两字节的边界对齐(半字对齐)。(3)32位有符号和无符号字(word)。它们必须以4字节的边界对齐(字对齐

)。注意:在ARM中一个字是4个字节,不是2个字节。字对齐:字单元地址的低两位A1A0=0b00。即地址末位为0x0、0x4、0x8、0xc。半字对齐:半字单元地址的最低位A0=0b0地址末位为0x0、0x2、0x4、0x

6、0x8、0xa、0xc、0xe。2.2ARM处理器的数据格式2.2.1ARM存储数据类型对于指令:ARM指令系统分为32位ARM指令集和16位的Thumb指令集,在存储时分别以32位和16位的两种不同长度存储。对于

数据:ARM支持对32位字数据,16位半字数据,8位字节数据操作。因此数据存储器可以存储32位,16位,8位三种不同长度数据。在ARM内部,所有操作都面向32位的操作数,只有数据传送指令支持较短的字节和半字的数据类型。当从存储器读入一个字节或半字时,根据其数据类型将

其扩展到32位。2.2ARM处理器的数据格式2.2.2ARM存储器结构ARM存储器以8位为一个单元存储数据(一个字节),每个存储单元分配一个存储地址。ARM将存储器看作是从0地址开始的字节的线性组合。作为32位的微处

理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。从0字节到3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。32位的字数据要使用4个地址单元,16位半数据要使用2个地址单元。这样,就存在一个所存储的字或半字数据的排列顺序问题。ARM体系结构可以

用两种方法存储字数据,称为大端格式和小端格式。2.2ARM处理器的数据格式2.2.2ARM存储器结构1.小端存储格式(little-endin)字(32位)由4个字节组成,把最低位的字节标为A,最高位标

为A+3。也就是数据的低位字节存储在低位地址,数据的高位字节存储在高位地址。注意:在小端存储格式中,是以字或半字的最低位来命名所存储的字或半字的首地址。二进制位31„2423„1615„876„0数据字节A+3字节A+2字节A+1字节A存储地址0X00030X00020X

00010X0000半字1:存储在0x0000;它的值是:C3A6半字2:存储在0x0002;它的值是:2366字1:存储在0x0000;它的值是:2366C3A6字2:存储在0x0004;它的值是:AC9E008F字3:存储在0x0008;它的值是:478B6374存储值2A

/3647/8B63/74AC/9E00/8F23/66C3/A6地址0D/0C0B/0A09/0807/0605/0403/0201/00半字半字7半字6半字5半字4半字3半字2半字1字字3字2字12.2.2ARM存

储器结构1.小端存储格式(little-endin)2.2ARM处理器的数据格式思考:1.半字5存储在什么地址?它的值是多少?2.字4存储在什么地址?3.处理器对半字进行操作的时候,不能存储在哪些地址?4.对字进行操作的时候,只能把地址存储在哪些地址?2.2.2ARM存储器结构2.大端存储

格式(big-endin)字(32位)由4个字节组成,把最低位的字节标为A+3,最高位标为A。也就是数据的高位字节存储在低地址,数据的低位字节存储在高地址。0x0003-0x0000存放一个字,地址0x0007-0x0

004存放下一个字。注意:在大端存储格式中,是以字或半字的最高位来命名所存储的字或半字的首地址。二进制位32„2423„1615„8765„0数据字节A字节A+1字节A+2字节A+3存储地址0x00030x00020x00

010x00002.2ARM处理器的数据格式半字1:存储在0x0002;它的值是:6623半字2:存储在0x0000;它的值是:A6C3字1:存储在0x0000;它的值是:A6C36623字2:存储在0x0004;它的值是:8F009EAC半字6存储在什么地址?它的值是多少?字3存储在

什么地址?它的值是多少?注意:1.大端存储格式也要地址对齐;2.无论大小端格式,字的存储地址没有变化,但数据顺序发生变化字节顺序发生变化。存储值2A/3647/8B63/74AC/9E00/8F23/66C3/A6地址

0D/0C0B/0A09/0807/0605/0403/0201/00半字半字8半字5半字6半字3半字4半字1半字2字字3字2字12.大端存储格式(big-endin)2.2ARM处理器的数据格式大端的数据存放格式小端的数据存放格式低地址高地址地址A地址A+1地址A+2地址A+3例:Worda=

0xf6734bcdf6734bcd低地址高地址地址A地址A+1地址A+2地址A+3f6734bcd2.2ARM处理器的数据格式低地址高地址0x00000x00010x00020x0003问题:这两种存储方法混用,会带来什

么问题?2.2ARM处理器的数据格式问题:这两种存储方法混用,会带来什么问题?1.可移植性问题在多台不同存储顺序的主机之间共享信息可以有两种方式:一种是以单一存储方式共享数据,一种是允许主机以不同的存储方式共享数据。使用单一存储顺序只要解释一种格

式,解码简单。使用多种存储方式不需要对数据的原顺序进行转化,使得编码容易,同时当编码器和解码器采用同一种存储方式时因为不需要变换字节顺序,也能提高通信效率。2.通信中的存储顺序问题在网络通信中,Internet协议定义了标

准的网络字节顺序。很多网络设备也存在存储顺序问题:即字节中的位采用大端法或小端法发送。这取决于OSI模型最底层的数据链路层。问题:微处理器希望存储器容量大、速度快。但容量大者速度慢;速度快者容量小。解决方法:构建一个由多级存储器组成的复合存储

器系统。两级存储器方案一般包括:(1)一个容量小但速度快的从存储器(2)一个容量大但速度慢的主存储器宏观上看这个存储器系统像一个即大又快的存储器。实际解决方法:多级存储器系统。2.3ARM存储器层次多级存储器

系统寄存器组:访问时间约为几个ns。片上RAM:与片外RAM比速度快、功耗小、容量小。读写时间约为几个ns。片上Cache:8~32KB,访问时间约为十几ns。主存储器:一般为几兆字节的动态存储器,访问时间约50ns。CPU寄存器组片上RAM片上Cache主存储器硬盘2.3ARM存

储器层次2.4ARM处理器的工作状态和模式为了能够体现ARM的特点和性能,ARM处理器有两种工作状态和7种工作模式。2.4.1ARM处理器的工作状态有两种工作状态:(1)ARM状态:处理器执行32位的字对齐的ARM指令;(2)Thumb状态:处理器执行16位的半字对齐

的Thumb指令。两种状态可以切换:程序执行过程中,通过执行带状态切换的分支指令BX,随时在两种工作状态之间进行切换。并且,处理器工作状态的转变,并不影响处理器的工作模式和相应寄存器中的内容。1.从ARM状态切换到T

humb状态有两种情况ARM处理器自动切换到Thumb状态。(1)执行BX指令,当操作数寄存器的位[0]为1时,则微处理器从ARM状态切换到Thumb状态。此为主动切换。(2)当处理器处于Thumb状态时发生异常(如IRQ、F

IQ、Undef等),处理完异常后,在异常处理返回时,自动切换到Thumb状态。此为自动切换。2.4.1ARM处理器的工作状态2.从Thumb状态切换到ARM状态有两种情况ARM处理器自动切换到Thumb状态。(1)执行BX指令,当操作数寄存器的位

[0]为0时,则微处理器从Thumb状态切换到ARM状态。此为主动切换。(2)当处理器在Thumb状态时发生异常(如IRQ、FIQ、Undef等),则处理器从Thumb状态自动切换到ARM状态进行异常处理。2.4.1ARM处理器的工作状态例

3.1状态切换程序;从ARM状态切换到Thumb状态LDRR0,=Lable+1BXR0;从Thumb状态切换到ARM状态LDRR0,=LableBXR0注意:(1)ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。(2)ARM处理器在开始执行代

码时,只能处于ARM状态。2.4.1ARM处理器的工作状态1.处理器模式2.4.2ARM处理器工作模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式

等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存或存储器保护在ARM7TDMI没有大用处

未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式2.特权模式2.4.2ARM处理器工作模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与

用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中

断响应时进入此模式中止(abt)用于支持虚拟内存或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模

式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)系统(sys)2.4.2ARM处理器工作模式3.异常模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作

系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统

复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应

的模式。每种异常模式都有一些独立的寄存器,以避免因异常退出时用户模式的状态不可靠。未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)2.4.2ARM处理器工作模式4.用户和系统模式处理器模式说明备注用户(usr

)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位

和软件中断响应时进入此模式中止(abt)用于支持虚拟内存或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户

模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。用户(usr)系统(sys)CPSR(当前程序状态寄存器)的低5位用于定义当前操作模式:CPSR[4:0]模式用途可访问的寄存器1

0000用户正常用户模式,程序正常执行模式PC、R14~R0、CPSR10001FIQ处理快速中断,支持高速数据传送或通道处理PC、R14_fiq~R8_fiq、R7~R0、CPSR、SPSR_fiq10010IRQ处理普通中断PC、R14_irq~R13_irq、R12~R0、

CPSR、SPSR_irq10011SVC操作系统保护模式,处理软件中断(SWI)PC、R14_svc~R13_svc、R12~R0、CPSR、SPSR_svc10111中止处理存储器故障、实现虚拟存储器和存储器保护PC、R14_abt~

R13_abt、R12~R0、CPSR、SPSR_abt11011未定义处理未定义的指令陷阱,支持硬件协处理器的软件仿真PC、R14_und~R13_und、R12~R0、CPSR、SPSR_und11111系统运行特权操作系统任务PC、R14~R0、CPSR

2.4.2ARM处理器工作模式异常向量地址异常类型进入时的模式进入时I的状态进入时F的状态异常中断含义0x00000000复位管理禁止禁止当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。复位异常中断通常用在下

面几种情况下:1、系统加电时2、系统复位时3、跳转到复位中断向量处执行,称为软复位0x00000004未定义指令未定义IF当ARM处理器或系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断。可通过该异常中断机制仿真浮点向量运算0x0000000

8软件中断管理禁止F这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作0x0000000C中止(预取)中止IF如果处理器预取的指令地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止异常

中断0x00000010中止(数据)中止IF如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断0x00000014保留保留——系统保留0x00000018IRQ中断禁止F当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产

生外部中断请求异常中断。系统中各外设通常通过该异常中断请求处理器服务0x0000001CFIQ快中断禁止禁止当处理器的外部快速中断请求引脚有效,而且CPSR寄存器的F控制位被清除时,处理器产生外部中断请求注:表中的I和F表示不对

该位有影响,保留原来的值。寄存器类别寄存器在汇编中的名称ARM状态各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R

6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_und

R13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR

_irqSPSR_fiq2.4.3ARM状态下的寄存器组织2.4.3ARM状态下的寄存器组织用户系统管理中止未定义中断快中断R0R0R0R0R0R0R0R1R1R1R1R1R1R1R2R2R2R2R2R2R2R3R3R3R3R3R3R3

R4R4R4R4R4R4R4R5R5R5R5R5R5R5R6R6R6R6R6R6R6R7R7R7R7R7R7R7R8R8R8R8R8R8R8_fiqR9R9R9R9R9R9R9_fiqR10R10R10R10R1

0R10R10_fiqR11R11R11R11R11R11R11_fiqR12R12R12R12R12R12R12_fiqR13R13R13_svcR13_abtR13_undR13_irqR13_fiqR14R14R14_svcR

14_abtR14_undR14_irqR14_fiqPCPCPCPCPCPCPCCPSRCPSRCPSRCPSRCPSRCPSRCPSRSPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq异常模式特权模

式模式1.ARM状态的通用寄存器(1)不分组寄存器:R0~R7(2)分组寄存器:R8~R14(3)程序计数器:R15(PC)2.4.3ARM状态下的寄存器组织(1)不分组寄存器R0~R7①R0~R7是不分组寄存器。这意味着在所有处理器模式下,它们每一个都访问的是同一个物理寄存器。它

们是真正并且在每种状态下都统一的通用寄存器。②未分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器,但必须注意对同一寄存器在不同模式下使用时的数据保护。2.4.3ARM状态下的寄存器组织(2)分组寄存器R8~R14①分组寄存器R8~R12FIQ模式分组寄

存器R8~R12FIQ以外的分组寄存器R8~R12②分组寄存器R13、R14寄存器R13通常用做堆栈指针SP寄存器R14用作子程序链接寄存器LR2.4.3ARM状态下的寄存器组织(3)程序计数器R15①寄存

器R15被用作程序计数器,也称为PC。②R15值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现一些不可预料的结果。③ARM处理器采用多级流水线技术,因此保存在R15的程序地址并不是当前指令的地址。④一些指令对于R15的用法有一些特

殊要求。2.4.3ARM状态下的寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R

3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(

SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqS

PSR_fiqARM状态各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_

svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37个寄存器,分成两大类:(1)31个通用32位寄存器;(2)6个状态寄存器。寄存器类别寄存器在汇

编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_f

iqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)

R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR

_fiq无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统SPSR_abtCPSRR15R14_svcR13

_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R

7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR

13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模式下可以访问的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快

中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR1

0(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR

14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_u

ndR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在汇编语言中寄存器R0~R13为保存数据或地址值的

通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)

R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fi

qR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRS

PSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fi

qR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访

问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10

R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR1

4_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR

13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14为分组寄存器。它们所对应的物理寄存器

取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v

3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR1

3_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_und

SPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模

式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a

3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fi

qR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_

abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR

13_irqR13_undR13_abtR13_svcR13寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R

3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_

fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_ir

qR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆栈指针寄存器R13(SP)寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使

用。但是在Thumb指令集中存在使用R13的指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)

R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_

irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_

fiq链接寄存器R14(LR)R14为链接寄存器(LR),在结构上有两个特殊功能:(1)在每种模式下,模式自身的R14版本用于保存子程序返回地址;(2)当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。Lable程

序A程序BR142.R14寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)Lable???(1)程序A执行过程中调用程序B;操作流程(2)程序跳转至标号为Lable,再执行程序B。同时硬件将“BLLable”指令的下一

条指令所在地址存入R14;(3)程序B执行最后,将R14寄存器的内容放入PC,返回程序A;2.4.3ARM状态下的寄存器组织异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成

的。区别在于有些异常有一个小常量的偏移。当发生异常嵌套时,这些异常之间可能会发生冲突。如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新

使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。3.R14寄存器与异常发生和注意事项2.4.3ARM状态下的寄存器组织R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB

...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断时,硬件将某个地址存入IRQ模式下的寄存器R14_irq中,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将寄存器R14_irq的内容减去某个常量后存入PC,

返回之前被中断的程序中;未被破坏2.4.3ARM状态下的寄存器组织3.R14寄存器与异常发生和注意事项R14R14_irq用户模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R

14没有被破坏;3.IRQ服务程序A执行完毕,将寄存器R14_irq的内容减去某个常量后存入PC,返回之前被中断的程序中;未被破坏IRQ模式下的程序BareturnD...YC地址B地址B4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断;5.硬件将返

回地址保存在寄存器R14_irq中,原来保存的返回地址将被覆盖,造成错误;被破坏6.在从程序B返回到程序A,然后在返回到用户模式下被中断的程序时发生错误,将不能正确地返回;returnreturn解决办法是确保R14的对应版本在发生中断嵌套

时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。2.4.3ARM状态下的寄存器组织3.R14寄存器与异常发生和注意事项寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R

2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_

fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器

CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC)寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许

多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果就将是不可预测的。2.4.3ARM状态下的寄存器组织正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(

两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDRR0,PC??????PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码4.读R15的限制2.4.3ARM状态下的寄存器组织当

使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以

最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。2.4.3ARM状态下的寄存器组织4.读R15的限制计算偏移量程序代码(1)SUBR1,PC,#4;R1

=下面STR指令首地址STRPC,[R0];保存STR指令首地址+偏移量LDRR0,[R0];R0=STR指令首地址+偏移量SUBR0,R0,R1;计算偏移量2.4.3ARM状态下的寄存器组织4.读R15的限制计算偏移量程序代码(2)LDRR1,=

Lable;取得下面STR指令首地址LableSTRPC,[R0];保存STR指令首地址+偏移量LDRR0,[R0];取得STR指令首地址+偏移量SUBR0,R0,R1;计算偏移量2.4.3ARM状态

下的寄存器组织4.读R15的限制正常操作时,写入R15的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:2.4.3ARM状

态下的寄存器组织5.写R15的限制(1)在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;(2)在ARM结构V4版及以上版本中,写

入R15的值的最低两位为0,如果不是,结果将不可预测。(1)R15是随时变化的(2)程序发生异常中断时,R15中的值是中断地址向量(3)程序发生跳转时,R15中的值是目标地址(4)R15中的地址值不是指向正在执行的指令(PC指向当前指令的下两条指令的地址)ARM状态下,R15的值

=当前执行的指令地址+8Thumb状态下,R15的值=当前执行的指令地址+4(5)ARM指令是字对齐的,PC值的第0,第1位总为0(6)读R15,注意地址对准(7)写R152.4.3ARM状态下的寄存器组织MOVR15,LR;LDRR1

5,=STRART;LDRR0,[R15,ASR#02];SUBR1,PC,#08;MOVPC,PC语句意思?;√;START是一语句标号,可通过;改变R15的值,编译不通过;没改变R15的值,不造成危险2.4.3ARM状态下的寄存器组织ARM7T

DMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:(1)4个条件代码标志(负N、零Z、进位C和溢出V);(2)2个中断禁止位,分别控制两种类型的中断;(3)5个对当前处理器模式进行编码的位;

(4)1个用于指示当前执行指令(ARM还是Thumb)的位。6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快

中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(

SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR1

4(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序状态寄存器CPSR寄存器CP

SR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。2.4.3ARM状态下的寄存器组织CPSR和SPSR的格式:NZCV——IM0M1

M2M3M4TF—...313029282726876543210条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TF2.4.3ARM状态下的寄存器组织(1)条件代码标志大多数“数值处理指令”可以选择是否影响条件代码标志

位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。N、Z、C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可

按条件来执行,而Thumb指令中只有分支指令可按条件执行。6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织各标志位的含义如下:①N:运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;②Z:指令结

果为0时Z=1(通常表示比较结果“相等”),否则Z=0;(1)条件代码标志6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织③C:当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP指令),并且最高位产生借位

时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;④V:当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。(1)条件代码标志6.ARM程序状态寄存器2.4.3ARM

状态下的寄存器组织CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。它们分别是:①中断禁止位(F、I);②T位;③模式位(M4、M3、M2、M1、M0)。(2)控制代码标志6.ARM程序状态寄存器2.4.3A

RM状态下的寄存器组织①中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。②T位反映了正在操作的状态:当T位置位时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。

6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织(2)控制代码标志③模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。6.ARM程序状态寄存器注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置

,将引起一个无法恢复的错误。2.4.3ARM状态下的寄存器组织(2)控制代码标志6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织(3)M[4:0]模式控制位M[4:0]处理器工作模式可访问的寄存器10000用户模式PC,CPSR,R

14~R010001FIQ模式PC,R7~R0,CPSR,SPSR_fiq,R14_fiq~R8_fiq10010IRQ模式PC,R12~R0,CPSR,SPSR_irq,R14_irq,R13_irq10011管理模式PC,R12~R0,CPSR,SPSR_svc,R14_svc,R13_

svc10111中止模式PC,R12~R0,CPSR,SPSR_abt,R14_abt,R13_abt11011未定义模式PC,R12~R0,CPSR,SPSR_und,R14_und,R13_und11111系统模式PC,R14~R0,CP

SR(ARMv4及以上版本)并非所有的模式位组合都能定义一种有效的处理器模式。其他组合的结果不可预知。CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保您程序的运行不受保留

位的值影响,因为将来的处理器可能会将这些位设置为1或者0。(4)保留代码标志6.ARM程序状态寄存器2.4.3ARM状态下的寄存器组织NZ3130CV2928Q27IT[1:0]2625J24保留23222120

GE[3:0]19181716IT[7:2]151413121110EA98IF76T5M[4:0]43210Cortex-A8处理器的CPSR2.4.3Thumb状态下的寄存器组织Thumb状态寄存器集是ARM状态

集的子集,程序员可以直接访问的寄存器为:①8个通用寄存器R0~R7;②程序计数器(PC);③堆栈指针(SP);④链接寄存器(LR);⑤有条件访问程序状态寄存器(CPSR)。2.4.3Thumb状态下的寄存器组织Thumb状态下寄存器组织R0R1R2R3R4R5R6R7SPLRPCCPS

R系统和用户Thumb状态的程序状态计数器R0R1R2R3R4R5R6R7SP_fiq*LR_fiq*PCCPSRSPSR_fiqFIQR0R1R2R3R4R5R6R7SP_svc*LR_svc*PCCPSRSPSR_svc*管理R0R1R2R3R4R5R6R7

SP_abt*LR_abt*PCCPSRSPSR_abt*中止R0R1R2R3R4R5R6R7SP_irq*LR_irq*PCCPSRSPSR_irq*IRQR0R1R2R3R4R5R6R7SP_und*LR_und*PCCPSRSPSR_un

d*未定义Thumb状态的通用寄存器和程序计数器*分组的寄存器Thumb状态各模式下的寄存器注意:括号内为ATPCS中寄存器的命名,可以使用RN汇编伪指令将寄存器定义多个名字。其中ADS1.2的汇编程序直接支持这些名称,但注意a1~a4,v1~

v4必须用小写。CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4

(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcSPSR

CPSRCPSRCPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R

7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别SPSR_fiqSPSR_irqSPSR_undSPSR_a

btSPSR_svcSPSRCPSRCPSRThumb状态下的通用寄存器在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途

,并且可用于任何使用通用寄存器的指令。CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR

13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别SPSR_fiqS

PSR_irqSPSR_undSPSR_abtSPSR_svcSPSRCPSRCPSRThumb状态下的堆栈指针寄存器(SP)堆栈指针SP对应ARM状态下的R13寄存器。每个异常模式都有其自身的SP分组版本,SP通常分别指向各异常模式所专用的堆栈。注意:在发生异常

时,处理器自动进入ARM状态。CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R

4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcSPSRCPSRCPSRT

humb状态下的链接寄存器R14(LR)链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。注意:在发生异常时,处理器自动进入ARM状态。Thumb状

态寄存器与ARM状态寄存器有如下的关系:Thumb状态R0~R7与ARM状态R0~R7相同;Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;Thumb状态SP映射到ARM状态R13;Thumb状态LR映射到

ARM状态R14;Thumb状态PC映射到ARM状态PC(R15)。2.4.3Thumb状态下的寄存器组织Thumb状态寄存器在Arm状态寄存器上的映射低寄存器高寄存器R0R1R2R3R4R5R6R7堆栈指针(SP)连接寄存器(LR)程序计数器(PC)当前程序状态寄存器(CPSR)被保存

程序状态寄存器(SPSR)Thumb状态R0R1R2R3R4R5R6R7堆栈指针(R13)连接寄存器(R14)程序计数器(R15)当前程序状态寄存器(CPSR)被保存程序状态寄存器(SPSR)ARM状态R8R9R10R11R12R0R1R2R3R

4R5R6R7堆栈指针(R13)连接寄存器(R14)程序计数器(R15)R8R9R10R11R122.4.3Thumb状态下的寄存器组织在Thumb状态中访问高寄存器:在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它

们的访问受到限制,但可以将它们用于快速暂存。可以使用MOV、CMP和ADD指令对高寄存器操作。2.4.3Thumb状态下的寄存器组织2.4.4ARM处理器工作状态ARM处理器核可以工作在以下2种状态:1.ARM状态32位,ARM状态下执行字对

准的32位ARM指令;2.Thumb状态16位,Thumb状态下执行半字对准的16位Thumb指令。在Thumb状态下,程序计数器PC使用位1选择另一个半字。(1)ARM和Thumb之间状态的切换不影响处理器的模式或寄存器

的内容。(2)ARM指令集和Thumb指令集都有相应的状态切换命令。(3)ARM处理器在开始执行代码时,只能处于ARM状态。2.4.4ARM处理器工作状态在程序执行的过程中,处理器可以在两种状态下切换:ARM处理器在两种工作状态之间切换方法:1.进入Thumb

状态当操作数寄存器Rm的状态位bit[0]为1时,执行BXRm指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort和SWI)返回时,自动切换到Thumb状态。2.进入ARM状态当操作数寄存器Rm的状态位bit[0]为0时,执

行BXRm指令进入ARM状态。如果处理器进行异常处理(IRQ、FIQ、Undef、Abort和SWI),在这种情况下,把PC放入异常模式链接寄存器LR中,从异常向量地址开始执行也可以进入ARM状态。2.4.4ARM处理器工作状态使用BX指令将ARM7T

DMI内核的操作状态在ARM状态和Thumb状态之间进行切换,程序如下所示。;从ARM状态切换到Thumb状态LDRR0,=Lable+1BXR0;从Thumb状态切换到ARM状态LDRR0,=LableBXR0地址最低

位为1,表示切换到Thumb状态地址最低位为0,表示切换到ARM状态跳转地址标号2.4.4ARM处理器工作状态2.5ARM的异常中断只要正常的程序流被暂时中止,处理器就进入异常模式。例如:响应一个来自外设的中断。在处理异常之前,ARM7T

DMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。如果同时发生两个或更多异常,那么将按照固定的“异常优先级”顺序来处理异常。ARM7TDMI内核在中断异常时,置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在AR

M状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。ARM把中断定义为一类特殊的异常直接异常:软件中断,未定义指令(包括所要求的协处理器不存在时的协处理器命令)和预取指令间接异常:数据中止(在Load和Store数据访问时的存储

器故障)外部异常(中断):复位、IRQ和FIQ2.5ARM的异常中断异常入口处变量R14所保存的PC值及退出异常处理程序推荐使用指令异常或入口返回指令之前的状态备注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2此处PC

为BL、SWI指令、未定义的指令取指或预取指中止指令的地址SWIMOVSPC,R14_svcPC+4PC+2未定义的指令MOVSPC,R14_undPC+4PC+2预取指中止SUBSPC,R14_abt,#4PC+4P

C+4快中断SUBSPC,R14_fiq,#4PC+4PC+4此处PC为由于FIQ或IRQ占先而没有被执行的指令的地址中断SUBSPC,R14_irq,#4PC+4PC+4数据中止SUBSPC,R14_abt,

#8PC+8PC+8此处PC为产生数据中止的装载或保存指令的地址。复位无——复位时保存在寄存器R14_svc中的值不可预知。注意:“MOVSPC,R14_svc”是指在管理模式执行MOVSPC,R14指令。“MOVSPC,R14_und”、“SUB

SPC,R14_abt,#4”等指令也是类似的。2.5ARM的异常中断2.5.1ARM的异常中断响应过程ARM处理器对异常中断的响应过程如下:1.将CPSR复制到将要执行的异常中断对应的SPSR中;2.将CPSR模式位强制设置为与异常类型相对应的值;3.在适当

的LR中保存下一条指令的地址,当异常入口来自:为ARM状态时,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中;为Thumb状态时,那么ARM7TDMI将当前指令地址加4或加8(取决于异常的类型)复制到LR中;异常处理器程序

不必确定状态。4.强制PC从相关的异常向量处取指。程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断后,硬件完成以下动作:LR_sysSPSR_irqLR_irq

LRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ

模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1...????BackAddrJumpAddrSYS1?0...????“?”表示对该位不关心2.5.1ARM的异常中断

响应过程注意事项:1.ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。2.异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。3.每个异常模式对应有两个寄存

器R13_mode、R14_mode分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,这样异常处理程序就可以使用这些寄存器。4.FIQ模式还有额外的专用寄存器R8_fiq~R12_fiq,使用这些寄存

器可以加快快速中断的处理速度。2.5.1ARM的异常中断响应过程1.异常中断处理程序返回过程从异常中断处理程序中返回时,需要执行以下四个基本操作:2.5.2从异常中断处理程序中返回(1)所有被修改过的用户寄存器必须从处理程序的保护堆栈中恢复回来(即出栈)。(2)将SPSR_mode寄存器内容复制到

CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断的程序工作状态;(3)将LR中的值减去偏移量(偏移量根据异常类型的不同而有所不同)后存入PC,即转到产生异常前用户指令流中相应指令处;(4)最

后清除CPSR中的中断禁止标志位T、F和I。注意:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSR

SYS1?0...????MODTFI...NZCV将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器中,跳转到被中断的用户程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?

0...????SYS1?0...????BackAddr-4“?”表示对该位不关心2.5.2从异常中断处理程序中返回ARM异常中断处理过程2.5.2从异常中断处理程序中返回程序AIRQ服务程序B程序LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?

0...????MODTFI...NZCVBackAddrIRQ0?1...????SYS1?0...????JumpAddr系统模式IRQ模式程序AIRQ服务程序B程序LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...N

ZCVBackAddrIRQ0?1...????SYS1?0...????JumpAddr系统模式IRQ模式程序AIRQ服务程序程序LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...?

???MODTFI...NZCVBackAddrIRQ0?1...????SYS1?0...????JumpAddrreturnJumpAddr-4系统模式IRQ模式发生异常时的ARM处理器的响应过程:2.5.2从异常中断处理程序中返回处理器响应过程

的伪代码描述如下:(1)存入下一条指令地址R14_<Exception_Mode>=ReturnLink(2)保存当前程序状态寄存器到将要执行异常处理的SPSR中SPSR_<Exception_Mode

>=CPSR(3)设置运行模式CPSR[4:0]=ExceptionModeNumber(4)设置运行于ARM工作状态时CPSR[5]=0(5)If<Exception_Mode>==ResetorFIQthen,当响应FIQ异常时,禁止新的IRQ和FIQ异常CPSR[6

]=1;CPSR[7]=1(6)PC值指向异常的向量地址PC=ExceptionVectorAddress如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。

SUBLR,LR,#4;计算返回地址STMFDSP!,{R0-R3,LR};保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^;中断返回中断处理代码的开始部分和退出部分:注意:中断返回指令的

寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指

针应必须在系统启动时初始化。2.异常的入口和出口处理2.5.2从异常中断处理程序中返回快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。不管异常入口是来自A

RM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:SUBSPC,R14_fiq,#4在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。3.快速中断请求2.5.2从异常

中断处理程序中返回中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都

可通过置位CPSR中的I位来禁止IRQ。不管异常入口是来自ARM状态还是Thumb状态,IRQ处理程序都会通过执行下面的指令从中断返回:SUBSPC,R14_fiq,#44.普通中断请求2.5.2从异常中断处理程序中返回中止发生在对存储器的访问不能完成时,中止包含两种类型:预取中止:发

生在指令预取过程中。数据中止:发生在对数据访问时。5.中止2.5.2从异常中断处理程序中返回当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因

为发生分支而没有被执行,中止将不会发生。在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令:SUBSPC,R14_abt,#46.中止——预取指中止2.5.2从异常中断处理程序中返回当发生数据中止后,根据产生数据中止的指

令类型作出不同的处理:数据转移指令(LDR、STR):回写到被修改的基址寄存器。中止处理程序必须注意这一点;交换指令(SWP):中止好像没有被执行过一样,中止必须发生在SWP指令进行读访问时;块数据转移指令(LDM、

STM)完成。当回写被设置时,基址寄存器被更新。在指示出现中止后,ARM7TDMI内核防止所有寄存器被覆盖。这意味着ARM7TDMI内核总是会保护被中止的LDM指令中的R15(总是最后一个被转移的寄存器)。7.中止——数据中止2.5.2从异常中断处理程序中返回在修复产生中止

的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令:SUBSPC,R14_abt,#87.中止——数据中止2.5.2从异常中断处理程序中返回使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通

过执行下面的指令返回:MOVSPC,R14_svc这个动作恢复了PC和CPSR并返回到SWI之后的指令。SWI处理程序读取操作码以提取SWI函数编号。8.软件中断指令2.5.2从异常中断处理程序中返回当ARM7TDMI处理器

遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。注意:ARM7TDMI处理器完全遵循ARM

结构v4T,可以捕获所有分类未被定义的指令位格式。在模拟处理了失败的指令后,陷阱程序执行下面的指令:MOVSPC,R14_svc这个动作恢复了PC和CPSR并返回到未定义指令之后的指令。9.未定义的指令2.5.2从异常中断处理程序中返回例子:显

示从IRQ或FIQ异常处理程序返回的不同方法:1.使用SUBS指令从IRQ和FIQ处理程序返回的一种典型方法xxxhandler<xxxhandler_code>„SUBSpc,r14,#4;pc=r14-4因为在SUB指令尾部有个

S,并且pc是目的寄存器,所以cpsr将自动从spsr寄存器中恢复。从FIQ,IRQ和预取异常(PrefectAbort)返回SUBSpc,lr,#4从数据异常(DataAbort)返回SUBSpc,lr,#82.5.2从异常中断处理程序中返

回2.在处理程序开头处从链接寄存器lr减去偏移量。handlerSUBr14,r14,#4;r14-=4„<handlercode>MOVSpc,r14;返回服务完成后的返回是通过把链接寄存器r14的值写入pc,同时从spsr寄存器中恢复

cpsr来实现的。****从SWI和Undef异常返回MOVSpc,lr2.5.2从异常中断处理程序中返回3.使用中断堆栈来保存链接寄存器。这种方法首先从链接寄存器减去一个偏移量.然后把它保存到中断堆栈里。handlerSUBr14,r14,#4;r14-=4STMFDr13!,

{r0–r3,r14};保护上下文„<handlercode>„LDMFDr13!,{r0–r3,pc}^;返回为了返回到正常的执行,使用LDM指令来装载pc。指令里的符号“^”强迫cpsr从spsr储存器中恢复。2

.5.2从异常中断处理程序中返回(1)中断向量表中指定了各异常中断与其处理程序的对应关系;(2)每个异常中断对应的中断向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令;(3)存储器的前8个字中除了地址0x00000014之外,全部被用作异常

矢量地址。2.5.3异常中断向量表异常向量地址异常类型进入时的模式进入时I的状态进入时F的状态异常中断含义0x00000000复位管理禁止禁止当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中

断处理程序处执行。复位异常中断通常用在下面几种情况下:1、系统加电时2、系统复位时3、跳转到复位中断向量处执行,称为软复位0x00000004未定义指令未定义IF当ARM处理器或系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断。可通过该异常中断机

制仿真浮点向量运算0x00000008软件中断管理禁止F这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作0x0000000C中止(预取)中止IF如果处理器预取的指令地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止异常中断0x00000010

中止(数据)中止IF如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断0x00000014保留保留——系统保留0x00000018IRQ中断禁止F当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制

位被清除时,处理器产生外部中断请求异常中断。系统中各外设通常通过该异常中断请求处理器服务0x0000001CFIQ快中断禁止禁止当处理器的外部快速中断请求引脚有效,而且CPSR寄存器的F控制位被清除时,处理器产生外部中断请求注意:表中的I和F表示不对该位有影响,保留原来的

指。当几个异常中断同时发生时,在ARM中通过给各异常中断赋予一个固定的优先级决定它们被处理的顺序:(1)复位(最高优先级);(2)数据异常中止;(3)FIQ;(4)IRQ;(5)预取指异常中止;(6)SWI、未定义指令(包括缺协处理器)。2.5.4异常中断的优先级异常类型优先级

复位1(最高优先级)数据中止2FIQ3IRQ4预取中止5未定义指令6SWI7(最低优先级)优先级降低异常类型异常进入模式地址(异常向量)优先级复位复位管理模式0x0000,00001(最高)未定义指令未定义指令未定义模式0x0000,00046(最低)软件

中断软件中断管理模式0x0000,00086(最低)指令预取中止中止(预取指令)中止模式0x0000,000C5数据中止中止(数据)中止模式0x0000,00102IRQ(外部中断请求)IRQIRQ0x0000,00184FIQ(快

速中断请求)FIQFIQ0x0000,001C3ARM体系结构的异常类型和异常处理模式2.5.4异常中断的优先级注意:未定义的指令和SWI异常互斥。因为同一条指令不能既是未定义的,又能产生有效的软件中断;当FIQ使能,并且FIQ和数据中止异常同时发生时,ARM7TD

MI内核首先进入数据中止处理程序,然后立即跳转到FIQ向量。在FIQ处理结束后返回到数据中止处理程序。数据中止的优先级必须高于FIQ以确保数据转移错误不会被漏过。2.5.4异常中断的优先级2.5.5异常及异常类型当正常的程序执行流程发生暂时的停止时,称之为异常。在

处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。异常类型、优先级及在存贮器中的入口地址如下示:复位0x0000,0000;管理模式未定义指令0x0000,0004;未定义模式软件

中断0x0000,0008;管理模式指令预取中止0x0000,000C;中止模式数据中止0x0000,0010;中止模式IRQ(外部中断请求)0x0000,0018;IRQ模式FIQ(快速中断请求)0x0000,001C;FIQ模式2.5.6异常处理的方式当系统运行时,异常可能会随时发生,

为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向

量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。ENTRYbResetHandlerbHandlerUndefbHandlerSWIbHandlerPabortbHandlerDabortb.bHandlerIRQbHa

ndlerFIQ2.6ARM微处理器的接口2.6.1ARM协处理器接口为了便于片上系统SoC的设计,ARM可以通过协处理器(CP)来支持一个通用指令集的扩充,通过增加协处理器来增加系统的功能。在逻辑上,ARM可以扩展16个(CP15~CP0)协处理器,其中:CP15作为系统

控制,CP14作为调试控制器,CP7~4作为用户控制器,CP13~8和CP3~0保留。每个协处理器可有16个寄存器。例如MMU和保护单元的系统控制都采用CP15协处理器;JTAG调试中的协处理器为CP14,即调试通信通道DCC(DebugCommunicatio

nChannel)。ARM处理器内核与协处理器接口有以下4类:①时钟和时钟控制信号:MCLK、nWAIT、nRESET;②流水线跟随信号:nMREQ、SEQ、nTRANS、nOPC、TBIT;③应答信号:nCPI、CPA、CPB;④数据信号:D[31:0]、DIN[3

1:0]、DOUT[31:0]。协处理器的应答信号中:①nCPI为ARM处理器至CPn协处理器信号,该信号低电压有效代表“协处理器指令”,表示ARM处理器内核标识了1条协处理器指令,希望协处理器去执行它。②CPA为协处理器至ARM处理器内核信号,表示协处理器不存在,目前协处理器无能力执行指令

。③CPB为协处理器至ARM处理器内核信号,表示协处理器忙,还不能够开始执行指令。2.6.1ARM协处理器接口协处理器也采用流水线结构,为了保证与ARM处理器内核中的流水线同步,在每一个协处理器内需有1个流水

线跟随器(PipelineFollower),用来跟踪ARM处理器内核流水线中的指令。由于ARM的Thumb指令集无协处理器指令,协处理器还必须监视TBIT信号的状态,以确保不把Thumb指令误解为ARM指令。协处理器也采用Load/Store结构,用指令来执

行寄存器的内部操作,从存储器取数据至寄存器或把寄存器中的数保存至存储器中,以及实现与ARM处理器内核中寄存器之间的数据传送。而这些指令都由协处理器指令来实现。2.6.1ARM协处理器接口ARM处理器内核可以通过先进的微控制器总线架构AMBA(AdvancedMicrocontro

llerBusArchitecture)来扩展不同体系架构的宏单元及I/O部件。AMBA已成为事实上的片上总线OCB(OnChipBus)标准。AMBA有AHB(AdvancedHigh-performanceBus,先进

高性能总线)、ASB(AdvancedSystemBus,先进系统总线)和APB(AdvancedPeripheralBus,先进外围总线)等三类总线。2.6.2ARMAMBA接口ASB是目前ARM常用的系统总线,用来连接高性能系统

模块,支持突发(Burst)方式数据传送。AHB不但支持突发方式的数据传送,还支持分离式总线事务处理,以进一步提高总线的利用效率。特别在高性能的ARM架构系统中,AHB有逐步取代ASB的趋势,例如在ARM1020E

处理器核中。APB为外围宏单元提供了简单的接口,也可以把APB看作ASB的余部。AMBA通过测试接口控制器TIC(TestInterfaceController)提供了模块测试的途径,允许外部测试者作为A

SB总线的主设备来分别测试AMBA上的各个模块。AMBA中的宏单元也可以通过JTAG方式进行测试。虽然AMBA的测试方式通用性稍差些,但其通过并行口的测试比JTAG的测试代价也要低些。一个基于AMBA的典型系统如图。2.6.2ARMAMBA接口一个基于AMBA的典型系统ARM核CPU片上RAM

DMA控制器测试接口控制外部总线接口UART定时器并行接口桥路AHB或ASBAPB2.6.2ARMAMBA接口ARM处理器内核一般都没有I/O的部件和模块,ARM处理器中的I/O可通过AMBA总线来扩充。ARM采用了存储器映像I/

O的方式,即把I/O端口地址作为特殊的存储器地址。一般的I/O,如串行接口,它有若干个寄存器,包括发送数据寄存器(只写)、数据接收寄存器(只读)、控制寄存器、状态寄存器(只读)和中断允许寄存器等。这些寄存器都需相应的I/O端口地址。应注意的是存储器

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

功能。2.6.3ARMI/O结构为了能提高I/O的处理能力,对于一些要求I/O处理速率比较高的事件,系统安排了快速中断FIQ(FastInterruptreQuest),而对其余的I/O源仍安排一般中断IRQ。为提高中断响应的速度,在设计中可以采用以下办法:(

1)提供大量后备寄存器,在中断响应及返回时,作为保护现场和恢复现场的上下文切换(ContextSwitching)之用。(2)采用片内RAM的结构,这样可以加速异常处理(包括中断)的进人时间。(3)快存Cache和地址变换后备缓冲器TLB(TranslationLooka

sideBuffer)采用锁住(Lockeddown)方式以确保临界代码段不受“不命中”的影响。2.6.3ARMI/O结构1.JTAG接口JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试

及对系统进行仿真、调试。JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(TestAccessPort,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JT

AG协议,如ARM、DSP、FPGA器件等。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。JTAG接口还常用于实现ISP(In-SystemProgrammable

在系统编程)功能,如对Flash器件进行编程等。通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。标准的JTAG接口是4线式的,分别为TMS(测试模式选择)、TCK(测试时钟)、TDI(

测试数据输入)和TDO(测试数据输出)。目前JTAG接口的连接有14针接口和20针接口两种标准,其定义分别如下表。2.6.4ARMJTAG调试接口引脚名称描述1、13VCC接电源2、4、6、8、10、14GND接地3nTRST测试系统

复位信号5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11TDO测试数据串行输出12NC未连接14针JTAG接口定义2.6.4ARMJTAG调试接口引脚名称描述1VTref目标板参考电压,接电源2VCC接电源3nTRST测试系统复位信号4、6、8、10、12、14、

16、18、20GND接地5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11RTCK测试时钟返回信号13TDO测试数据串行输出15nRESET目标系统复位信号17、19NC未连接20针JTAG接口定义2.6.4ARM

JTAG调试接口2.ARMJTAG调试接口ARMJTAG调试接口的结构如图。它由测试访问端口TAP(TestAccessPort)控制器、旁路(Bypass)寄存器、指令寄存器、数据寄存器以及与JTAG接口兼容的ARM架构处理器组成。处

理器的每个引脚都有一个移位寄存单元(边界扫描单元(BSC,BoundaryScanCell)),它将JTAG电路与处理器核逻辑电路联系起来,同时,隔离了处理器核逻辑电路与芯片引脚。所有边界扫描单元构成了边

界扫描寄存器BSR,该寄存器电路仅在进行JTAG测试时有效,在处理器核正常工作时无效。2.6.4ARMJTAG调试接口(1)JTAG的控制寄存器①测试访问端口TAP控制器对嵌入在ARM处理器核内部的测试功能电路进行访问控制,是一个同步状态机。通过测试模式选择TMS和时钟信号TCK来控制其状态

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

试接口(2)JTAG测试信号JTAG测试信号包含有TRST、TCK、TMS、TDI、TDO五个测试信号。JTAG可以对同一块电路板上多块芯片进行测试。TRST、TCK和TMS信号并行至各个芯片,而一块芯片的TDO接至下一芯片的TDI。(3)TAP状态机测试访问端口TAP

控制器是一个16状态的有限状态机,为JTAG提供逻辑控制,控制进人JTAG结构中各种寄存器内数据的扫描与操作。在TCK同步时钟上升沿的TMS引脚的逻辑电压决定状态转移的过程。由TDI引脚输入到器件的扫描信号有2个状态变化

路径:用于指令移入至指令寄存器,或用于数据移入至相应的数据寄存器(该数据寄存器由当前指令确定)。2.6.4ARMJTAG调试接口JTAG调试接口示意图芯核逻辑输入使能器件ID寄存器旁路寄存器指令寄存器TAP控制器输入使能TDITMSTCKTRSTI/O输出TDO2.6.4ARM

JTAG调试接口(4)JTAG接口控制指令控制指令用于控制JTAG接口各种操作,控制指令包括公用(Public)指令和私有(Private)指令。最基本的公用指令有:①BYPASS:旁路片上系统逻辑指令,用于未被测试的芯片,即把TDI与TPO旁路(1个时钟延迟

)。②EXTEST:片外电路测试指令,用于测试电路板上芯片之间的互连。③IDCODE:读芯片ID码指令,用于识别电路板上的芯片。④INTEST:片内测试指令,边界扫描寄存器位于TDI与TDO引脚之间,处理器核逻辑输入和输出状态被该寄存器捕获和控制。采用ARM公司提供的

标准20脚JTAG仿真调试接口电路如图,可以通过外部JTAG调试电缆或仿真器与开发系统连接调试。2.6.4ARMJTAG调试接口JTAG仿真调试接口电路2143658710912111413161518172019J609JTAG20R60810kΩR60910kΩR61010kΩ

R61110kΩR615470ΩR616330ΩVDD33R61210kΩR6140ΩnTRSTTDITMSTCKTCKnRESETR6130(unload)2.6.4ARMJTAG调试接口谢谢观看!2020

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?