您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 22嵌入式微处理器arm
嵌入式系统及应用32位嵌入式微处理器ARM(1)ARM体系结构及处理器内核3主要内容•体系结构•编程模型•指令集介绍•ARM处理器内核•内存及IOOnchipRAM基于ARM的系统举例ARMProcessorcoreAMBAAHBExternalMemoryInterfaceAPBBridgeAMBAAPBInterruptControllerARMPrimecellPeripheralsGPIODMAPortClocksandResetController•ARM核深度嵌入于SoC中–通过JTAG口进行外部调试•设计既有外部内存又有内部内存–支持不同的内存宽度、速度和大小•包含一个中断控制器–内核只支持两种中断•包含Primecell外设–需要从ARM公司取得授权•用AMBA相连的器件(AdvancedMicrocontrollerBusArchitecture)DEBUGnIRQnFIQFLASHSDRAMARMbasedSoC高速缓存内核术语•MPU–内存保护单元–控制内存访问权限–控制内存区域的属性(cacheable,bufferable)•MMU–内存管理单元–具有MPU的所有特性–另外提供虚拟地址到物理地址的转换•Cache(高速缓存)–快速的本地内存–存放最近被访问过的内存的副本•TCM–紧耦合内存–快速的本地内存–特定的地址范围•Writebuffer(写缓存区)–减少了写数据到外部内存的次数ARM9EIntegerCoreCacheMemorySystemTCMWritebufferMMUorMPUBUSInterfaceControlCoprocessorARM926EJ-ScoreFastcoreclockdomainSystemonChipSlowerbusclockdomainARM体系结构的发展4T半字以及有符号半字/字节支持系统模式Thumb指令集增强的ARM/Thumb指令交互CLZ指令饱和运算DSP乘加指令扩展:Jazelle(5TEJ)5TE6SIMD指令多处理技术V6内存体系支持非对齐数据扩展:Thumb-2(6T2)TrustZone(6Z)7•注意:相同体系可能有完全不同的实现–ARM7TDMI-archv4T.冯诺依曼结构,3级流水线–ARM920T-archv4T.哈佛结构,5级流水线,具有MMUThumb-2CoreSight7A(Applications)NEON7R(Real-time)支持硬件除法7M(Microcontroller)只支持Thumb-2各种体系的ARM内核列表处理器核心体系结构•ARM7TDMI系列v4T–ARM720T,ARM740T•ARM9TDMI系列v4T–ARM920T,ARM922T,ARM940T•ARM9E系列v5TE,v5TEJ–ARM946E-S,ARM966E-S,ARM926EJ-S•ARM10E系列v5TE,v5TEJ–ARM1020E,ARM1022E,ARM1026EJ-S•ARM11系列v6–ARM1136J(F)-S–ARM1156T2(F)-Sv6T2–ARM1176JZ(F)-Sv6Z•Cortex系列–ARMCortex-A8v7A–ARMCortex-R4v7R–ARMCortex-M3v7M•附录里有关于ARM处理器内核的命名习惯和特性的说明8主要内容•体系结构•编程模型•指令集介绍•ARM处理器内核•内存及IO数据宽度和指令集•ARM属于RISC体系–许多指令能够在单周期内执行•ARM是32位读取/存储架构•数据类型–字节型数据(Byte):数据宽度为8bits–半字数据类型(HalfWord):数据宽度为16bits,存取式必须以2字节对齐的方式–字数据类型(Word):数据宽度为32bits,存取式必须以4字节对齐的方式数据宽度和指令集•大部分的ARM处理器都实现了两种指令集–32位ARM指令集–16位Thumb指令集•最新的ARM核引入了新的指令集Thumb-2–提供了32位和16位的混合指令–在增强了灵活性的同时保持了代码高密度•Jazelle核可以执行Java字节码(Javabytecode)•ARM处理器有七种基本的操作模式:–每一种模式只能访问:•自己的栈空间和不同的寄存器子集–有一些操作只能在特权模式下执行处理器模式模式描述Supervisor(SVC)当复位或者软中断(SWI)指令被执行时进入特权模式FIQ一个高优先级的快速中断产生时进入IRQ一个低优先级的普通中断产生时进入Abort用来处理内存访问异常Undef用来处理未定义的指令System特权模式,与用户模式使用相同寄存器User大多数应用程序/操作系统任务执行时的模式非特权模式异常模式ARM寄存器集(ARMState)r0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)Usermodespsrr13(sp)r14(lr)IRQFIQr8r9r10r11r12r13(sp)r14(lr)spsrspsrr13(sp)r14(lr)Undefspsrr13(sp)r14(lr)Abortspsrr13(sp)r14(lr)SVC当前模式BankedoutregistersARM有37个寄存器,都是32位宽这些寄存器的子集只能在相应模式被访问ARM寄存器集(ThumbState)ARMState与ThumbState寄存器关系通用寄存器•通用寄存器是R0-R15的寄存器,分为三类–没有对应影子寄存器的寄存器R0-R7–有对应影子寄存器的寄存器R8-R14–程序计数器R15(或者PC)•影子寄存器是指该寄存器在不同的模式下对应的物理寄存器通用寄存器•R0-R7–所有模式下,R0-R7所对应的物理寄存器都是相同的–这八个寄存器是真正意义上的通用寄存器,ARM体系结构中对它们没有作任何特殊的假设,它们的功能都是等同的。–在中断或者异常处理程序中一般都需要对这几个寄存器进行保存。ARM微处理器:通用寄存器•R8-R14–访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。–R8-R12各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。–R13-R14各有6个分组的物理寄存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。–R13(也被称为SP指针)被用作栈指针,通常在系统初始化时需要对所有模式下的SP指针赋值,当CPU在不同的模式时栈指针会被自动切换成相应模式下的值。–R14有两个用途,一是在调用子程序时用于保存调用返回地址,二是在发生异常时用于保存异常返回地址。ARM微处理器:通用寄存器•R15–用作程序计数器(PC),可以被读写–ARMstate:bits[1:0]为0,bits[31:2]即为PC–THUMBstate:bit[0]为0,bits[31:1]即为PCARM微处理器:程序状态寄存器•CPSR(当前程序状态寄存器)在所有的模式下都是可以读写的,它主要包含:–条件标志–中断使能标志–当前处理器的模式–其它的一些状态和控制标志ARM微处理器:程序状态寄存器•置0表示执行32bit的ARM指令•置1表示执行16bit的Thumb指令NegativeZeroCarryOverflowIRQ中断的响应:置1:禁止响应置0:允许响应FIQ中断的响应:置1:禁止响应置0:允许响应条件标志模式控制位ARM/Thumb控制标志中断标志程序状态寄存器•条件标志位–N=ALU产生负数结果–Z=ALU产生结果是0–C=ALU操作产生进位或借位–V=ALU结果溢出•溢出标志–Q标志–只在5TE架构及以后被定义–表示饱和是否产生•J位–只在5TEJ架构及以后被定义–J=1:处理器处于Jazelle态•中断关闭位–I=1:关闭IRQ–F=1:关闭FIQ•T位–T=0:处理器处于ARM态–T=1:处理器处于Thumb态–在4T架构被引入•模式位–指定了处理器当前模式fsxc2731NZCVQ2867IFTmode16231554024UndefinedJ•V6新引入的–GE[3:0]被一些SIMD指令使用–E位控制读取/存储的大小端–A位关闭不准确的数据异常中断–IT[abcde]用于Thumb2指令组的条件执行108919GE[3:0]EAITcond_abcde程序状态寄存器•模式控制位M0-M423•当处理器运行在ARM状态:–所有的指令都是32位宽–所有的指令都必须字对齐–因此PC的值存储在位[31:2],而位[1:0]无定义(因为ARM指令不能是半字对齐或者字节对齐)•当处理器运行在Thumb状态:–所有的指令都是16位宽–所有的指令都必须半字对齐–因此PC的值存储在位[31:1],而位[0]无定义(因为Thumb指令不能是字节对齐)程序计数器PC(r15)数据对齐•在v6架构之前,数据访问都必须针对要访问的大小把访问地址进行对齐–没有对齐的地址将会导致无法预料/未定义的结果•用“数据中止”异常来检测无效的未对齐数据访问–外部逻辑需要,或者使用MMU–需要注意指令预取也可能出现没对齐•没有对齐的地址数据可以通过多个对齐地址数据移位/掩码操作来实现•V6架构添加了新的硬件来支持未对齐的数据访问字节访问(字节对齐)半字访问(半字对齐)字访问(字对齐)3210765402468ace089abcdef48c•大小端决定了寄存器的内容和内存内容的格式关联–ARM寄存器是字(4字节)宽–ARM是按照字节顺序来寻址内存的•ARM支持大端(Big-endian)和小端(Little-endian)的内存数据方式,可以通过硬件的方式设置端模式,也可以通过软件的方式来设置(V6版本以上)大小端大端的数据存放格式低地址高地址地址A地址A+1地址A+2地址A+3最高有效字节的地址就是该word的地址最高有效字节位于最低地址worda=0xf6734bcdf6734bcd大小端最高有效字节:Mostsignificantbyte最低有效字节:Leastsignificantbyte小端的数据格式低地址高地址地址A地址A+1地址A+2地址A+3最低有效字节的地址就是该word的地址最低有效字节位于最低地址worda=0xf6734bcdf6734bcd大小端最高有效字节:Mostsignificantbyte最低有效字节:Leastsignificantbyte大端:小端:0xb32045000xddddddd00xb32045000xddddddd0f6f673734b4bcdcddada0000•实例–变量A:wordA=0xf6734bcd,在内存中的起始地址为0xb3204500–变量B:halfwordB=218,在内存中的起始地址为0xddddddd0问题:halfwordB=218与wordC=218在内存中的存放方式有何不同?请分大端和小端两种情况说明。大小端29向量表异常处理•当一个异常产生,处理器核会:–把CPSR的值拷贝到SPSR_mode–设置CPSR的相关位•改变到ARM态•改变到异常模式•关闭中断(如果适合)–把返回地址保存在LR_mode–把PC拨到异常向量表地址•如果从异常返回,异常处理程序需要:–从SPSR_mode恢复CPSR–把PC拨到LR_mode指向的地址以上只能在ARM状态完成从ARM720T开始,向量表可以在0xFFFF0000FIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x0030主要内容ARM体系结构编程模型•指令集介绍ARM处理器内核内存及IOARM指令集•所有的指令长度都是32位/许多指令都在一个单独周期内执行•指令是条件执行的•Load(加载)/store(存储)架构–数据处
本文标题:22嵌入式微处理器arm
链接地址:https://www.777doc.com/doc-2954817 .html