




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统体系结构与开发
嵌入式处理器ARM指令系统ARM体系的结构版本ARM体系的结构版本ARM体系结构共有6个版本,版本号1-6指令集功能不断扩大特定功能:T——支持Thumb指令集M——支持长乘法指令E——支持增加型DSP指令J——java加速器SIMD——ARM媒体功能扩展ARM微处理器工作模式与寄存器ARM微处理器指令集ARMTHUMBARM微处理器工作模式用户模式特权模式(系统模式与异样模式)模式切换寄存器组织寄存器定义模式与寄存器ARM与THUMB从编程的角度看,ARM微处理器有两种指令集,可在两种指令集之间切换:ARM指令集,处理器执行32位的字对齐的ARM指令;Thumb指令集,处理器执行16位的、半字对齐Thumb指令。THUMB指令是ARM指令的子集可以相互调用,只要遵循确定的调用规则Thumb指令与ARM指令的时间效率和空间效率关系为:存储空间约为ARM代码的60%~70%指令数比ARM代码多约30%~40%存储器为32位时,ARM代码比Thumb代码快约40%存储器为16位时,Thumb比ARM代码快约40~50%运用Thumb代码,存储器的功耗会降低约30%ARM与THUMB指令指令切换方法ARM指令集和Thumb指令集均有切换处理器状态的指令,在起先执行代码时,应当处于ARM指令集指令集切换分状态位设置和异样处理两种进入Thumb指令当操作数寄存器的状态位(位0)为1时,接受执行BX指令的方法,使微处理器从ARM指令集切换到Thumb指令集当处理器处于Thumb指令时,发生异样(如IRQ、FIQ、Undef、Abort、SWI等),则异样处理返回时,自动切换到Thumb指令。切换到ARM指令当操作数寄存器的状态位(位0)为0时,执行BX指令时可以使微处理器从Thumb切换到ARM在处理器进行异样处理时,把PC指针放入异样模式链接寄存器中,并从异样向量地址起先执行程序,也可以使处理器切换到ARM。ARM微处理器运行模式User模式用户程序不能访问有些受疼惜的资源只能通过异样的形式来变更CPU的当前运行模式特权模式可以存取系统中的任何资源System模式系统模式与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式异样模式:主要是在外部中断或者程序执行非法操作时会触发用户模式处理器模式用户模式。usr:ARM处理器正常的程序执行状态特权模式(异样模式)fiq:用于高速数据传输或通道处理irq:用于通用的中断处理svc:操作系统运用的疼惜模式abt:用于虚拟存储及存储疼惜und:当出现未定义指令终止时进入该模式sys:运行具有特权的操作系统任务ARM微处理器运行模式ARM处理器运行模式图ARM微处理器的指令系统
ARM微处理器的指令集是加载/存储型的指令集仅能处理寄存器中的数据,处理结果都要放回寄存器中对系统存储器的访问则须要通过特地的加载/存储指令来完成。ARM微处理器的指令集可以分为六大类跳转指令数据处理指令程序状态寄存器(PSR)处理指令加载/存储指令协处理器指令和异样产生指令OpCode指令助记符Cond:执行条件S:是否影响状态寄存器Rd:目标寄存器Rn:第1个操作数寄存器Operand2:第2个操作数ARM指令基本语法格式<Opcode>{<Cond>}{S}<Rd><Rn>{,<Operand2>}例子LDR R0,[R1] ;无条件执行BEQ LOOP ;等于条件ADDSR2,R2,#1 ;影响状态位,R2<-R2+1指令编码格式ARM指令编码结构——条件域ARM指令编码的条件域当处理器工作在ARM状态时,几乎全部的指令均依据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽视。每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时运用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标记置位时发生跳转。ARM指令编码的条件域条件编码条件码后缀标志含义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出ARM指令编码的条件域条件编码条件码后缀标志含义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL忽略无条件执行ARM微处理器指令表-1助记符指令功能描述ADC带进位加法指令ADD加法指令AND逻辑与指令B跳转指令BIC位清零指令BL带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令ARM微处理器指令表-2助记符指令功能描述CDP协处理器数据操作指令CMN比较反值指令CMP比较指令EOR异或指令LDC存储器到协处理器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCRARM寄存器到协处理器寄存器数据传输ARM微处理器指令表-3助记符指令功能描述MLA乘加运算指令MOV数据传送指令MRC协处理器寄存器到ARM寄存器数据传输MRS传送CPSR或SPSR的内容到通用寄存器MSR传送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令MVN数据取反传送指令ARM微处理器指令表-4助记符指令功能描述ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令SBC带借位减法指令STC协处理器寄存器写入存储器指令STM批量内存字写入指令STR寄存器到存储器的数据传输指令SUB减法指令ARM微处理器指令表-5助记符指令功能描述SWI软件中断指令SWP交换指令TEQ相等测试指令TST位测试指令ARM寻址方式ARM寻址方式立刻寻址寄存器寻址寄存器间接寻址基址变址寻址多寄存器寻址相对寻址堆栈寻址ARM指令的寻址方式ARM指令系统支持如下几种常见的寻址方式:立刻寻址寄存器寻址寄存器间接寻址基址变址寻址多寄存器寻址相对寻址堆栈寻址ARM指令的寻址方式-立刻寻址立刻寻址操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立刻数。例如以下指令:ADDR0,R0,#1 /*R0←R0+1*/ADDR0,R0,#0x3f /*R0←R0+0x3f*/立刻操作数在以上两条指令中,其次个源操作数即为立刻数,要求以“#”为前缀,对于以十六进制表示的立刻数,还要求在“#”后加上“0x”。ARM指令的寻址方式-寄存器寻址
寄存器寻址利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器常常接受的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。ARM指令的寻址方式-寄存器间接寻址
寄存器间接寻址以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:ADDR0,R1,[R2] /*R0←R1+[R2]*/LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中;其次条指令将以R1的值为地址的存储器中的数据传送到R0中。第三条指令将R0的值传送到以R1的值为地址的存储器中。ARM指令的寻址方式-基址变址寻址
基址变址寻址将基址寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址旁边的地址单元。接受变址寻址方式的指令常见有以下几种形式,如下所示: 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]在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中。在其次条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器R0中。ARM指令的寻址方式-多寄存器寻址
多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。以下指令: LDMIAR0,{R1,R2,R3,R4} ;R1←[R0]
;R2←[R0+4]
;R3←[R0+8]
;R4←[R0+12]该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1~R4。
STMIAR0!,{R1-R4};[R0]←R1
;[R0+4]←R2
;[R0+8]←R3
;[R0+12]←R4ARM指令的寻址方式-相对寻址
与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL接受了相对寻址方式:
BLNEXT ;跳转到子程序NEXT处执行 …… NEXT …… MOV PC,LR ;从子程序返回ARM指令的寻址方式-堆栈寻址
堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,运用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最终压入堆栈的数据时,称为满堆栈(FullStack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(EmptyStack)。ARM指令的寻址方式-堆栈寻址堆栈的生成方式:递增堆栈(AscendingStack)当堆栈由低地址向高地址生成时,称为递增堆栈;递减堆栈(DecendingStack),当堆栈由高地址向低地址生成时,称为递减堆栈。四种类型的堆栈工作方式:满递增堆栈:堆栈指针指向最终压入的数据,且由低地址向高地址生成。满递减堆栈:堆栈指针指向最终压入的数据,且由高地址向低地址生成。空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成ARM伪指令ARM伪指令数据定义伪指令限制伪指令地址加载伪指令声明引用段域伪指令ARM的伪指令定义数据伪指令DCB支配连续的字节存储单元,并设置初值DCW/DCWU支配连续的半字存储单元,并设置初值DCD/DCDU支配连续的字存储单元,并设置初值DCQ/DCQU支配8字节为块存储单元,并设置初值DCFS/DCFSU为单精度浮点数支配连续存储单元,并设置初值DCFD/DCFDU为双精度浮点数支配连续的字存储单元,并设置初值SPACE支配一块连续的存储单元FIELD支配一块连续的存储单元MAP定义一个结构化的内存表的首地址ARM的伪指令限制伪指令IF指令序列ELSE指令序列ENDIF条件编译指令WHILEWEND条件循环执行指令地址加载伪指令ADR 小范围的地址读取ADRL 中范围的地址读取LDR 大范围的地址读取NOPARM的伪指令声明引用EQU定义字符名称EXPORT声明全局标号IMPORT在其他源文件中定义标号EXTERN在其他源文件中定义标号GET(或Include)包含源文件指令INCBIN包含目标文件和数据文件包指令RN定义寄存器别名ROUT定义局部变量的作用范围ARM的伪指令段域伪指令FILED和MAP结构化内存表中的数据域指令AREA定义代码段和数据段指令CODE:代码段DATA:数据段READONLYREADWRITEALIGNCOMMON:通用段ALIGN对齐指令CODE16和CODE32指示指令序列类型指令ENTRY指定入口点指令END应用程序结尾指令程序举例ENTRYstartMOVR0,#0xFFMOVR1,#0xEF000000MOVR2,#0x2F000000MOVR3,#0xFFADDR4,R2,R1 ;不变更状态位,R4=0X1E000000ADDS R5,R2,R1 ;变更状态位CPSR=0x2000003d,结果不变ADCSR6,R2,R1 ;结果R4=0X1E000001,SUBR4,R2,R1 ;不变更状态位,R4=0X40000000SUBSR4,R2,R1 ;变更状态位CPSR=0x0000003dRSBR5,R2,R1 ;R5=0XC0000000RSBSR5,R2,R1 ;变更状态位CPSR=0xA000003dSBCR6,R1,R2 ;R6=0XC0000000RSCR7,R1,R2 ;R7=0x40000000,不变更状态位stopBstopEND2GPIOI/O定义ARM中的I/O接口定义2410硬件上的引线系统上的可编程寄存器程序上的应用各类接口的定义接口的主要功能硬件上信号线可编程硬件寄存器应用程序的设计各类接口的程序组织系统部分公共部分特性部分ARM中的I/O接口定义ARM中的I/O接口定义2410硬件上的引线系统上的可编程寄存器程序上的应用2410硬件上的引线有117个通用的IO接口PROTA(23)PROTB(11)PROTC(16)PROTD(16)PROTE(16)PROTF(8)PROTG(16)PROTH(11)ARM公司将每个IO接口作成复用信号线见图Mini2410P1-3每个应用可以依据实际状况选用PortA组的引脚功能PortB组的引脚功能PortC组的引脚功能PortD组的引脚功能PortE组的引脚功能PortF组的引脚功能PortG组的引脚功能PortH组的引脚功能系统上的可编程寄存器可编程的几种寄存器接口配置寄存器PORTCONFIGURATIONREGISTER(GPACON-GPHCON)接口数据寄存器PORTDATAREGISTER(GPADAT-GPHDAT)接口上拉寄存器PORTPULL-UPREGISTER(GPBUP-GPHUP)杂项寄存器MISCELLANEOUSCONTROLREGISTER外部中断限制寄存器EXTERNALINTERRUPTCONTROLREGISTER(EXTINTN)电源关闭模式和I/O接口POWER_OFFMODEANDI/OPORTS通用状态寄存器GENERALSTATUSREGISTER(GSTATUSn)系统上的可编程寄存器可编程的几种寄存器地址GPX每组有四个可编程寄存器:CON,DAT,UP,RESERVED地址连续:00,04,08,0C分组寄存器编址PortA0X56000000-0X5600000CPortB0X56000010-0X5600001CPortC0X56000020-0X5600002CPortD0X56000030-0X5600003CPortE0X56000040-0X5600004CPortF0X56000050-0X5600005CPortG0X56000060-0X5600006CPortH0X56000070-0X5600007C接口配置寄存器
(GPACON)0X56000000只有输出地址线接口配置寄存器
(GPB-HCON)0X56000010输入输出专用信号线保留接口数据寄存器(GPADAT-GPHDAT)0X560000X4接口数据寄存器定义引脚被定义为输出时,数据寄存器作为输出锁存引脚被定义为输入时,数据寄存器作为输入锁存引脚被定义为专用功能时,数据寄存器依据功能线定义留意:输出数据是写入的限制叮嘱或数据输入数据是读入的状态或数据接口上拉寄存器(GPBUP-GPHUP)X560000X8上拉寄存器当相应的位为=0时,表示该位上拉信号使能当相应的位为=1时,表示该位上拉信号无效留意上拉是为引脚供应电流假如不运用上拉,须要外接上拉电压来供应电流接口杂项寄存器(MISCELLANEOUS)X56000080程序上的定义定义寄存器名和端口地址定义2410addr.h初始化寄存器端口初值2410lib.Cvoidport_init(void)正常调用关系Main()SysInit()port_init()APP_TEST()系统初始化voidsys_init(){ change_clock_divider(1,1); //1:2:4 change_value_MPLL(M_MDIV,M_PDIV,M_SDIV); //Fin=12MHzFCLK=202.8MHz delay(0); //adjustthedelaycount
port_init();
interrupts_init(); uart_init(PCLK,115200,UART0); uart_init(PCLK,115200,UART1); uart_init(PCLK,115200,UART2);#ifdefCLK124_200M change_value_MPLL(88,1,1); //Fin=12MHzFCLK=192MHz uart_init(192000000/4,115200,UART0); uart_init(192000000/4,115200,UART1);#endif uart_select(UART1); print_infor(); delay(500);}port_init(void)voidport_init(void){//CAUTION:Followtheconfigurationorderforsettingtheports.//1)settingcontrolregister(GPnCON)//*(bitn)--meansthispinnotuseoncircuit,andsetasdefaultfunction//2)configurepull-upresistor(GPnUP)//3)settingvalue(GPnDAT)//===PORTAGROUPrGPACON=0x5fbfff;//===*PORTBGROUP//Ports:GPB10GPB9GPB8GPB7GPB6GPB5GPB4GPB3GPB2GPB1GPB0//Signal:GPB10GPB9GPB8GPB7GPB6DIS_OFFL3CLOCKL3DATAL3MODEPWM2PWM1//Setting:OutputOutputOutputOutputOutputOutputOutputOutputOutputTOUT1TOUT0//Binary:01,01*01,*01*01,0101,0101,1010
rGPBCON=0x155559;……各类接口的定义各类接口的定义接口的主要功能硬件上信号线可编程硬件寄存器应用程序的设计接口功能接口功能系统板上信号指示灯三个指示灯接在锁存器的D2-D0上电路引脚电路关系CPLD-138-或门-8D输出锁存器CPLD选通信号线EXCS:A25-A21(01000)3-8译码器片选使能接EXCS,3-8译码器译码信号ABC:A20-A18(110),~Y6输出输出锁存器的数据接LED负端,正端接上拉电阻~Y6和~WE信号或作用输出锁存器LED属于无条件输出,输出地址A25-A18=01000110000000000000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电影视频广告发布合同书
- 瑜伽馆合伙合同范本
- 融资租赁管理合同
- 小产权合作建房合同范本
- 2025年高压电工高压操作安全规范试题库:安全操作与电力设备故障处理试题
- 汽车融资租赁合同样本集锦
- 股权转让合同 月度范文
- 餐饮业特许经营合同书
- 土地征用补偿合同范本(律师专业版)
- 设备备件包装及物流合同2025
- 2025年榆林职业技术学院单招职业适应性测试题库及答案参考
- 5万吨年锂电池物理法循环再生项目可行性研究报告模板-立项备案
- 单位集资房购房合同范本
- 2025年江苏省高职单招《职测》高频必练考试题库400题(含答案)
- 油封相关知识培训
- 专题05 全等模型-对角互补模型
- 2024-2025学年人教版数学八年级下册期中检测卷(含答案)
- 家政保洁服务培训
- 2025年春新人教版语文一年级下册教学课件 19 咕咚
- 2025届江苏苏州市四校高三12月联考语文试题(教师版)
- 93J007-7道路图集(正式版)
评论
0/150
提交评论