cortex-m34基础4指令系统--实时嵌入式-硬件基础课件_第1页
cortex-m34基础4指令系统--实时嵌入式-硬件基础课件_第2页
cortex-m34基础4指令系统--实时嵌入式-硬件基础课件_第3页
cortex-m34基础4指令系统--实时嵌入式-硬件基础课件_第4页
cortex-m34基础4指令系统--实时嵌入式-硬件基础课件_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、11、ARM v7概述 2.Cortex-M3基础 2.1结构框图 2.2操作模式、特权等级 2.3存器组 2.4流水线 2.5总线 2.6存储系统 2.7中断和异常 2.8SYSTICK定时器主要内容 2.9低功耗 2.10复位 2.11MPU 2.12调试架构 2.13调试部件 3.Cortex-M3指令集 3.1指令集综述 3.2寻址方式 3.3指令集介绍 4.K60硬件基础21、ARM v7概述 2.Cortex-M3基础 2.1结构框图 2.2操作模式、特权等级 2.3存器组 2.4流水线 2.5总线 2.6存储系统 2.7中断和异常 2.8SYSTICK定时器主要内容 2.9低功耗

2、 2.10复位 2.11MPU 2.12调试架构 2.13调试部件 3.Cortex-M3指令集 3.1指令集综述 3.2寻址方式 3.3指令集介绍 4.K60硬件基础31、ARM v7概述 2.Cortex-M3基础 2.1结构框图 2.2操作模式、特权等级 2.3存器组 2.4流水线 2.5总线 2.6存储系统 2.7中断和异常 2.8SYSTICK定时器主要内容 2.9低功耗 2.10复位 2.11MPU 2.12调试架构 2.13调试部件 3.Cortex-M3指令集 3.1指令集综述 3.2寻址方式 3.3指令集介绍 4.K60硬件基础1.CM3程序的文件类型:C程序:CM3开发中大

3、部分程序使用C语言编写,文件类型为“*.C”;汇编程序:涉及到硬件底层操作的代码有时必须使用汇编语言编写,文件类型为“*.S”。2.为什么学习CM3指令系统:操作系统移植编写启动代码方便程序调试5概述1. 处理器的寻址方式;2. 指令的特点;3. 指令的种类,它能完成哪些功能。学习重点71、ARM v7概述 2.Cortex-M3基础 2.1结构框图 2.2操作模式、特权等级 2.3存器组 2.4流水线 2.5总线 2.6存储系统 2.7中断和异常 2.8SYSTICK定时器主要内容 2.9低功耗 2.10复位 2.11MPU 2.12调试架构 2.13调试部件 3.Cortex-M3指令集

4、3.1指令集综述 3.2寻址方式 3.3指令集介绍 4.K60硬件基础3.2 ARM处理器寻址方式寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有8种基本寻址方式。1.寄存器寻址; 2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.相对寻址。 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: MOV R1,R2 ;将R2的值存入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 0 xAA0 x55R

5、2R1寻址方式分类寄存器寻址MOV R1,R20 xAA3.2 ARM处理器寻址方式 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBSR0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOVR0,#0 xFF000 ;将立即数0 xFF000装入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存储寻址方式分类立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据3.2 ARM处理器寻址方式 寄存器移位寻址是ARM指令集特有的寻

6、址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL #3 ;R2的值左移3位,结果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“与”操作,结果放入R10 x55R0R20 x01寻址方式分类寄存器移位寻址MOV R0,R2,LSL #30 x080 x08逻辑左移3位3.2 ARM处理器寻址方式 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针

7、。寄存器间接寻址指令举例如下: LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中 SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换 0 x55R0R20 x400000000 xAA0 x40000000寻址方式分类寄存器间接寻址LDR R0,R20 xAA3.2 ARM处理器寻址方式 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: LDRR2,R3,#0 x0C ;读取R3+0 x0C地址上的存储单元 ;的内容,放入R2

8、STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存储单元 寻址方式分类基址寻址0 x55R2R30 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据3.2 ARM处理器寻址方式 多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIAR1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加1) STMIAR0!,R2-R7,R12 ;将寄存器R2R7、R12的值保 ;存到

