1 / 47

ARM 处理器开发

ARM 处理器开发. 杨传森. 数据. 指令译码器. 符号扩展. 写. 读. PC p15. 结果 to Rd. 寄存器文件 r0~r15. Rn. Rm. 桶型移位器. MAC. ALU. 地址寄存器. 加法器. 地址. ARM 内核的数据流模型. ARM 内核的数据流模型. ARM 流水线结构. 取指 译码 取操作数 执行运算 存储器访问 结果写回寄存器 各个阶段操作相互独立,采用流水线的重叠技术极大地提高了系统性能. 取 指令. 译码. 译码. Reg 读. 移位 /ALU 乘法. 地址 计算.

zed
Download Presentation

ARM 处理器开发

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARM处理器开发 杨传森

  2. 数据 指令译码器 符号扩展 写 读 PC p15 结果 to Rd 寄存器文件r0~r15 Rn Rm 桶型移位器 MAC ALU 地址寄存器 加法器 地址 ARM内核的数据流模型 • ARM内核的数据流模型

  3. ARM流水线结构 • 取指 • 译码 • 取操作数 • 执行运算 • 存储器访问 • 结果写回寄存器 各个阶段操作相互独立,采用流水线的重叠技术极大地提高了系统性能

  4. 指令 译码 译码 Reg 读 移位 /ALU 乘法 地址 计算 乘法器 部分积 相加 Reg写 数据写 取指令 Thumb解压缩 ARM译码 Reg读 移位/ALU Reg写 取指令 译码 Reg读 移位/ALU 数据存储器访问 Reg写 ARM7、ARM9、ARM9E、ARM10在流水线方面的区别 • 取指 译码 执行 • 取指 译码 执行 存储器 写 • 取指发射译码执行存储器写

  5. ARM7寄存器 R0--R7 : 通用寄存器 • R8_FIQ ---R12_FIQ:允许快速中断处理 • /R8_USER ---- R12_USER 其它态。 • R13,R14/USER:SYSTEM • R13,R14/FIQ R13,R14/管理态 • R13,R14/IRQ R13,R14/中止态 R13,R14/UNDEF • R13用于各工作态的堆栈寄存器 • R14用来保护程序调用的现场PC指针 • R15:pc

  6. 中断与异常 • 复位 0x00000000开始或0xffff0000开始 • 管理模式 IRQ 中断irq引脚产生,比Fiq优先级低。进入Fiq时,会屏蔽irq.0x000000018或0xffff0018 • FIQ 快速中断引脚产生,放在矢量表的最后,另外有自己的临时寄存器,提升中断响应 0x0000001c或0xffff001c • 异常进入均为ARM态,另外异常的返回各不相同。FIQ: movs pc,r14_fiq,#4 IRQ: movs pc,r14_fiq,#4 • Fiq/irq 的最大延迟时间:29个时钟周期。 • 最小延迟时间:5个时钟周期。

  7. 存储器和I/O • ARM采用了存储器映射I/O的方式,把I/O地址作为特殊的存储器地址。 • ARM体系同时支持大尾端/小尾端 • 小位端:11223344 --〉44,33,22,11。 • 32根地址线 • 32根数据线 • 内部cache • I/O采用内存映射的方式实现

  8. LPC2200系列-ARM I/O结构 • 一般而言,ARM架构中的处理器核和处理器内核都没有I/O部件和模块,但是可以通过AMBA总线扩展。 • 存储器映射I/O:ARM采用了存储器映射I/O的方式,把I/O地址作为特殊的存储器地址。 • 中断IRQ和快速中断FIQ:一般的ARM没有DMA功能,系统安排了快速中断FIQ和中断IRQ来提高I/O处理能力。

  9. ARM AMBA接口 • ARM内核通过内部总线选用Cache部件,通过协处理器接口扩充各种协议处理器, • 通过AMBA来扩展不同体系构架的宏单元及I/O部件

  10. ARM7TDMI处理器三级流水线 • 增加处理器指令流的速度,(09MIPS/MHz) • 取指 • 译码 • 执行 • ARM7TDMI使用 Von Neumann结构:指令与数据共用一条32位总线。

  11. 处理器状态I • ARM7TDMI内核使用ARMv4T,该结构包含32位ARM指令集,16位Thumb指令集。

  12. 处理器状态II-处理器模式

  13. 条件代码标志:

  14. 模式位

  15. 异常或入口 返回指令 前状态 ARM Thumb 备注 BL Mov pc,r14 Pc+4 Pc+2 SWI Mov pc,r14_svc Pc+4 Pc+2 未定义指令 Mov pc,r14_und Pc+4 Pc+2 预取中止 SUBS pc,r14_abt,#4 Pc+4 Pc+4 快中断 SUBS pc,r14_fiq,#4 Pc+4 Pc+4 中断 SUBS pc,r14_riq,#4 Pc+4 Pc+4 数据中止 SUBS pc,r14_abt,#8 Pc+8 Pc+8 复位 无 无 无 异常与中断 • 异常或入口

  16. 异常与中断 • 进入异常 在适当的LR中保存,下一条指令的地址。 CPSR复制适当的SPSR 根据异常将CPSR模式强制设为某一值 强制PC从相关的异常向量处取指

  17. 异常与中断 • 退出异常 将LR中的值减去偏移量后移入PC 将SPSR的值复制回CPSR 清零中断禁止标志(在入口中置位的)

  18. 异常与中断 • FIQ(快速中断) nFIQ信号由片外拉低,产生快速中断请求,支持数据转移和通道处理;在一个特权模式下,可通过置位CPSR中的F标志位,来禁止FIQ异常;当F标志清零时,ARM7TDMI在每条指令结束时检测FIQ同步器输出端的电平。

  19. 异常与中断 • IRQ 用于外部硬件(外设)中断处理器的正常执行流。在一个特权模式下,可通过置位CPSR中的I标志位,来禁止IRQ异常。

  20. 异常与中断 • 中止 表示当前对存储器的访问不能被完成。ABORT信号由内部存储管理器部件控制。

  21. 异常与中断 • 软件中断 SWI指令用于调用一个操作系统例程的机制。即软件中断进入管理模式,用于请求特定的管理函数。

  22. 异常与中断 • 未定义指令 处理器不能对一条指令译码时使用

  23. 异常与中断 • 复位 处理器上电后执行的第一条指令的位置。该指令使处理器转跳到初始化代码处。

  24. 复位 初始化 N 看门狗复位? Y Boot[1:0] =11? 执行用户代码(片外bank0) N Y Y 硬件配置 (P1.20 P1.26 boot1 boot2) 用户代码有效? 执行用户代码(片内flash) N P1.40=0? 运行ISP服务程序 复位流程处理 • LPC2210/2212/2214复位处理流程

  25. ARM汇编规范 • AREA ARMex, CODE, READONLY • ;命名代码段的名称为ARMex • ENTRY ;标记要执行的第一条指令 • Start MOV R0,#10 ;设置参数 • MOV R1,#3 ; • ADD R0,R0,R1 ;R0=R0+R1 • Stop MOV R0,0x18 ;angel_SWI Exception • LDR R1,=0x20026 ;ADP_stopped exit • SWI 0x123456 ;ARM SWI • END ;文件结束

  26. ARM汇编规范 • 通用格式: • {标号}{指令|指示符|伪指令}{;注释} • 标号:代表一个地址,段内标号的地址值在汇编时确定,段外标号地址值在链接时确定。

  27. ARM指令集 • 寄存器寻址: ADD R0,R1,R2 • 立即寻址:ADD r0,r0,#3 ADD r0,r1,#&0f • 寄存器移位寻址: ADD R0,R1,R2,LSL #3 • 寄存器间接寻址: LDR R0,[R1] • STR R0,[R1]

  28. ARM指令集 • 基址寻址: LDR R0,[R1,#4] • LDR R0,[R1,#4]! • LDR R0,[R1],#4 • STR R0,[R1,#4]!

  29. ARM指令集 • 多寄存器寻址: • LDMIA R0,{R1,R2,R3} • 块拷贝寻址: • STMFD R13!,{R2-R9} /PUSH • LDMIA R0!,{R2-R9} • STMIA R1,{R2-R9} • LDMFD R13!,{R2-R9} /POP

  30. ARM指令集 • 相对寻址: • BL SUBR • ADD RO,R1,R2 • SUBR ADD R1,R2,R3 • MOV PC,R14

  31. ARM指令集 • 条件执行: • 所有的ARM指令可包含一个可选的条件码,只有在满足指定的条件时,带条件码的指令才能执行。 • 如果要指令的结果更新条件标志,需要在指令后面加S. • 一些指令eg:CMP,CMN,TST,TEQ不需要加s

  32. ARM指令集 • EQ:/NE 等于/不等于 • CS/HS: CC/LO 大于或等于/小于 • MI:PL 负/正或零 • VS:VC 溢出/不溢出 • HI:LS 大于/小于或等于 • GE:LT 大于或等于/小于 -带符号 • GT:LE 大于/小于或等于 -带符号

  33. ARM汇编程序设计 • 条件执行程序设计 ADD R0,R1,R2 ; R0= R1+ R2 (不更新) ADDS R0,R1,R2 ; R0= R1+ R2(更新标志位) ADDEQS R0,R1,R2 ;如果Z标志置位,则执行 R0= R1+ R2,更新标志位 CMP R0,R1 ;根据R0- R1的结果更新标志位

  34. ARM汇编程序设计 • 传送类指令程序设计 1、 加载立即数:加载的含义是向寄存器/存储器赋值,而不单指LDR指令的加载指令。 MOV R0,0xff,30 ;R0=1020 等同于: MOV R0,#0x3fc ;R0=1020

  35. ARM汇编程序设计 • 传送类指令程序设计 • 2、使用LDR伪指令加载立即数 LDR Rn,[PC,#offset] ;从地址[PC+offset] 向Rn加载一个字 例: LDR R1,=0x55555555

  36. ARM汇编程序设计 • 传送类指令程序设计 3、使用ADR/ADRL伪指令加载指令 ADR Rn,Lable 使用LDR伪指令加载地址 LDR Rn,=const 或者LDR Rn,= Lable

  37. Thumb于ARM指令集的区别 Thumb具有32位核的所有优点: • 32位寻址空间 • 32位寄存器 • 32位移位器和算术逻辑单元ALU • 32位存储器传送

  38. Thumb于ARM指令集的区别 Thumb指令集于ARM指令集的区别: • 转移指令 • 数据传送指令 • 单寄存器加载和存储指令 • 多寄存器加载和存储指令 Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令

  39. Load-store 指令 • 单寄存器Load-store 指令的寻址方式 回写前变址与前变址及后变址的区别: 回写前变址:在计算出新的地址后,要用新的地址更新基址寄存器的内容,然后再利用新的基址寄存器进行寻址。 前变址:也是利用对基址寄存器的改变值进行寻址,但己知寄存器在操作之后仍然保持原值。 后变址:要更新基址寄存器的内容,但它是利用基址寄存器的原值进行寻址。

  40. 单寄存器Load-store 指令的寻址方式 • 寻址方式

  41. 单寄存器Load-store 指令的寻址方式 • Pre: • r0=0x00000000 • r1=0x00090000 • Mem32[0x00090000]=0x01010101 • Mem32[0x00090004]=0x02020202 • 回写前变址: • post(1) • r0=0x02020202 • r1=0x00090004 • 前变址: • post(2) • r0=0x02020202 • r1=0x00090000 • 后变址: • post(3) • r0=0x01010101 • r1=0x00090004

  42. 多寄存器传送指令的寻址模式 • 格式:<LDM|STM> {<cond>}<寻址方式>Rn{!},<Register>{r^} • 多寄存器传送Load-store指令的寻址模式

  43. 多寄存器传送指令 • 指令格式: LDM{cond}<模式> Rn!,reglist{^} STM{cond}<模式> Rn!,reglist{^} Rn:基址寄存器,模式有8种 reglist:寄存器列表 !:该后缀表示最后的地址写回到Rn ^ :该后缀表示不允许在用户模式或系统模式下使用

  44. 多寄存器传送指令的寻址模式 • 举例图示 • Pre • Mem32[0x8018]=0x03 • Mem32[0x8014]=0x02 • Mem32[0x8010]=0x01 • R0=0x00008010 • R1=0x00000000 • R2=0x00000000 • R3=0x00000000

  45. 多寄存器传送指令的寻址模式 • LDMIA=r0!,{r1-r3} • Pre: Post: • r1=0x00000001, r2=0x00000002, r3=0x00000003 r0=0x801c r0=0x8010

  46. 多寄存器传送指令的寻址模式 • LDMIB=r0!,{r1-r3} • Pre: Post: • r1=0x00000002, r2=0x00000003, r3=0x00000004 r0=0x801c r0=0x8010

  47. 堆栈操作 • ARM体系结构使用多寄存器的Load-store指令完成堆栈操作。 • POP操作(出栈)使用一条多寄存器的Load指令,PUPH操作(入栈)使用一条多寄存器的Store指令。 • ARM制定了ARM-Thumb过程调用标准(ATPCS),定义了例程如何被调用,寄存器如何被分配。在ATPCS中,堆栈被定义为 递减式满堆栈,因此LDMFD和STMFD指令分别用来支持POP和PUPH功能。

More Related