版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、师资培训课程安排处理器MMUGPIOUSBLCDCANDMA以太网LCD/触摸屏/鼠标看门狗复位电路电源管理驱动层OS应用BSP/driver/HALLinux、u/COS、Wince文件系统/GUI/API软件硬件输入输出典型的嵌入式系统组成2第一天 ARM体系结构、接口技术第二天 linux应用开发第三天 linux系统移植第四天 linux设备驱动第五天 wince开发课程安排3了解嵌入式系统知识体系掌握嵌入式基础知识了解嵌入式课程设置的过程和方法为大家提供一个良好的沟通、交流的环境课程目标4ARM 体系结构议程ARM公司简介编程模型指令集系统设计6ARM公司成立于1990年11月前身为
2、 Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴ARM 公司不生产芯片另外也提供基于ARM架构的开发设计技术软件工具, 评估板, 调试工具,应用软件,总线架构, 外围设备单元,等等7ARM 全球分布EnglandCambridge, Maidenhead, Sheffield, BlackburnGermanyMunichFrance Paris, Sophia AntipolisKoreaSeoulUSSeattle, Los Gatos, Walnut Creek, Austin, Boston, San DiegoAsiaTaiwanJ
3、apanShin-Yokohama (Tokyo)8ARM合作伙伴9ARM Powered ProductsLexmark Z52 Color JetprinterSamsung ML5100AJVC Pixstar GC-X1HP Jornado 820Psion Revo PlusHP CapShareSony MZ-R90 MiniDiscNokia 8810Nokia MediamasterNintendoGameboyAdvanceEricssonR380Alba BushInternet TV3Com10/100 PCI NICIomega HipZipDiamond Multim
4、edia Rio 60010ARM处理器的最新发展11高性能方向TI (德州仪器)Omap3430 Cortex-A8核600MHz (诺基亚N96)Omap3530 Cortex-A8核600MHz ARM+DSP双核Samsung(三星)S5PC100 Cortex-A8核 600MHz (iPhone 3GS和M9都应用此芯片) S5PC110/S5PV210 Cortex-A8核 1GHZ (号称目前世界上最快的ARM处理器)Freescale(飞思卡尔)i.MX512/ i.MX513/ i.MX515 Cortex-A8核600MHz1GHz(在多款上网本中得到应用)12Marve
5、ll(马维尔)PXA930 800MHz Cortex-A8核 ARMADA 500/600/1000系列 Sheeva PJ4核心 1GHz1.2GHz(支持ARMv7指令集,架构异同)Qualcomm(高通)QSD8650A/ QSD8672(Snapdragon系列) 1.3G1.5G scorpion核心(支持ARMv7指令,架构异同)Nvidia(英伟达)Tegra ARM11核 700MHzTegra2 (下一代产品) Cortex A8(或A9)核13低功耗、低成本的微控制器方向Cortext-M3 Stm32系列 36MHz72MHz (LQFP48 基本型:1.8美元)Cor
6、tex-M1Cortex-M0实时方向Cortex-R4安全方向SecurCoreSC300 (Cortex-M3)SC200 (ARM9)SC100 (ARM7)14议程ARM公司简介编程模型指令集系统设计15数据和指令类型ARM 采用的是32位架构. ARM 约定:Byte :8 bitsHalfword :16 bits (2 byte)Word :32 bits (4 byte)大部分ARM core 提供:ARM 指令集(32-bit) Thumb 指令集(16-bit )Jazelle cores 支持 Java bytecode16处理器工作模式 ARM 有7个基本工作模式:Us
7、er : 非特权模式,大部分任务执行在这种模式FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式Supervisor :当复位或软中断指令执行时将会进入这种模式Abort : 当存取异常时将会进入这种模式Undef : 当执行未定义指令时会进入这种模式System : 使用和User模式相同寄存器集的特权模式17r0r1r2r3r4r5r6r7r8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13
8、 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrFIQIRQSVCUndefAbortUser Moder0r1r2r3r4r5r6r7r8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked
9、out RegistersFIQIRQSVCUndefAbortr0r1r2r3r4r5r6r7r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserIRQSVCUndefAbortr8r9r10r11r12r13 (sp)r14 (lr)FIQ ModeIRQ Moder0r1r2r3r4r5r6r7r
10、8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQSVCUndefAbortr13 (sp)r14 (lr)Undef Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14
11、 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQIRQSVCAbortr13 (sp)r14 (lr)SVC Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11
12、r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQIRQUndefAbortr13 (sp)r14 (lr)Abort Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsr当前可见寄存器备用寄存器UserFIQIRQSVCUndefr1
13、3 (sp)r14 (lr)ARM 寄存器18寄存器组织概要Usermoder0-r7,r15,andcpsrr8r9r10r11r12r13 (sp)r14 (lr)spsrFIQr8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr0r1r2r3r4r5r6r7Userr13 (sp)r14 (lr)spsrIRQUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrUndefUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrSVCUsermoder0-r12,r15,andcps
14、rr13 (sp)r14 (lr)spsrAbortUsermoder0-r12,r15,andcpsrThumb stateLow registersThumb stateHigh registersNote: System模式使用user模式寄存器集19ARM 寄存器ARM 有37个32-Bits长的寄存器.1 个用作PC( program counter)1个用作CPSR(current program status register)5个用作SPSR(saved program status registers)30 个通用寄存器当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以
15、存取: 相应的r0-r12子集相应的 r13 (the stack pointer, sp) and r14 (the link register, lr)相应的 r15 ( the program counter, pc)相应的CPSR(current program status register, cpsr)特权模式 (除system模式) 还可以存取;相应的 spsr (saved program status register)20程序状态寄存器 条件位:N = Negative result from ALU Z = Zero result from ALUC = ALU oper
16、ation Carried outV = ALU operation oVerflowedQ 位:仅ARM 5TE/J架构支持指示饱和状态J 位仅ARM 5TE/J架构支持J = 1: 处理器处于Jazelle状态中断禁止位:I = 1: 禁止 IRQ.F = 1: 禁止 FIQ.T Bit仅ARM xT架构支持T = 0: 处理器处于 ARM 状态T = 1: 处理器处于 Thumb 状态Mode位:处理器模式位2731N Z C V Q2867I F T mode162381554024fsxc U n d e f i n e dJ21当处理器执行在ARM状态:所有指令 32 bits 宽
17、所有指令必须 word 对齐所以 pc值由bits 31:2决定, bits 1:0 未定义 (所以指令不能halfword / byte对齐).当处理器执行在Thumb状态:所有指令 16 bits 宽所有指令必须 halfword 对齐所以 pc值由bits 31:1决定, bits 0 未定义 (所以指令不能 byte对齐).当处理器执行在Jazelle状态:所有指令 8 bits 宽处理器执行 word 存取一次取4条指令程序指针PC (r15)22Vector Table异常处理当异常产生时, ARM core:拷贝 CPSR 到 SPSR_设置适当的 CPSR 位: 改变处理器状态
18、进入 ARM 态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断 (如果需要)保存返回地址到 LR_设置 PC 为相应的异常向量返回时, 异常处理需要:从 SPSR_恢复CPSR从LR_恢复PC Note:这些操作只能在 ARM 态执行.Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140
19、x100 x0C0 x080 x040 x0023The ARM 可以用 little/big endian 格式存取数据. r0 = 0 x11223344STR r0, r1LDRB r2, r1r1 = 0 x100Memory3 2 1 0 0 1 2 3Byte Lane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011Little endianBig endianR2 = 0 x44R2 = 0 x11字节顺序24ARM发展
20、SA-110ARM7TDMI4T1Halfword and signed halfword / byte supportSystem modeThumb instruction set24ARM9TDMISA-1110ARM720TARM940TImproved ARM/Thumb InterworkingCLZ 5TESaturated mathsDSP multiply-accumulate instructionsXScaleARM1020EARM9E-SARM966E-S3Early ARM architecturesARM9EJ-S5TEJARM7EJ-SARM926EJ-SJaze
21、lleJava bytecodeexecution6ARM1136EJ-SARM1026EJ-SSIMD InstructionsMulti-processingV6 Memory architecture (VMSA)Unaligned data support25测验11) 说出ARM可以工作的模式名字。2) ARM核有多少个寄存器?3) 什么寄存器用于存储PC和LR寄存器?4) R13通常用来存储什么?5) 哪种模式使用的寄存器最少?6) 在Thumb 指令集中,哪些寄存器处于Low group?7) CPSR的哪一位反映了处理器的状态?8) 所有的Thumb指令采取什么对齐方式?9)
22、ARM有哪几个异常类型。10) 为什么FIQ的服务程序地址要位于0X1C?11) 在复位后,ARM处理器处于何种模式、何种状态?26议程 ARM公司简介编程模型指令集系统设计27ARM 指令集所有ARM指令均为32-bits长大部分为单周期指令所有指令都可以条件执行采用 Load/Store 架构数据处理指令: SUB r0,r1,#5 ADD r2,r3,r3,LSL #2 ANDS r4,r4,#0 x20 ADDEQ r5,r5,r6存储器存取指令: LDR r0,r1,#4 STRNEB r2,r3,r4 LDRSH r5,r6,#8! STMFD sp!,r0,r2-r7,r1028
23、ARM 跳转分支指令B PC 32 Mbyte .BL 保存返回地址到 LR返回时从 LR 恢复 PC对于 non-leaf 函数, LR 必须压栈保存STMFD sp!,regs,lr:BL func2:LDMFD sp!,regs,pcfunc1func2:BL func1:MOV pc, lr29多达16个可定义协处理器 扩充ARM指令集通常用作ARM “internal functions” (例如:cp15通常 用作 ARM cache 控制器)Handshaking signalsARM coreCoprocessor XCoprocessor YDatabusFDEFDEFDE协
24、处理器30Thumb 是一个 16-bits 指令集优化代码密度 (65% of ARM )提高窄内存操作性能是ARM指令集的一个功能子集ARM / Thumb 转换使用 BX 指令015310ADDS r2,r2,#1ADD r2,#132-bits ARM 指令16-bits Thumb 指令对于有编译器产生的绝大多数指令: 条件执行不可用 源和目的寄存器相同 只有低端寄存器可用 常量大小受限制 内嵌的桶形移位不可用Thumb指令集3105000100001500020000250003000030000Dhrystone 2.1 / sec20MHzARMThumb32 bit16 bi
25、t16 bit with32 bit stack存储器宽度 (zero wait state)ARM / Thumb 性能分析32指令流执行单元ARMThumb解码阶段执行阶段预取阶段JazelleJazelleJazelle 使得 ARM cores 执行 8-bit 的Java 字节码95% 的字节码执行使用 hardware (typical)Normal JVM:1.0 Caffeinemarks/MHzARM9EJ:5.5 Caffeinemarks/MHz更高的性能增加的门电路0) x=1;CMP r0,#0MOVEQ r1,#0MOVGT r1,#1使用条件比较指令if (a=4
26、 | a=10) x=0;CMP r0,#4CMPNE r0,#10MOVEQ r1,#055Branch :B labelBranch with Link :BL subroutine_label处理器核按偏移量左移两位,符号扩展,再把该值加到当前PC寄存器内跳转范围: 32 Mbyte如何执行长跳转?2831240 Cond 1 0 1 L 偏移量 条件码区域Link bit0 = Branch1 = Branch with link232527分支指令56数据处理指令包括:算术指令:ADDADCSUBSBCRSBRSC逻辑指令:ANDORREORBIC比较指令:CMPCMNTSTTEQ数
27、据搬移:MOVMVN上述指令只能对寄存器操作,不能针对存储器。语法:S Rd, Rn, Operand2只有比较指令影响标志位 -不指定Rd数据搬移(MOV指令)不指定Rn第二个操作数通过桶型移位器送到ALU中。57DestinationCF0DestinationCFLSL : Logical Left ShiftASR: Arithmetic Right Shift(无符号数)乘2除2,并保留符号位DestinationCF.0DestinationCFLSR : Logical Shift RightROR: Rotate Right(无符号数)除2位轮换DestinationRRX:
28、Rotate Right Extended位轮换,从 CF到MSB都参与操作CF桶型移位器58 寄存器, 可选择是否增加移位操作.移位值可以是: 5 bit 无符号整数放在另一个寄存器的低字节用于常数乘法 立即数8 bit ,大小范围0-255。右移偶数位允许直接加载32-bit 常数到寄存器中。结果操作数1BarrelShifter操作数2ALU桶型移位器:第二个操作数59没有任何一条ARM 指令可包括一个32 bit的立即数所有的ARM指令都是32 bits固定长度数据处理指令格式中,第二个操作数有12位4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。记
29、住一条准则: “最后8位一定要移动偶数位”.07118immed_8ShifterRORrotx2Quick Quiz: 0 xe3a004ffMOV r0, #?立即数 (1)60Examples:下列命令中,汇编器把立即数转换为移位操作: MOV r0,#4096; uses 0 x40 ror 26 ADD r1,r2,#0 xFF0000; uses 0 xFF ror 16也可使用 MVN来进行位反转: MOV r0, #0 xFFFFFFFF ; assembles to MVN r0,#0立即数不能使用上述方法产生,否则将导致错误。031ror #0 range 0-0 xff0
30、00000 step 0 x01000000 ror #8 range 0-0 x000000ff step 0 x00000001 range 0-0 x000003fc step 0 x00000004 ror #30 000000000000000000000000000000000000000000000000000000000000000000000000立即数 (2)61为允许装载大常数,汇编器提供了一条伪指令:LDR rd, =const它可能汇编成下列指令:MOV or MVN。或LDR 指令,从数据池(Literal pools)读取常数。For exampleLDR r0,
31、=0 xFF=MOV r0,#0 xFFLDR r0,=0 x55555555=LDR r0,PC,#Imm12DCD 0 x55555555建议把常数装载到寄存器中时一律使用该伪指令。装载32 bit常数62测验 1. 写一条 ARM 指令,分别完成下列操作:a) r0 = 16b) r0 = r1 / 16(带符号的数字)c) r1 = r2 * 3d) r0 = -r02. 下面哪些立即数是数据处理指令中有效的数据?a) 0 x00AB0000 b) 0 x0000FFFF c) 0 xF000000Fd) 0 x08000012 e) 0 x00001f80 f) 0 xFFFFFFF
32、F3. BIC指令做什么用?4. 为什么ARM 处理器增加了一条RSB 指令?63单寄存器数据传送 LDRSTRWord LDRBSTRBByte LDRHSTRHHalfword LDRSB带符号的byte load LDRSH带符号的halfword load存储器系统必须支持所有访问宽度语法: LDR Rd, STR Rd, e.g. LDREQB64 地址访问LDR/STR访问的地址由基址寄存器加上偏移量来产生。针对word和无符号byte 的访问, 偏移量可以是:一个无符号12-bit立即数 (如 0 - 4095 bytes).LDR r0,r1,#8一个寄存器,或再加上移位(由立
33、即数指定)LDR r0,r1,r2LDR r0,r1,r2,LSL#2可以是从基址寄存器上加或减去偏移量:LDR r0,r1,#-8LDR r0,r1,-r2LDR r0,r1,-r2,LSL#2对于halfword和带符号的halfword / byte, 偏移量可以是:一个无符号8 bit 立即数 (如 0-255 bytes).一个寄存器 (不能有偏移操作)。可选择采用pre-indexed或post-indexed方式寻址650 x50 x5r10 x200基址寄存器0 x200r00 x5源寄存器for STR偏移量120 x20cr10 x200原基址寄存器0 x200r00 x5
34、源寄存器for STR偏移量120 x20cr10 x20c更新基址寄存器通过 STR r0,r1,#12!来自动更新基址寄存器Pre or Post Indexed 寻址? Pre-indexed: STR r0,r1,#12 Post-indexed: STR r0,r1,#1266LDM / STM指令允许一次传送1到16个寄存器到/从存储器中。寄存器传送顺序是固定的,不能被改变最小数字的寄存器总是被对应到存储器的最低地址上。LDMIAr10,r0,r1,r4基址寄存器指定存储器访问开始的地址块传送指令针对下列情况很有效:从存储器中搬运一块数据保存或恢复堆栈中的内容如果是慢速存储器,会影
35、响中断响应时间r1r4r0r10地址增加块数据传送67LDM / STM 操作语法: Rb!, 4 种寻址操作: LDMIA / STMIAIncrement After(先操作,后增加) LDMIB / STMIBIncrement Before(先增加,后操作) LDMDA / STMDADecrement After (先操作,后递减) LDMDB / STMDBDecrement Before (先递减,后操作)IAr1地址增加r4r0r1r4r0r1r4r0r1r4r0r10IBDADBLDMxx r10, r0,r1,r4STMxx r10, r0,r1,r4基址寄存器 (Rb)6
36、8可选项“ ! ”将导致LDM / STM 指令去自动更新基址寄存器后缀为IA, IB时,加上4 乘以 用于传送的寄存器的数目的值后缀为DA, DB时,减去4乘以用于传送的寄存器的数目的值示例:; r12指向源数据起始地址; r14指向源数据尾地址; r13指向目的数据起始地址loopLDMIAr12!, r0-r11; 装载48 bytesSTMIAr13!, r0-r11;和存储themCMPr12, r14; check for the endBNEloop;和loop until done此循环传送 48 bytes占用了31周期时钟为33 MHz时传输速率超过50 Mbytes/se
37、c存储器增加r13r14r12存储器块拷贝69LDMFD sp!,r4-r7,pcSP100FF1234AOBE80341010123484209753r41r514544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存储器顶SPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034ARM堆栈操作通过块传送指令来完成:STMFD(Push)块存储- Full D
38、escending stack STMDBLDMFD(Pop)块装载- Full Descending stack LDMIASTMFD sp!,r4-r7,lr堆栈70在寄存器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成一个字节或字的交换。语法: SWPB Rd, Rm, Rn可用作信号量操作不能由armcc编译产生,必须使用汇编器。RmRd321temp存储器RnSWP71产生一个异常陷阱,跳转到SWI 硬件向量。SWI 处理程序可以检测SWI号,从而决定采取何种操作。通过SWI机制,运行在用户模式下的应用程序,可请求操作系统执行一系列特权操作。语法: SWI 28312
39、4270 Cond 1 1 1 1SWI number (ignored by processor)23条件域软件中断 (SWI)72MRS和MSR允许传送CPSR / SPSR中的内容到/从一个通用寄存器中。语法: MRS Rd, ; Rd = MSR ,Rm ; = Rm在这里: = CPSR or SPSR_fields = fsxc的任意组合也允许送一个立即数到 psr_fields MSR ,#Immediate用户模式下,所有位均可以被读取,但只有条件标志位 (_f)可被写。2731N Z C V Q2867I F T mode162381554024fsxc U n d e f
40、i n e dJPSR 传送指令73协处理器指令ARM体系支持16个协处理器针对每个协处理器的指令占用 ARM指令集中的固定部分 如果相应的协处理器不存在, 将发生一个未定义指令异常。这有三种协处理器指令协处理器数据处理指令 CDP:初始化协处理器数据处理操作协处理器寄存器传送指令 MRC:从协处理器寄存器移到ARM 寄存器 MCR:从 ARM 寄存器移到协处理器寄存器协处理器存储器传送指令 LDC:从存储器装载到协处理器寄存器 STC:从协处理器寄存器存储到存储器74测试 1. 写几条ARM 指令,使能IRQ中断2. 下列 ARM 指令将做什么?a) LDRH r0,r1,#6b) LDR
41、r0, =0 x9993.在装载或存储指令中, “!”表示什么?4. 当 执行SWI 指令时,会发生什么?5. SWP 指令的优势是什么?75议程ARM 指令集Thumb 指令集v5TE体系结构扩展76015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令16-bit Thumb 指令对于由编译器产生的大部分指令:没有条件执行源、目的寄存器必须相同仅能使用低寄存器常数大小有限制不能使用在线移位器ThumbThumb 是16-bit 指令集代码密度优化 (总代码大小约为ARM指令的65%)使用窄总线存储器时可以大大提高性能。是 ARM 指令集的一个子集。核存在一个执行
42、状态 Thumb状态ARM和Thumb之间切换使用BX 指令77使用Branch Exchange 指令来完成 InterworkingBX Rn; Thumb 状态下的Bx指令BX Rn; ARM状态下的Bx指令也可以只是执行一个绝对跳转,无须状态更换。ARM / Thumb 交互工作RnBX跳转的地址31013101ARM / Thumb 选择0 - ARM 状态1 - Thumb 状态078写 Thumb汇编程序Thumb不是一个“好” 指令集!最好用编译器来产生约束并不一致代码处理通常优于ARM 指令更多细节,参看:ARM “Architecture Reference Manual”
43、Chapters A6和A779议程ARM 指令集Thumb 指令集v5TE体系结构扩展80v5TE结构v5TE体系包括全部的 v4T ARM和Thumb 指令集,还有:更支持interworking同时支持ARM / Thumb状态Breakpoint 指令 (ARM和Thumb)CLZ(Count Leading Zeros)指令扩展协处理器指令 - MCR2等等支持饱和处理封装的带符号的半字乘法指令双字装载/ 存储指令Cache预装载指令双字协处理器 传送指令 - MCRR/MRRC81你采用的处理器是哪种结构?处理器核结构体系7TDMI & 9TDMIv4T9E-S rev1v5TE9
44、26EJ-S/1026EJ-Sv5TEJ1020Ev5TEStrongARMv4XScale Microarchitecturev5TE82异 常 处 理议程序言中断处理软中断(SWI)处理其它异常处理84Vector TableVector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0
45、 x080 x040 x00异常处理当异常产生时, ARM core:拷贝 CPSR 到 SPSR_设置适当的 CPSR 位: 改变处理器状态进入 ARM 状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断 (如果需要)保存返回地址到 LR_设置 PC 为相应的异常向量返回时, 异常处理需要:从 SPSR_恢复CPSR从LR_恢复PC Note:这些操作只能在 ARM 态执行.85从SWI 和 Undef异常返回MOVS pc,lr从FIQ, IRQ 和 预取异常(Prefect Abort)返回SUBS pc,lr,#4从数据异常( Data Abort)返回SUBS pc,lr
46、,#8如果 LR之前被压栈的话使用LDM “ ” LDMFD sp!,pc异常返回:使用一数据处理指令:相应的指令取决于什么样的异常在特权模式不仅仅更新PC,而且 拷贝SPSR 到 CPSR指令带有 “S” 后缀 PC做为目的寄存器异常返回指令See end of presentation for backgroundinformation on these instructions86异常在当前指令执行完成之后才被响应多个异常可以在同一时间产生 异常指定了优先级和固定的服务顺序:ResetData AbortFIQIRQPrefetch AbortSWIUndefined instructi
47、on异常优先级87向量表指令 32 Mbytes 4 KbytesLiteral pool containing address of Undef HandlerIRQ handler within 32MBytes Branch instruction rangeSWI Exception handler placed on applicable address boundaryFIQ handler follows vector table Undef handler outside 32MBytes branch instruction range0 x00 x10000 x200000
48、00 xFFC0 x80 x180 x300000000 xFFFFFFFF0 x1C0 x4MOV PC, #0 x30000000B IRQ_handler0 x30008000IRQ HandlerSWI HandlerFIQ HandlerLDR PC, PC, #+0 xFF0Undef Handler0 x3000800088与异常发生相关的模式改变意味着所调用的异常处理程序至少要访问:私有的 SP_ (stack pointer ).私有的 LR_ (link register).私有的 SPSR_ (saved program status register ).在 FIQ异常
49、处理中, 另有5个私有的通用寄存器 (r8_fiq to r12_fiq).其它的寄存器是所有模式共用的.异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返回前恢复来实现任何所需寄存器的初始化要有应用程序的起始代码来完成,异常处理中的89议程序言中断处理软中断(SWI)处理其它异常处理90中断处理ARM 有两级外部中断 FIQ,IRQ.可是大多数的基于ARM 的系统有 2个的中断源!因此需要一个中断控制器(通常是地址映射的)来控制中断是怎样传递给ARM的。在许多系统中,一些中断的优先级比其它中断的优先级高,他们要抢先任何正在处理的
50、低优先级中断。Note: 通常中断处理程序总是应该包含清除中断源的代码。地址映射中断控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM读控制器寄存器并找到IRQ/FIQ中断源ARM写外设寄存器清相应中断源91FIQ vs IRQFIQ 和 IRQ 提供了非常基本的优先级级别。FIQs有高于IRQs的优先级,表现在下面2个方面:当多个中断产生时,CPU优先处理FIQ.处理 FIQ时禁止 IRQs.IRQs 将不会被响应直到 FIQ处理完成.FIQs 的设计使中断响应尽可能的快.FIQ 向量位于中断向量表的最末.中断处理程序可从中断向量处连续执行
51、FIQ 模式有5个额外的私有寄存器 (r8-r12)中断处理必须保护其使用的非私有寄存器可以有多个FIQ中断源,但是考虑到系统性能应避免嵌套。92C语言简单中断处理程序在C中可以在函数定义时使用关键词 “_irq”来写一个简单的中断处理程序. 这将导致: 函数所有用到的寄存器被保护 如果可能, 任何远程调用所使用的其他寄存器也被保护函数退出使用正确的返回指令(修正 pc = lr-4 并从 spsr恢复cpsr)_irq 仅仅可在 armcc中使用.被_irq 函数调用的子程序可以用 tcc编译.确保 IRQ的堆栈指针已经设置 !93C 中断处理示例_irq void IRQHandler (
52、void)volatile unsigned int *source = (unsigned int *)0 x80000000; if (*source = 1) / which interrupt was it?int_handler_1();/ process the interrupt / insert checks for other interrupt sources here *(source+1) = 0;/ clear the interrupt Output without _irq Output with _irqSTMFD sp!,r4,lrMOV r4,#0 x800
53、00000LDR r0,r4,#0CMP r0,#1LEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r4,pcSTMFD sp!,r0-r4,r12,lrMOV r4,#0 x80000000LDR r0,r4,#0CMP r0,#1BLEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r0-r4,r12,lrSUBS pc,lr,#494测试1)中断向量表位于存储器的什么位置?2)IRQ或FIQ异常的返回指令是什么?3)什么类型的中断优先级最高?4)什么指令可以放在中断向量表?5)FIQ的什么特点使得
54、它处理的速度比IRQ快?95议程序言中断处理软中断(SWI)处理其它异常处理96软中断SWI 0 x01向量表用户程序(C/ASM)SWI 处理程序 (ASM)(可选)SWI 处理程序(C)用户程序调用 SWISWI 中断处理程序包含汇编部分和可选用的 C 部分97SWI 调用汇编中, SWI 调用使用“SWI 中断号”实现, e.g:SWI 0 x24小心在汇编中如果SWI 调用时处于Supervisor模式将会冲掉LR_svc.例如:在SWI处理程序中的二级调用解决方法: 在SWI调用之前对LR_svc 压栈保护C 中, 使用关键词 “_swi” 来定义一个软中断函数.For Exampl
55、ecompiles to:_swi(0 x24) void my_swi (void); void foo (void) my_swi();foo STMFD sp!,lr SWI 0 x24 LDMFD sp!,pc98传递参数到SWIs参数传递使用:SWI 号 (e.g. semi-hosting, 使用0 x123456 (ARM) or 0 xAB (Thumb)内核寄存器汇编中,简单设置需要的寄存器,然后调用SWI 即可:LDR r1, =Text; string pointerMOV r0,#4 ; SYS_WRITE0SWI 0 x123456; ARM semihosting
56、SWI :TextDCB ARM”, 0C 中, 关键字 “_swi” 允许最多 4个参数,使用 r0-r3 来传递Note: 因为SWI调用将切换到supervisor 模式,所以不能采用堆栈来传递参数函数声明 _swi(0 x123456) void Semihosting(unsigned op, char *s);函数调用 Semihosting(0 x4, “ARM”);99ARM 内核不提供直接传递软中断(SWI)号到处理程序的机制:SWI 处理程序必须定位SWI 指令,并提取SWI指令中的常数域为此, SWI 处理程序必须确定SWI 调用是在哪一种状态(ARM/Thumb).检查
57、 SPSR 的 T-bitSWI 指令在ARM 状态下在 LR-4 位置, Thumb 状态下在 LR-2位置SWI 指令按相应的格式译码:ARM 态格式:Thumb 态格式:283124270 Cond 1 1 1 1SWI number2315 8 7 01 1 0 1 1 1 1 1SWI number存取 SWI 号100存取 SWI 参数汇编中,存取调用者设置的寄存器即可.在返回之前,修改寄存器的值,传回参数给调用者.传参数给C, 通常采用压栈的方法.将参数压栈给调用的函数传递一个指向这些参数的指针也可以通过将参数值写回到适当的堆栈位置,将参数传回101T_bitEQU 0 x20S
58、WI_HandlerSTMFD sp!, r0-r3,r12,lr MOV r1, spMRS r0, spsrSTMFD sp!, r0TST r0, #T_bitLDRNEH r0, lr,#-2 BICNE r0, r0, #0 xff00LDREQ r0, lr,#-4 BICEQ r0, r0, #0 xff000000; r0 now contains SWI number; r1 now contains pointer to parameters on stackBL C_SWI_HandlerLDMFD sp!, r1MSR spsr_csxf, r1LDMFD sp!, r
59、0-r3,r12,pc提取SWI 指令的常量域(24-bits: 如果从ARM中调用, 8-bits: 如果从Thumb 中调用)恢复寄存器并返回取出 spsr 并压栈保存寄存器压栈,设置堆栈指针调用 C SWI 处理程序软中断(SWI)处理示例102/ Memory mapped registersvolatile unsigned parallel_output, parallel_input;:void C_SWI_Handler (unsigned number, int *param)/ r0 = SWI number / r1 = pointer to SWI parameters
60、 in memory switch (number) case 0: parallel_output = param0; break;case 1: param0 = parallel_input; break;default : break; C SWI 处理程序示例103Reset 处理程序执行的动作取决于不同的系统. 例如它可以:设置异常向量初始化存储器系统 (e.g. MMU/PU)初始化所有需要的模式的堆栈和寄存器 初始化所有 C 所需的变量初始化所有临界I/O设备使能中断改变处理器模式或/和状态调用主应用程序复位(reset)104Quiz1)为什么异常只能在arm状态下返回?2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024中国银行国家助学贷款保证合同
- 2024室内装修施工合同范本模板
- 2024年度软件开发及许可协议
- 2024年度知名品牌餐饮连锁加盟合同
- 成本制胜课件教学课件
- 2024年度供货合同范本
- 2024年大型风力发电项目施工合同
- 2024年度市场营销策划与执行合同
- 2024年建筑工地安全协议
- 2024年度医疗服务提供合同
- 人教版数学五年级上册课本习题(题目)
- 钢筋合格证(共6页)
- BIM技术全过程工程管理及应用策划方案
- 弯扭构件制作工艺方案(共22页)
- 水利工程填塘固基、堤身加固施工方法
- 中医针灸的骨边穴怎样定位
- 人教版八年级上册英语单词表默写版(直接打印)
- 电脱水、电脱盐讲解
- 江西省科技创新平台建设(PPT课件)
- 违约损失率(LGD)研究
- 沟槽回填施工方案(完整版)
评论
0/150
提交评论