嵌入式资料.docx
- 文档编号:23563101
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:17
- 大小:34.47KB
嵌入式资料.docx
《嵌入式资料.docx》由会员分享,可在线阅读,更多相关《嵌入式资料.docx(17页珍藏版)》请在冰豆网上搜索。
嵌入式资料
第一章:
嵌入式系统的概念
狭义:
人们一般将埋藏在宿主设备中的专用的、使用者不可见的微处理器系统称为嵌入式系统。
广义:
计算机可以作为某种技术过程的核心处理环节
嵌入式系统的特点:
[1]嵌入式系统通常是面向特定任务的,而不同于一般通用PC计算平台,是“专用”的计算机系统
⑵嵌入式系统运行环境差异很大
⑶嵌入式系统比通用PC系统资源少得多
⑷嵌入式系统“嵌入”到对象的体系中,对对象、环境和嵌入式系统自身具有严格的要求,一般的嵌入式系统具有低功耗、体积小、集成度高、成本低等特点
⑸完整的嵌入式系统的系统测试和可靠性评估体系,保证嵌入式系统高效、可靠、稳定工作
⑹具有较长的生命周期
⑺嵌入式系统的目标代码通常是固化在非易失性存储器(ROM,EPROM,EEPROM,FLASH)芯片中
⑻嵌入式系统使用的操作系统一般是实时操作系统(RTOS),系统有实时约束
⑼嵌入式系统需要专用开发工具和方法进行设计
⑽嵌入式微处理器通常包含专用调试电路
⑾嵌入式系统是技术密集、资金密集、高度分散、不断创新的知识集成系统
嵌入式系统的应用:
工业:
工控设备、智能仪表、汽车电子
军事国防:
军事电子
网络:
网络设备、无线传感网络
消费电子:
信息家电、只智能玩具、通信设备、移动存贮
嵌入式系统的软件层次结构:
驱动层程序
实时操作系统(RTOS)
操作系统的应用程序接口(API)
应用程序
嵌入式处理器:
嵌入式微处理器(就是和通用计算机的微处理器对应的CPU。
目前的嵌入式处理器主要包括:
Am186/88、386EX、PowerPC、Motorola68000、ARM、MIPS系列等)
嵌入式微控制器(嵌入式微控制器又称单片机,顾名思义,就是将整个计算机系统集成到一块芯片中,常见的有8051。
)
嵌入式DSP
典型的嵌入式处理器:
MIPS处理器;PowerPC处理器;Sparc处理器;ARM处理器。
根据外围设备的功能可分为以下5类
存储器类型;通信接口;输入输出设备;设备扩展接口;电源及辅助设备。
嵌入式操作系统:
就是支持嵌入式系统工作的操作系统。
它在知识体系和技术本质上与通用操作系统没有太大的区别,一般用于比较复杂的嵌入式系统软件开发中。
嵌入式操作系统具有实时的特点,是嵌入式系统的灵魂,它的出现大大提高了嵌入式系统开发的效率,减少了系统开发的总工作量,而且提高了嵌入式应用软件的可移植性。
嵌入式操作系统的管理功能:
多任务管理;存储管理;周边资源管理;中断管理。
嵌入式操作系统但大体上可分为两种——商用型和免费型;
商用型的操作系统主要有VxWorks、WindowsCE、Psos、PalmOS、OS-9、LynxOS、QNX、LYNX等;免费型的操作系统主要有Linux和µC/OS-II。
典型的嵌入式操作系统介绍:
VxWorks嵌入式实时操作系统、WinCE操作系统、Linux操作系统、µC/OS-II嵌入式操作系统内核(µC/OS-II是一个可裁减的、源码开放的、结构小巧、可剥夺型的实时多任务内核,主要面向中小型嵌入式系统,具有执行效率高、占用空间小、可移植性强、实时性能优良、可扩展性强等特点。
)
第二章:
ARM体系结构:
ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。
它具有经典RISC的特点:
大的、统一的寄存器文件
装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储器进行操作
简单的寻址模式
统一和固定长度的指令域,简化了指令的译码
ARM体系结构的特点:
每条数据处理指令都对算术逻辑单元和移位器控制,以实现ALU(Arithmeticlogicunit)和移位寄存器(除具寄存器的功能外,所存储的数码在时钟脉冲的作用下还可以移位)的最大利用;
地址自动增加和减少寻址模式,优化程序循环
多寄存器装载和存储指令实现最大数据吞吐量
所有指令的条件执行实现最快速的代码执行
ARM7TDMI处理器:
是ARM通用32位微处理器家族的成员之一。
它具有优异的性能,但功耗却很低,使用门的数量也很少。
它属于精简指令集计算机(RISC),比复杂指令集计算机(CISC)要简单得多。
这样的简化实现了:
高的指令吞吐量;出色的实时中断响应;小的、高性价比的处理器宏单元。
ARM7TDMI处理器使用流水线来增加处理器指令流的速度,ARM7TDMI的流水线分3级,分别为:
取指-译码-执行
ARM体系结构支持7种处理器模式:
用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。
计算偏移量程序代码:
SUBR1,PC,#4;R1=(下面STR指令的地址)
STRPC,[R0];保存(STR指令地址+偏移量)
LDRR0,[R0];然后重装
SUBR0,R0,R1;计算偏移量
R14寄存器与子程序调用:
操作流程:
1、程序A执行过程中调用程序B;2、程序跳转至标号Lable,执行程序B。
同时硬件将“BLLable”指令的下一条指令所在地址存入R14;3、程序B执行最后,将R14寄存器的内容放入PC,返回程序A。
在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令:
SUBSPC,R14_abt,#4
在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令:
SUBSPC,R14_abt,#8
使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。
SWI处理程序通过执行下面的指令返回:
MOVSPC,R14_svc
中断处理代码的开始部分和退出部分:
SUBLR,LR,#4;计算返回地址
STMFDSP!
,{R0-R3,LR};保存使用到的寄存器
LDMFDSP!
,{R0-R3,PC}^;中断返回
第三章:
ARM指令集:
立即数方式
例:
MOVR1,#4
寄存器方式(Rm)
操作数为寄存器的数值
例:
SUBR1,R1,R2
LDRR0,[R1],-R2;R0←[R1],R1=R1-R2
寄存器移位方式
例:
MOVR1,R2,LSR#4
寻址方式:
寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。
MOV指令举例如下:
MOVR11,#0xF000000B;R1=0xF000000B
MOVR0,R1;R0=R1
MOVSR3,R1,LSL#2;R3=R1<<2,并影响标志位
MOVPC,LR;PC=LR,子程序返回
MVN指令举例如下:
MVNR1,#0xFF;R1=0xFFFFFF00
MVNR1,R2;将R2按位取反,结果存到R1
ADD应用示例:
ADDSR1,R1,#1020;R1=R1+1020,并影响标志位
ADDR1,R1,R2,LSL#2;R1=R1+R2<<2
RSB应用示例:
RSBR3,R1,#0xFF00;R3=0xFF00-R1
RSBSR1,R2,R2,LSL#2;R1=(R2<<2)-R2=R2×3影响标志位
ADC应用示例(使用ADC实现64位加法,结果存于R1(高32位)、R0中):
ADDSR0,R0,R2;R0等于低32位相加,并影响标志位
ADCR1,R1,R3;R1等于高32位相加,并加上低位进位
SBC应用示例(使用SBC实现64位减法,结果存于R1、R0中):
SUBSR0,R0,R2;低32位相减,并影响标志位
SBCR1,R1,R3;高32位相减,并减去低位借位
RSC应用示例(使用RSC指令实现求64位数值的负数):
RSBSR2,R0,#0;R2=-R0
RSCR3,R1,#0;R3=-R1-!
Carry
AND应用示例:
ANDSR0,R0,#0x01;R0=R0&0x01,取出最低位数据
ANDEQR2,R1,R3;R2=R1&R3
ORR应用示例:
ORRRO,RO,#0xOF;将RO的低4位置1
MOVR1,R2,LSR#24;使用ORR指令将R2的高8位
ORRR3,R1,R3,LSL#8;数据移入到R3低8位中
EOR应用示例:
EORR1,R1,#0x0F;将R1的低4位取反
EORSR0,R5,#0x01;判断R5和0x01相等否
ADDEQR1,R5,#10;若相等,(R5+10)操作
SUBNER1,R5,#10;若不相等,(R5−10)操作
BIC应用示例:
BICR1,R1,#0x0F;将R1的低4位清零,其它位不变
BICR1,R2,R3;将R3的反码和R2相逻辑“与”;结果保存到R1中
CMP应用示例:
CMPR1,#10;R1与10比较,设置相关标志位
ADDGTR1,R1,R2;若R1>10,则执行本指令(R1+R2)
ADDLER1,R1,R3;若R1≤10,则执行本指令(R1+R3)
CMN应用示例:
CMNR0,#1;R0+1,判断R0是否为1的补码
;如果是,则设置Z标志位
TST应用示例:
TSTR0,#0x01;判断R0的最低位是否为0
TSTR1,#0x0F;判断R1的低4位是否为0
TEQ应用示例:
TEQR0,R1;比较R0与R1是否相等(不影响V位和C位)
练习:
将寄存器R0的第3,4位取反
EORR0,R0,#0b1100
将寄存器R0的高四位和低四位互换
MOVR1,R0
MOVR2,R0;备份R0
MOVR1,R1,LSR#28;将高四位移动到低四位,其他位为0
MOVR2,R2,LSL#28;将低四位移动到高四位,其他位为0
ORRR1,R1,R2;将高四位和第四位合并到一起
ANDR0,R0,#0x0FFFFFF0;将R0高低四位清0
ORRR0,R0,R1
3、将R0的低两位写到R1的低两位上,其余位不变
ANDR2,R0,#3;保留R0的低两位
BICR1,R1,#3;将R1的低两位清0
ORRR1,R1,R2
4、If(a!
=10)&&(b!
=20)a=a+b
CMPR0,#10;比较R0是否为10
CMPNER1,#20;若R0<>10,则比较R1是否为20
ADDNER0,R0,R1;若R0<>20,则R0+R1→R0
5、跳转指令
CMPR0,#10
BEQENDCMP
CMPR1,#20
BEQENDCMP
ADDR0,R0,R1
ENDCMPNOP
X+10(0 6、Y=5X-2(8 |X|(其他) CMPR0,#0 BLENEGITIVE;比0小,转到取补码操作 CMPR0,#8 BLEADDTEN CMPR0,#15 BGEENDPRO MOVR2,#5 MULR0,R0,R2 SUBR0,R0,#2;R0=5*R0-2 BENDPRO ADDTENADDR0,R0,#10;R0=R0+10 BENDPRO NEGITIVERSBR0,R0,#0;R0=-R0 ENDPROMOVR1,R0 MUL应用示例: MULR1,R2,R3;R1=R2×R3 MULSR0,R3,R7;R0=R3×R7,影响CPSR中的N位和Z位 MLA应用示例: MLAR1,R2,R3,R0;R1=R2×R3+R0 UMULL应用示例: UMULLR0,R1,R5,R8;(R1、R0)=R5×R8 UMLAL应用示例: UMLALR0,R1,R5,R8;(R1、R0)=R5×R8+(R1、R0) SMULL应用示例: SMULLR2,R3,R7,R6;(R3、R2)=R7×R6 SMLAL应用示例: SMLALR2,R3,R7,R6;(R3、R2)=R7×R6+(R3、R2) 练习: 设内存中有三个互不相等的无符号字数据,分别存放在R0、R1、R2中,编制程序将最大的数放到R0中。 CMPR0,R1 BHSCOMP MOVR0,R1 COMPCMPR0,R2 MOVLOR0,R2 2、R3=X,R4=Y,计算5(X+1)2+(Y+1)2,结果保存到R4中 MOVR0,R3SUBPRO BLSUBPROADDR0,R0,#1 MOVR3,R1MULR1,R0,R0 MOVR2,#5MOVPC,LR MULR3,R3,R2 MOVR0,R4 BLSUBPRO MOVR4,R1 ADDR4,R4,R3 3、将存放在存储器中,开始地址为SOUR,长度为20个字数据拷贝到开始地址为DEST的空间中 MOVR0,#4 LDRR1,=SOUR LDRR2,=DEST LOOPSUBR0,R0,#1 LDMIAR1! {R3-R7} STMIAR2! {R3-R7} CMPR0,#0 BGELOOP LDR和STR指令应用示例: 1.加载/存储字和无符号字节指令 LDRR2,[R5];将R5指向地址的字数据存入R2 STRR1,[R0,#0x04];将R1的数据存储到R0+0x04地址 LDRBR3,[R2],#-1;将R2指向地址的字节数据存入R3,R2=R2-1 STRBR0,[R3,-R8ASR#2];R0→[R3-R8/4],存储R0的最低有效字节 2.加载/存储半字和有符号字节指令 LDRSBR1,[R0,R3];将R0+R3地址上的字节数据存入R1;高24位用符号扩展 LDRHR6,[R2],#2;将R2指向地址的半字数据存入R6,高16位用0扩展;读出后,R2=R2+2 STRHR1,[R0,#2]! ;将R1的半字数据保存到R0+2地址,;只修改低2字节数据,然后R0=R0+2 异常处理及返回: STMFASP! {R0-R7,LR};现场保存,将寄存器入栈 LDMFASP! {R0-R7,PC}^;恢复现场,异常处理返回 异常模式下的用户状态的保存与恢复 STMFASP,{R0-R7}^;非用户状态的现场保存 LDMFASP,{R0-R7}^;非用户状态的现场恢复 SWP指令应用示例: SWPR1,R1,[R0];将R1的内容与R0指向的存储单元的内容进行互换 SWPBR1,R2,[R0];将R0指向的存储单元低字节数据读取到R1中 ;(高24位清零),并将R2的内容写入到该内存单元中 ;(最低字节有效 MRS应用示例: MRSR1,CPSR;将CPSR状态寄存器读取,保存到R1中 MRSR2,SPSR;将SPSR状态寄存器读取,保存到R2中 应用示例1: 子程序: 允许IRQ中断 ENABLE_IRQ MRSR0,CPSR BICR0,R0,#0x80 MSRCPSR_c,R0 MOVPC,LR 应用示例2: 子程序: 禁止IRQ中断 DISABLE_IRQ MRSR0,CPSR ORRR0,R0,#0x80 MSRCPSR_c,R0 MOVPC,LR 应用示例: 从控制模式切换到IRQ模式 MRS R0, CPSR BICR0,R0,#0x1F ORRR0,R0,#0x12 MSR CPSR_c, R0 练习: 1.StackSvc和StackIrq的地址分别是0x100和0x800,在用户模式、管理模式、中止模式、中断模式下各堆栈指针对应的物理寄存器的编号假设分别为17,18,19,20。 指出指令执行后SP的值 INITSTACK MSRCPSR_c,#0xD3 LDRSP,=StackSvc MSRCPSR_c,#0xD2 LDRSP,=StackIrq LDMFASP! {R0-R3} 2.说明程序段意义。 下面程序运行之前,处理器模式属于未定义模式下,未定义指令模式和管理模式下SPSR的物理寄存器的地址分别为21和22 MRSR0,CPSR MSRCPSR_c,#0xD3 MSRSPSR,R0 SWI指令传递参数有以下两种方法: 指令中的24位立即数指定了用户请求的服务类型,参数通过通用寄存器传递。 MOVR0,#34;设置子功能号为34 SWI12;调用12号软中断 指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的值决定,参数通过其它的通用寄存器传递。 MOVR0,#12;调用12号软中断 MOVR1,#34;设置子功能号为34 SWI0 练习: 1、指出指令运行后R0、R1、R2、R3、[100]、[8]、[4]的值 [100]=4,[8]=2,[4]=13 LDRR0,=100 LDRR1,[R0] MOVR2,R1,LSL#1 LDRR3,[R1] ADDR2,R2,R3 STRR3,[R0] 2、指出下列指令运行后的结果 1.STMIAR0! {R1-R3} 其中: R0=1000,R1=2,R2=5,R3=6 2.LDMIBR0! {R1-R3} 其中: R0=1000,[1000]=4,[1004]=5,[1008]=6,[100C]=7 3.LDMEAR0! {R1-R3} 其中: R0=1000,[FFC]=1,[FF8]=2,[FF4]=3, 4.STMEAR0! {R1-R3} 其中: R0=1000[1000]=4,[1004]=5,[1008]=6,R1=97,R2=98,R3=99 CDP指令格式 CDP{cond}Cp#,Cop1,CRd,CRn,CRm{,op2} Cp#指令操作的协处理器名(pn,n为0~15) Cop1协处理器的特定操作码 CRd作为目标寄存器的协处理器寄存器 CRn存放第一个操作数的协处理器寄存器 CRm存放第二个操作数的协处理器寄存器 op2可选的协处理器特定操作码 例CDPp7,0,c0,c2,c3,0 ;协处理器7操作,操作码为0,可选操作码为0 CDPp6,1,c3,c4,c5;协处理器6操作,操作码为1 LDC指令格式 LDC{cond}{L}Cp#,CRd,<地址> L: 可选后缀,说明是长整数传送 Cp#: 指令操作的协处理器名(名为pn,n为0~15) CRd: 作为目标寄存器的协处理寄存器 <地址>: 指定的内存地址 例: LDCp5,c2,[R1];读取R1所指向的存储器单元数据,放到协处理器p5的c2寄存器中 STC指令格式 STC{cond}{L}Cp#,CRd,<地址> L: 可选后缀,说明是长整数传送 Cp#: 指令操作的协处理器名(pn,n为0~15) CRd: 作为目标寄存器的协处理寄存器 <地址>: 指定的内存地址 例STCp8,CR8,[R2,#4]! ;R2为ARM寄存器,指令将协处理器p8的CR8寄存器中的字数据写入到内存单元(R2+4)中,指令执行后,R2=R2+4 MCR指令格式 MCR{cond}Cp#,Cop1,Rd,CRn,CRm,{Cop2} Cp#: 指令操作的协处理器名(pn,n为0~15) Cop1: 协处理器的特定操作码 Rd: 为ARM寄存器,其值将被传送到协寄存器中 CRn: 存放第一个操作数的协处理器目标寄存器 CRm: 存放第二个操作数的协处理器目标寄存器 Opcode2: 可选的协处理器特定操作码 例: MCRp14,3,R7,c7,c11,6;指令从ARM寄存器R7中将数据传送到协处理器p14的寄存器中(其中R7为ARM寄存器,存放源操作数;c7和c11为协处理器寄存器,为目标寄存器;操作码1为3,操作码2为6) LDR应用示例(加载常量): LDRR2,=0xFF0;MOVR2,#0xFF0 LDRR0,=0xFF000000;MOVR0,#0xFF000000 LDRR1,=0xFFFFFFFE;MVNR1,#0x1 NOP应用示例(延时子程序): movR1,#0x1234 Delay NOP;空操作 NOP NOP SUBSR1,R1,#1;循环次数减一 BNEDelay;如果循环没有结束,跳转Delay继续 MOVPC,LR;子程序返回 算术逻辑运算指令 MUL(32位乘法指令) MULR0,R1,R2;R0=R1*R2 MLA(32位带加数的乘法指令) MLAR0,R1,R2,R3;R0=R1*R2+R3 SMULL(64位有符号数乘法指令) SMULLR0,R1,R2,R3;R0=R2*R3的低32位,R1=R2*R3的高32位 SMLAL(64位带加数的有符号数乘法指令) SMLALR0,R1,R2,R3;(R1,R0)=R2*R3+(R1,R0) UMULL(64位无符号数乘法指令) UMULLR0,R1,R2,R3;R0=R2*R3的低32位,R1=R2*R3的高32位 UMLAL(64位带加数的无符号数乘法指令) UMLALR0,R1,R2,R3;(R1,R0)=R2*R3+(R1,R0) 第五章: ARM源程序基本结构 AREAEXAMPLE,CODE,READONLY ENTRY startMOVR0,#10 MOVR1,#3 ADDR0,R0,R1 END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 资料