9、R0指向的存储; 单元中 ;(R0自动加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器寻址方式分类多寄存器寻址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x400000103.2 ARM处理器寻址方式 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为

10、两种: 向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈寻址方式分类堆栈寻址3.2 ARM处理器寻址方式寻址方式分类堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈3.2 ARM处理器寻址方式栈顶SP栈顶SP栈底空堆栈栈底满堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 寻址方式分类堆栈寻址0 x123456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈3.2 ARM处理器寻址方式所以可以组合出四种类

11、型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 寻址方式分类堆栈寻址3.2 ARM处理器寻址方式 相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1;调

12、用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOPMOVR6,#1.SUBR1. 寻址方式分类相对寻址3.2 ARM处理器寻址方式201、ARM v7概述 2.Cortex-M3基础 2.1结构框图 2.2操作模式、特权等级 2.3存器组 2.4流水线 2.5总线 2.6存储系统 2.7中断和异常 2.8SYSTICK定时器主要内容 2.9低功耗 2.10复位 2.11MPU 2.12调试架构 2.13调试部件 3.Cortex-M3指令集 3.1指令集综述 3.2寻址方式 3.3指令集介绍 4.K60硬件基础3.3指令集介绍 3.3.1汇编基础 3.3.2指令集 3.3.

13、3CM3中的前卫指令简单的程序;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用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 ;文件结束 使用“;”进行注释标号顶格写实际代码段声明文件结束3.3指令

14、集介绍 3.3.1汇编基础 3.3.2指令集 3.3.3CM3中的前卫指令243.3.1汇编基础1、基本语法标号 操作码 操作数1,操作数2, ;注释注释:1)标号可选,如果有,必须顶格写。标号的作用是让汇编器来计算程序转移地址。2)操作码是指令的助记符,前面必须至少有一个空白符。3)第1操作数,通常给出本指令的执行结果的存储位置。4)第2操作数以后的操作数,通常是参与运算的数据或其位置。5);后的为注释,不影响汇编器的工作。252、汇编语言中的后缀1)条件执行后缀通常用于跳转指令;2)如果其他指令在IF-THEN指令块中,也可以使用条件执行后;3)条件后缀和S后缀可同时使用。263、统一汇编

15、语言ULA 1)为了支持Thumb-2,并且最大程度的发挥其功能,ARM汇编器引入了一个“统一汇编语言”ULA,同时支持16位和32位指令。 2)在ULA语法中,指令使用后缀s才可以影响APSR。 3)在 UAL 下,汇编器能主动决定用16位指令或32位指令,也可以手工指定;3.3指令集介绍 3.3.1汇编基础 3.3.2指令集 3.3.3CM3中的前卫指令存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令28存储器访问指令后缀装载指令:LDRx 目标寄存器, 源地址保存指令:STRx 源寄存器, 目标地址B:

16、从/向指定位置加载/存储字节H:从/向指定位置加载/存储半字无:从/向指定位置加载/存储字EX:排他性加载/存储D:从/向指定位置加载/存储双字存储器访问指令地址形式装载指令:LDRx 目标寄存器, 源地址保存指令:STRx 源寄存器, 目标地址立即数:立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,#0 x12 寄存器:寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,R2 寄存器及移位常数:寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1

17、,R0,R2,LSL #2存储器访问指令寻址方式装载指令:LDR x 目标寄存器, 源地址保存指令:STRx 源寄存器, 目标地址零偏移: 如:LDR Rd,Rn前索引偏移:如:LDR Rd,Rn,#0 x04!程序相对偏移:如:LDR Rd,labe1 后索引偏移:如:LDR Rd,Rn,#0 x04存储器访问指令单寄存器加载/存储 0 x55R2R50 x400000000 x123456780 x40000000存储器地址应用示例:LDRR2,R5 ;将R5指向地址的字数据存入R20 x12345678ARM存储器访问指令单寄存器加载应用0 x12345678R1R20 x4000000

18、00 x?0 x40000004存储器地址应用示例:STRR1,R2,#0 x04 ;将R1的数据存储到R0+0 x04地址0 x12345678+4ARM存储器访问指令单寄存器保存应用35存储器访问指令多寄存器存取装载指令:LDM 源地址,目标寄存器列表存储指令:STM 目标地址,源寄存器列表存储器源地址目标寄存器1目标寄存器n存储器目标地址源寄存器1源寄存器n存储器访问指令多寄存器存取装载指令:LDM存储指令:STMxxLDM/STM指令搭配不同的后缀实现不同方式地址增长方式:IA: 每次传送后地址加4DB:每次传送前地址减4存储器访问指令多寄存器加载/存储 ARM存储器访问指令多寄存器存

