浙工大嵌入式考点整理

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

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

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

资源描述

嵌入式系统定义以应用为中心,以计算机技术为基础,软件、硬件可裁减,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。ARM7架构的3级流水线取指级:取指级完成程序存储器中指令的读取,并放入指令流水线中。译码级:对指令进行译码,为下一周期准备数据路径需要的控制信号。这一级指令“占有”译码逻辑,而不“占有”数据路径。执行级:指令“占有”数据路径,寄存器被读取,运算单元产生相应的运算结果并回写到目的寄存器中,运算单元的结果则根据指令需求来更改状态寄存器的条件位。ARM9的5级流水线取指:指令从存储器中取出,放入指令流水线。译码:指令译码,从寄存器中读取寄存器操作数。执行:产生逻辑运算的结果或存储器地址。访存/缓冲:如果需要,则访问数据存储器。否则,ALU的结果只是简单地缓冲一个时钟周期,以便使所有指令具有同样的流水线流程。回写:将指令产生的结果回写到寄存器,包括任何从存储器读取的数据。复杂指令集——CISC精简指令集——RISCCISC处理器的实现复杂性更高,而RISC编译器的复杂性更高;CISC处理器功耗高、流水线效率低;RISC代码密度不高,可执行文件体积较大,汇编代码可读性较差总线分类按相对于CPU的位置划分片内总线片外总线:按功能类型数据总线Dbus地址总线Abus控制总线Cbus总线的主要参数总线宽度又称总线位宽,指的是总线能同时传送数据的位数。如16位总线就是具有16位数据传送能力。总线频率总线工作速度的一个重要参数,工作频率越高,速度越快。通常用MHz表示。总线带宽又称总线的数据传送率,是指在一定时间内总线上可传送的数据总量,用每秒最大传送数据量来衡量。总线带宽越宽,传输率越高。总线带宽(单位:MB/s)=(总线宽度/8)×总线频率如:总线宽度32位,频率66MHZ,则总线带宽=(32/8)*66MHz=264MB/s一个微处理器系统可能含有多条总线高速总线AHB低速总线APB嵌入式存储系统是由寄存器、高速缓冲区Cache、主存储器和辅助存储器组成。SDRAM存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新。FLASH存储器(可在线进行电写入、电擦除的ROM存储器)有两种主要技术NORFLASH:具有SRAM接口,可字节读写、操作速度慢、10万次寿命NANDFLASH:多周期寻址,页读写、速度快、需ECC校验、100万次寿命、易产生坏块存储格式大端格式:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端小端格式:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端32bit的数0x12345678在Little-endian模式以及Big-endian模式CPU内存中的存放方式设计一个C语言程序,判定CPU的大、小端模式shortintx;charx0,x1;x=0x1122;x0=((char*)&x)[0];//低地址单元x1=((char*)&x)[1];//高地址单元若x0=0x11,则是大端;若x0=0x22,则是小端......嵌入式软件分类系统软件控制、管理计算机系统的资源支撑软件辅助软件开发的工具应用软件面向应用领域ARM指令集变种:T、M、E、D、I、J、F、S标志含义说明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上调试DebugM支持长乘法32位乘32位得到64位,32位的乘加得到64位IEmbeddedICE在线仿真EDSP指令增加了DSP算法处理器指令:16位乘加指令,带符号数的加减法,双字数据操作,cache预取指令JJava加速器Jazelle提高java代码的运行速度S可综合提供VHDL或Verilog语言设计文件ARM处理器工作状态ARM状态,执行32位的、字对齐的ARM指令操作数寄存器的状态(位[0])为0Thumb状态,执行16位的、半字对齐的Thumb指令操作数寄存器的状态(位[0])为1处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等(系统调用)与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护访问无效的地址空间时会进入此模式未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式内部寄存器31个通用32位寄存器;6个状态寄存器。R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。R0~R7为未分组的寄存器,对应于相同的32位物理寄存器。R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R13堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用R14链接寄存器(LR)在每种模式下,模式自身的R14版本用于保存子程序返回地址,当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。R15为程序计数器(PC),指向正在取指的地址。R14寄存器与异常异常类型偏移数据中止8PC=ADDR+12,返回当前指令未定义0PC=ADDR+8,返回下一条指令软中断0PC=ADDR+8,返回下一条指令取指异常4PC=ADDR+8,返回当前指令IRQ/FIQ4PC=ADDR+12,返回下一条指令寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。CPSR寄存器的格式N:运算结果的最高位。对于有符号二进制补码,结果为负数时N=1,为正数或零时N=0;Z:指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;C:当进行加法运算最高位产生进位时C=1,否则C=0。当进行减法运算最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;V:当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。立即寻址操作数直接通过指令给出,数据包含在32位指令编码中,以#为前缀。0x,0b,0d分别对应16进制、2进制和10进制例:MOVR1,#0x56000000寄存器寻址把寄存器中的数值作为操作数,指令执行时直接取出寄存器值进行操作。寄存器内容并不变化例:MOVR2,R3;R2←R3;R3中的内容赋给R2寄存器移位寻址操作数由寄存器的值做相应移位而得到。移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。寄存器内容并不变化例:MOVR0,R1,LSLR3;R1=R3R0=R15种位移操作:LSL/ASL逻辑/算术左移,寄存器中字的低位空出位补0LSR逻辑右移,寄存器中字的高位空出位补0ASR算术右移,移位过程中保持符号位不变,即若源操作数为正数,则字的高位空出位补0,否则补1ROR循环右移,由字的低位移出位填入字的高位空出位RRX带扩展的循环右移,操作数右移一位高位空出位用原C标志值填充;寄存器间接寻址寄存器的内容为操作数的地址指针,用[]标示。操作数存放在存储单元中例:LDRR0,[R1]变址寻址将基址寄存器的内容与指令中给出的偏移量(不超过4KB)相加,形成操作数的有效地址变址寻址包括基址加偏移和基址加索引寻址两种方式基址加偏移-前索引寻址LDRR0,[R1,#4];R0←[R1+4]基址加偏移-带自动索引的前索引寻址LDRR0,[R1,#4]!;R0←[R1+4]、R1←R1+4基址加偏移-后索引寻址LDRR0,[R1],#4;R0←[R1]、R1←R1+4基址加索引寻址LDRR0,[R1,R2];R0←[R1+R2]相对寻址由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址BLSUBRl;调用到SUBRl子程序SUBR1…;BL使用了相对寻址方式多寄存器寻址一条指令可以完成多个寄存器值的传送。这种寻址方式可以一次对多个寄存器寻址,最多可传送16个寄存器。LDMIAR1!,{R2-R4,R5};R2←[R1],R3←[R1+4],R4←[R1+8],R5←[R1+12]堆栈寻址堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,递减堆栈满堆栈堆栈指针指向最后压入的堆栈的有效数据项空堆栈堆栈指针指向下一个待压入数据的空位置堆栈寻址命令包括LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED。LDM和STM表示多寄存器寻址,即一次可传送多个寄存器值。LDM:一次装载多个,这里用来出栈。STM:一次存储多个,这里用来入栈。F/E表示指针指向的位置F:full满堆栈,表示堆栈指针指向最后一个入栈的有效数据项E:empty空堆栈,表示堆栈指针指向下一个要放入的空地址A/D表示堆栈的生长方式A:堆栈向高地址生长,即递增堆栈(Ascend)。D:堆栈向低地址生长,即递减堆栈(Descend)。块复制寻址多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:STMIAR0!,{R1-R7};将R1~R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。A存储指针在保存第一个值前增加B存储指针在保存第一个值后增加I增加方向为向上增长D增加方向为向下增长通过控制GPF3,GPF4,GPF5,GPF6的控制实现对LED1,LED2,LED3,LED4亮灭的控制。LED灯通过电源、限流电阻与ARM的I/O口相连,设计程序使得4个LED轮流闪烁。#defineGPFCON(*(volatileunsigned*)0x56000050)#defineGPFDAT(*(volatileunsigned*)0x56000054)#defineGPFUP(*(volatileunsigned*)0x56000058)voidmain()//流水灯程序{unsignedcharledtab[]={0xf7,0xef,0xdf,0xbf};inti;GPFUP&=0xFFFFFF87;//使能上拉F3-6GPFCON&=0xC03f;GPFCON|=0x1540;//将F3-6设为输出口while(1){for(i=0;i4;i++){GPFDAT=ledtab[i];Delay(70);}}return(0);}S3C2440的存储空间分成8组,通过CS[0:7]选择。最大容量是1GB,bank0---5为固定128MB,bank6---7的容量可编程改变,可以是2、4、8、16、32、64、128MB。S3C2440可以选择从NANDFLASH或NORFLASH启动。启动NORFLASH只能接到Bank0,其数据线宽只能是16位和32位。其它存储器的数据线宽可以是16位和32位。若定义SDRAM的起始地址#define_RAM_STARTADDRESS0x30000000则可以确定该

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

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

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

×
保存成功