嵌入式系统原理与设计重点总结讲解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章1.嵌入式系统定义嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。◦嵌入式微处理器◦外围硬件设备◦嵌入式操作系统◦应用程序嵌入式系统体系结构嵌入式处理器类型嵌入式微处理器(EmbeddedMicroprocessorUnit,EMPU)◦由通用微处理器裁剪后发展而来◦386EX,PowerPC,MIPS,ARM嵌入式微控制器(MicrocontrollerUnit,MCU)◦在一块芯片上集成cpu、存储器及其他部件◦单片机嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP)嵌入式片上系统(SystemOnChip)第二章ARM主要采用32位指令集,Thumb16位指令集ARM9处理器架构ARM9处理器系列有两个分支◦基于v4版本的ARM9,典型的有ARM9TDMI和ARM922T◦基于v5TE或v5TEJ架构的ARM9E,典型处理器有ARM9EJ-S和ARM926EJ-S等◦后面关于ARM9的介绍主要也是围绕ARM9E系列嵌入式应用软件嵌入式操作系统嵌入式硬件平台嵌入式处理器嵌入式外围设备状态寄存器◦1个当前程序状态寄存器(CPSR)和5个备份状态寄存器(SPSR)状态寄存器结构SPSR在处理器进入异常模式时用来保存CPSR寄存器内容,当从异常退出时,用SPSR恢复CPSR的值流水线技术和哈佛体系结构冯·诺依曼体系将数据和指令全部存储在同一个存储器中哈佛体系中,指令存储和数据存储是分开的,指令的存取和数据的存取通过不同的数据总线进行内存管理单元MMU作用CPU产生的虚拟地址被先送到MMU中,通过一定的映射,转换为物理地址,然后进行相应的读写操作有了MMU,才能使用虚拟内存第三章1.立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数没有存储在寄存器或存储器中,而是包含在指令的操作码中,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如指令:MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器ADDR1,R1,#0x7f;R1←R1+0x7f在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。2.寄存器寻址就是利用寄存器中的内容作为操作数,寄存器本身就是操作数地址。这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。例如指令:MOVR2,R3;R2←R3R3中的内容赋给R2ADDR2,R3,R4;R2←R3+R4R3和R4中的内容相加,结果赋给R23.寄存器间接寻址就是以寄存器中的内容作为操作数的地址,而操作数本身存放在存储器中。例如指令:LDRR1,[R2];R1←[R2]STRR1,[R2];[R2]←R1第一条指令将以R2中的内容为地址,将该地址中的数据传送到R1中。第二条指令将R1中的内容传送到以R2中的内容为地址的存储器中。4.变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。例如指令:LDRR0,[R1,#8];R0←[R1+8]LDRR0,[R1,#8]!;R0←[R1+8],R1←R1+8LDRR0,[R1],#2;R0←[R1],R1←R1+2LDRR0,[R1,R2];R0←[R1+R2]5.寄存器移位寻址是ARM指令集独有的寻址方式,操作数由寄存器的数值进行相应移位而得到;移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。6.多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以一次对多个寄存器寻址,多个寄存器由小到大排列,最多可传送16个寄存器。例如:LDMIAR1!,{R2-R4,R5};R2←[R1];R3←[R1+4];R4←[R1+8];R5←[R1+12]该指令的后缀IA表示在每次执行完加载/存储操作后,R1按字长度增加,因此,指令可将连续存储单元的值传送到R2~R5。7.堆栈寻址:堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(FullStack);而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(EmptyStack)。同时,根据堆栈的生成方式,又可以分为递增堆栈(AscendingStack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。ARM微处理器支持这四种类型的堆栈工作方式,即:满递增方式FA(FullAscending):堆栈指针指向最后入栈的数据位置,且由低地址向高地址生成。满递减方式FD(FullDecending):堆栈指针指向最后入栈的数据位置,且由高地址向低地址生成。空递增方式EA(EmptyAscending):堆栈指针指向下一个入栈数据的空位置,且由低地址向高地址生成。空递减方式ED(EmptyDecending):堆栈指针指向下一个入栈数据的空位置,且由高地址向低地址生成。8.相对寻址:与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:BLNEXT;跳转到子程序NEXT处执行……NEXT……MOVPC,LR;从子程序返回1.单一数据加载/存储指令(1)LDR指令格式为:LDR{条件}目的寄存器,存储器地址LDR指令是字加载指令,用于从存储器中将一个32位的字数据传送到目的寄存器中。指令示例:LDRR3,[R4];将存储器地址为R4的字数据读入寄存器R3。LDRR3,[R1,R2];将存储器地址为R1+R2的字数据读入寄存器R3。LDRR3,[R1,#8];将存储器地址为R1+8的字数据读入寄存器R3。LDRR3,[R1,R2]!;将存储器地址为R1+R2的字数据读入寄存器R3,并将新地址R1+R2写入R1。LDRR3,[R1,#8]!;将存储器地址为R1+8的字数据读入寄存器R3,并将新地址R1+8写入R1。应用示例:LDRR3,[R4];将R4指向地址的字数据存入R3LDRR3,[R1],R2;将存储器地址为R1的字数据读入寄存器R3,并将新地址R1+R2写入R1。LDRR3,[R1,R2,LSL#3]!;将存储器地址为R1+R2×8的字数据读入寄存器R3,并将新地址R1+R2×8写入R1。LDRR3,[R1],R2,LSL#3;将存储器地址为R1的字数据读入寄存器R3,并将新地址R1+R2×8写入R1。注:R15不可以作为偏移寄存器使用。(2)LDRB指令格式为:LDR{条件}B目的寄存器,存储器地址LDRB指令是字节加载指令,用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数据到通用寄存器,然后对数据进行处理。指令示例:LDRBR3,[R1];将存储器地址为R1的字节数据读入寄存器R0,并将R3的高24位清零。LDRBR3,[R1,#8];将存储器地址为R1+8的字节数据读入寄存器R3,并将R3的高24位清零。(3)LDRH指令格式为:LDR{条件}H目的寄存器,存储器地址LDRH指令是无符号半字加载指令,用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从存储器中读取16位的半字数据到通用寄存器,然后对数据进行处理。指令示例:LDRHR3,[R1];将存储器地址为R1的半字数据读入寄存器R3,并将R3的高16位清零。LDRHR3,[R1,#8]0x55R3R40x400000000x123456780x40000000存储器地址;将存储器地址为R1+8的半字数据读入寄存器R3,并将R3的高16位清零。LDRHR3,[R1,R2];将存储器地址为R1+R2的半字数据读入寄存器R3,并将R3的高16位清零。(4)STR指令格式为:STR{条件}源寄存器,存储器地址STR指令是字存储指令,用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。指令示例:STRR3,[R1],#8;将R3中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。STRR3,[R1,#8];将R3中的字数据写入以R1+8为地址的存储器中。(5)STRB指令格式为:STR{条件}B源寄存器,存储器地址STRB指令是无符号字节存储指令,用于从源寄存器中将一个8位的字节数据传送到存储器中。该字节数据为源寄存器中的低8位。指令示例:STRBR3,[R1];将寄存器R3中的字节数据写入以R1为地址的存储器中。STRBR3,[R1,#8];将寄存器R3中的字节数据写入以R1+8为地址的存储器中。(6)STRH指令格式为:STR{条件}H源寄存器,存储器地址STRH指令是无符号半字存储指令,用于从源寄存器中将一个16位的半字数据传送到存储器中。该半字数据为源寄存器中的低16位。指令示例:STRHR3,[R1];将寄存器R3中的半字数据写入以R1为地址的存储器中。STRHR3,[R1,#8];将寄存器R3中的半字数据写入以R1+8为地址的存储器中。2.批量数据加载/存储指令ARM微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。数据处理指令只能对寄存器的内容进行操作,不允许对存储器中的数据进行操作,也不允许指令直接使用存储器的数据或在寄存器与存储器之间传送数据。数据处理指令可分为3大类:数据传送指令算术逻辑运算指令比较指令数据传送指令用于在寄存器和寄存器之间进行数据的双向传输。算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。比较指令是完成对指定的两个寄存器(或1个寄存器,1个立即数)进行比较,不保存运算结果,只影响CPSR中相应的条件标志位。1.数据传送指令MOV和MVN(1)MOV指令格式为:MOV{条件}{S}目的寄存器,源操作数MOV指令可完成在寄存器之间或寄存器与第2操作数之间进行数据传送。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。指令示例:MOVR4,R5;将寄存器R5的内容传送到寄存器R4MOVPC,R14;将寄存器R14的内容传送到PC,常用于子程序返回MOVNER4,R5,LSL#2;当Z=0时,将寄存器R5的内容逻辑左移2位后传送到R4(2)MVN指令格式为:MVN{条件}{S}目的寄存器,源操作数MVN指令可完成在寄存器之间或寄存器与第2操作数之间进行数据非传送。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。指令示例:MVNR0,#1;将立即数1取反传送到寄存器R0中MVNR1,R2;将R2取反,结果存到R12.算术逻辑运算指令(1)ADD指令格式为:ADD{条件}{S}目的寄存器,操作数1,操作数2ADD指令是加法指令,用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器。操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。指令示例:

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功