19、取数据块传送指令操作过程如右图所示,其中R1为指令执行前的基址寄存器,R1则为指令执行后的基址寄存器。R5R6R7R1 R1 指令STMIA R1!,R5-R74008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R74008H4004H4000H4014H4010H400CH0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器0 x010 x020 x030 x040 x4000

20、0010应用示例:LDMIA R1!,R2-R4,R6 将R1指向的内存数据读取到R0-R4和R6寄存器中存储器访问指令多寄存器存取41另外两种存储器操作为栈的PUSH和POP.PUSH R0,R4-R7,R9POP R2,R342存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令常见的算术四则运算指令 44存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令46存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转

21、指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令47移位操作指令 49存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令50带符号展开指令 SXTB Rd,Rm ;Rd=signext(Rm7:0)SXTH Rd,Rm ;Rd=signext(Rm15:0)51存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令52数据反转指令53存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和

22、操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令54位域处理指令555657存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令58跳转依据在CM3中,下列指令可以更新PSR 中的标志: 16位算术逻辑指令 32位带S后缀的算术逻辑指令 比较指令(如,CMP/CMN)和测试指令(如 TST/TEQ) 直接写 PSR/APSR (MSR 指令)操作码条件助记符标志含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数

23、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!=V有符号数小于或等于 1110AL任何无条件执行 (指令默认条件) 1111NV任何从不执行(不要使用) 指令条件码表60 BEQ label ;当 Z=1时转移 CMP R0, R1 ;比较R0,R1 IT TET GT ;If R0R1 Then(T代表Then,E代表Else) MOVGT R2,

24、R0 MOVLE R2, R0 MOVGT R3, R1 MOVGT R3, R1 61存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令62 隔离指令在一些结构比较复杂的存储器系统中是必要的。在这类系统中,如果没有必要的隔离,会导致系统发生紊乱危象(race condition),(相当于数电中的“竞争与冒险”)。 如果RAM的访问是带缓冲的,并且写完之后马上读,就必须让它“喘口气”用DMB指令来隔离,以保证缓冲中的数据已经落实到RAM中。 DSB比DMB更保险(当然也是有执行代价的),它是宁可错杀也不漏网清

25、空了写缓冲,使得任何它后面的指令,不管要不要使用先前的存储器访问结果,通通等待访问完成。 如果某个程序从下一条要执行的指令处更新了自己,但是先前的旧指令已经被预取到流水线中去了,此时就必须清洗流水线,把旧版本的指令洗出去,再预取新版本的指令。因此,必须在被更新代码段的前面使用ISB,以保证旧的代码从流水线中被清洗出去,不再有机会执行。63存储器访问指令算术运算指令逻辑运算指令移位、循环指令展开指令数据反转指令位域处理和操作指令条件跳转指令屏障和存储器屏障指令饱和运算指令64 CM3中的饱和运算指令分为两种: 1)“没有直流分量”的交流信号饱和带符号饱和运算; 2)无符号饱和运算则类似于“削顶失

26、真单向导通”。 65指令名 功能描述 SSAT.W Rd, #imm5, Rn, ,shift 以带符号数的边界进行饱和运算(交流) USAT.W Rd, #imm5, Rn, ,shift 以无符号数的边界进行饱和运算(带纹波的直流)3.3指令集介绍 3.3.1汇编基础 3.3.2指令集 3.3.3CM3中的前卫指令MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳转字节/表格跳转半字6768MRS、MSR 专用特殊寄存器访问指令,只能在特权级状态下使用,APSR除外,APSR可以在用户级

27、状态下使用。MRS , ;加载特殊功能寄存器的值到Rn MSR , ;存储Rn的值到特殊功能寄存器 指定PSP进行更新的例子: LDR R0, =0 x20008000 MSR PSP, R0 BX LR ;如果是从异常(Handler模式)返回到用户线程模式,则使用新的PSP的值作为栈顶指针实质上是替换了之前线程状态使用的PSP指针(所指向的内存地址空间)69MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳转字节/表格跳转半字7071 IF-THEN(IT)指令围起一个快,里面最多有4条指令,可以条件执行。 IT指令已经带了一个“T”,因此还可以最多再带3个“T”或者“E”,并且对T和E的顺序没有要求,其中T对应条件成立时执行的语句,E对应条件不成立时执行的语句。72MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳转字节/表格跳转半字737432位硬件除法指令MSR/MRSIF-THENS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论