找回密码
 注册
搜索
查看: 703|回复: 0

[资料] ARM知识点整理

[复制链接]
发表于 2014-7-14 14:58:48 | 显示全部楼层 |阅读模式

国内嵌入式行业一个普遍认同的定义是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专业计算机系统。从这个定义可以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的剪裁利用。因此有人把嵌入式系统比作是一个针对特定的应用而“量身定做”的专业计算机系统。 
 嵌入式实时操作系统是指在限定的时间内对输入进行快速处理并作出响应的嵌入式系统 
 趋势:1.随着信息化与数字化的发展,嵌入式设备进行网络互联是未来发展的趋势。2.优化嵌入式系统软硬件内核,提高系统运行速度,降低功耗和硬件成本。3.指令集的并行计算技术将引入嵌入式微处理器。4.嵌入式微处理器将会向多核技术发展。5.嵌入式技术将引领信息时代。 
 命名:ARM7 T D M I – S 中,ARM是Advanced RISC Machines的缩写,7是系列号;T:支持高密度16位的Thumb指令集;D:支持JTAG片上调试;M:支持用于长乘法操作(64位结果)ARM指令,包含快速乘法器;;I:带有嵌入式追踪宏单元ETM,用来设置断点和观察点的调试硬件;S:可综合版本,意味着处理器内核是以源代码形式提供的。这种源代码形式又可以编译成一种易于EDA工具使用的形式。 
 取指:从指令Cache中读取指令。译码:对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。执行:进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache)。寄存器回写:将指令运算或操作结果写回到目标寄存器中。 
 1.用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式2.FIQ模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先级(fast)中断产生时将会进入这种模式。3.IRQ模式:也称为普通中断模式,:当一个低优先级(normal)中断产生时将会进入这种模式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ模式下进行。4.SVC模式:称之为管理模式,它是一种操作系统保护模式。当复位或软中断指令执行时处理器将进入这种模式。5.中止模式:当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。6.未定义指令异常模式:当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。7.系统模式:使用和User模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式,每种异常都对应有自己的异常处理入口点。  
 在异常发生后:1.在适当的LR中保存下一条指令的地址2.将CPSR复制到适当的SPSR中;3. 将CPSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。当异常结束时,异常处理程序必须:1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。 
 小端存储器系统: 在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线7~0。  大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线31~24。  
 立即数必须由1个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即一个8位的常数通过循环右移2*rotate_4位(即0,2,4,。。。30)得到 
 数据处理指令寻址方式具体可分为5种类型:1)第二操作数为立即数2)第二操作数为寄存器3)第二操作数为寄存器移位方式且移位的位数为一个5位立即数4)第二操作数为寄存器移位方式且移位数值放在寄存器中5)第二操作数位寄存器进行RRX移位得到。如果PC (R15)用作目标寄存器,指令会产生不可预知的结果。 
 后增IA :每次数据传送后地址加4; 先增IB :每次数据传送前地址加4 ;  后减DA:每次数据传送后地址减4 ; 先减DB (Decrement Before) :每次数据传送前地址减4 ;  
 满递增堆栈FA:堆栈指针指向最后压入的数据,且由低地址向高地址生成。满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址向低地址生成。空递增堆栈EA:堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。空递减堆栈ED:堆栈指针指向下一个要放入数据的空位置,且由高地址向低地址生成。  LDRH R0,[R1,#4];R0《---【R1+4】半字,R0的高16位清零。LDRSB R0,[R2,#-2]!;R0《---【R2-2】字节,R0有符号扩展为32位,R2=R2-2。STRB R1,[R2,#0Xa0];【R2+0Xa0】《----R1低8位。LDMIA R0,{R1,R2,R8} ;将内存单元【R0】~【R+11】以字为单位读取到R1,R2,R8中。STMDB R0!,{R1-R5,R10,R11}将寄存器R1~R5,R10,R11的值以字为单位依次写入【R0】中,每写一个字之前R0=R0-4。STMED SP!{R0-R3,LR}将寄存器R0~R3,LR的的值以字为单位依次写入【SP】中,每写一个字之后SP=SP-4 
&#61548;&#160;ARM微处理器的指令集可以分为:数据处理指令,分支指令,加载/存储指令,批量加载/存储指令,交换指令,程序状态寄存器(PSR)处理指令,协处理器操作指令和异常产生指令八大类。几乎所有的ARM指令都是可以有条件执行的。带链接和状态切换的跳转指令BLX,当目标地址由程序标号给出时,即:BLX&#160;<target_address>:由于指没有条件编码位&#160;


      



&#61548;&#160;累加元素:LOOP&#160;LDR&#160;R1,&#160;[R0,#4]!&#160;;MOVS&#160;R2,&#160;R1;&#160;BEQ&#160;END;ADD&#160;R4,R4,R2;B&#160;LOOP;END&#160;&#61548;&#160;切换并中断:;禁能IRQ中断&#160;MRS&#160;&#160;&#160;&#160;R0&#160;CPSR;ORR&#160;&#160;&#160;&#160;R0,&#160;R0,#0x80;MSR&#160;&#160;&#160;&#160;CPSR,&#160;R0;切换到用户模式&#160;MRS&#160;&#160;&#160;&#160;R0&#160;CPSR;BIC&#160;&#160;&#160;&#160;&#160;R0,&#160;#0x0F;MSR&#160;&#160;&#160;&#160;CPSR,&#160;R0&#160;
&#61548;&#160;Thumb优势:在ARM体系结构中,ARM指令集是32位的,具有很高的执行效率。但是对于嵌入式&#160;而言,其存储空间极其有限,由于每条ARM指令都要占用4个字节,对存储空间的要求较高。为了压缩代码的存储,增加代码存储密度,ARM公司设计了16位的Thumb指令。Thumb代码所需的存储空间约为ARM代码的60%~70%。&#160;&#61548;&#160;Thumb指令可分为数据处理指令,存储器操作指令,分支指令,软中断指令。&#160;
Thumb指令集只有一条分支指令是有条件的,其余所有指令都是无条件的;B{cond}&#160;label&#160;
&#61548;&#160;伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不再处理器运行期间由机器执行,只是在汇编时被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。伪操作是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为了完成汇编程序做各种准备工作,对源程序运行汇编程序处理,而不是在计算机运行期间由处理器执行。也就是说,这些伪操作只是在汇编过程中起作用,一旦汇编结束,伪操作也就随之消失。&#160;&#61548;&#160;20!:start:MOV&#160;R8,#20;MOV&#160;R9,#0;SUB&#160;R0,R8,#1;LOOP:MOV&#160;R1&#160;R9;UMULLR8,R9,R0,R8;MLA&#160;R9,R1,R0,R9;SUBS&#160;R0,R0,#1;BNE&#160;LOOP;STOP&#160;B&#160;STOP;END&#160;
&#61548;&#160;64位结果累加:START&#160;MOV&#160;R0&#160;#0X3000;MOV&#160;R1,#0X10000001;MOV&#160;R2,#100;LOOP_1&#160;STR&#160;R1,[R0],#4;&#160;ADD&#160;R1,R2,#1;SUBS&#160;R2,R2,#1;BNE&#160;LOOP_1;MOV&#160;R0,#0X3000;MOV&#160;R2,#100;MOV&#160;R9,#0;MOV&#160;R8,#0;LOOP_2&#160;LDR&#160;R1,[R0],#4;ADDS&#160;R8,R1,R8;ADC&#160;R9,R9,#0;SUBS&#160;R2,R2,#1;&#160;BNE&#160;LOOP_2;STOP&#160;B&#160;STOP&#160;END;&#160;
&#61548;&#160;拷贝:start&#160;LDR&#160;R0,=Src;LDR&#160;R1,=Dst;MOV&#160;R2,#NUM;MOV&#160;SP,#0X9000;MOVS&#160;R3,R2,LSR,#2;BEQ&#160;Copy_Words;STMFD&#160;SP!,{R5-R8};Copy_4Word:LDMIA&#160;R0!,{R5-R8};STMIA&#160;R1!,{R5-R8};SUBS&#160;R3,R3,#1;BNE&#160;Copy_4Word;LDMFD&#160;SP!,{R5-R8};Copy_Words:ANDS&#160;R2,R2,#3;BEQ&#160;Stop;Copy_Word:LDR&#160;R3,[r0],#4;STR&#160;R3,[r1],#4;SUBS,R2,R2,#1;BNE&#160;Copy_Word;Stop:B&#160;Stop;LTONG&#160;SRC&#160;LONG&#160;&#8222;&#8222;END&#160;
&#61548;&#160;高地位对换:START&#160;LDR&#160;R0,=0x55555555;MOV&#160;R2,#0;Bit_Exchange:MOV&#160;R1,#32;Bit_L:AND&#160;R3,R0,#1;ORR&#160;R2,R3,R2,LSL&#160;#1;;MOV&#160;R0,R0,SLR&#160;#1;SUBS&#160;R1,R1,#1;BNE&#160;Bitex_L;Stop:B&#160;Stop;END&#160;
&#61548;&#160;选择排序:START:LDR&#160;R0,=Datas;LDR&#160;R1,=Num;LDR&#160;R1,[R1];Sel_Sort:MOV&#160;R1,R1,LSL&#160;#2;SUB&#160;R1,R1,#4;ADD&#160;R1,R0,R1;SUB&#160;R0,R0,#4;Sort_L1:LDR&#160;R4,[R0,#4]!;TEQ&#160;R1,R0;BEQ&#160;Sort_Finish;MOV&#160;R2,R0;MOV&#160;R3,R0;Sort_L2:LDR&#160;R5,[R2,#4]!;CMP&#160;R4,R5;BLT&#160;Sort_L3;MOV&#160;R3,R2;MOV&#160;R4,R5;Sort_L3:TEQ&#160;R1,R2;BNE&#160;Sort_L2;Sort_L4:TEQ,R0,R3;BEQ&#160;Sort_L1;SWP&#160;R4,R4,[R0];STR&#160;R4,[R3];B&#160;Sort_L1;Sort_Finish:&#160;Stop:B&#160;STOP&#8222;&#8222;&#160;&#61548;&#160;逆序拷贝:START:LDR&#160;R0,=SrcString;LDR&#160;R1,=DstString;StrCopyDes:MOV&#160;R4,#0;Strcpydes_L1:LDRB&#160;R2,[R0],#1;ADD&#160;R4,R4,#1;TST&#160;R2,#0XFF;BNE&#160;Strcpydes_L1;SUB&#160;R4,R4,#1;SUB&#160;R0,R0,#2;MOV&#160;R3,R1;Strcpydes_L2:LDRB&#160;R2,[R0],#-1;STRB&#160;R2,[R3],#1;SUBS&#160;R4,R4,#1;BNE&#160;Strcpydes_L2;Strcpydes_L3:STRB&#160;R4,[R3];STOP:B&#160;STOP;&#8222;&#8222;end&#160;&#61548;&#160;亮灯:if((LedStatrs&#160;&&#160;0x01)==0x01)&#160;rPDATAB=&#160;rPDATAB&#160;&&#160;0xFFFFFFFB;&#160;if((LedStatrs&#160;&&#160;0x01)==0x02)&#160;rPDATAB=&#160;rPDATAB&#160;&&#160;0xFFFFFFF7;&#160;&#61548;&#160;熄灯:if((LedStatrs&#160;&&#160;0x01)!=0x01)&#160;rPDATAB=&#160;rPDATAB&#160;|0x04;&#160;if((LedStatrs&#160;&&#160;0x01)!=0x02)&#160;rPDATAB=&#160;rPDATAB&#160;|0x08;&#160;
&#61548;&#160;重入函数:如果某个函数可以被多个任务并发使用,而不会造成数据错误,我们就说这个函数具有可重入性&#160;。可重入函数可以使用局部变量,也可以使用全局变量。&#160;如果使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护,若不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使得此全局变量变为不可知状态。&#160;
&#61548;&#160;Volatile:抑制编译器优化的作用。存储器映射的硬件寄存器通常也要加volatile说明,中断服务程序中修改的供其他程序检测的变量需要加volatile,多任务环境下各任务间共享的标志应该加volatile进行说明&#160;
&#61548;&#160;AND&#160;R0,R0,#0xFF;保持R0的低8位,其余为清零&#160;&#160;&#160;&#160;ORR&#160;R0,R0,#0xFF;保持R0的高24位,低8位置1
全面承快速样板及小批量贴片,后焊加工业务,样板2-3天完成,加快24小时, BGA反修,植球及更换。
同样的业务我们比质量;同样的质量我们比价格;同样的价格我们比时间,同样的时间我们比服务;同样的服务我们比信誉,麦斯艾姆,你值得信赖的样板贴片专家。
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 04:45 , Processed in 0.052756 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表