【基于ARM9的嵌入式设计】第2章 ARM体系结构_第1页
【基于ARM9的嵌入式设计】第2章 ARM体系结构_第2页
【基于ARM9的嵌入式设计】第2章 ARM体系结构_第3页
【基于ARM9的嵌入式设计】第2章 ARM体系结构_第4页
【基于ARM9的嵌入式设计】第2章 ARM体系结构_第5页
已阅读5页,还剩103页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 嵌入式系统设计嵌入式系统设计 基于基于arm9arm9微处理器微处理器s3c2410as3c2410a第第2 2章章 armarm体系结构体系结构南阳师范学院南阳师范学院张帅张帅第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.1 arm2.1 arm体系结构简介体系结构简介 arm(advanced risc machines)公司1991年成立于英国剑桥,是专门从事基于risc技术芯片设计开发的公司,主要出售芯片设计技术的授权,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可

2、由合作公司生产各具特色的芯片,半导体生产商从arm公司购买其设计的arm微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的arm微处理器芯片进入市场。 据最新统计,全球有103家巨型it公司在采用arm技术,20家最大的半导体厂商中有19家是arm的用户,包括德州仪器,意法半导体,philips,intel等。arm系列芯片已经被广泛的应用于移动电话、手持式计算机以及各种各样的嵌入式应用领域,成为世界上销量最大的32位微处理器。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统

3、设计 arm授权费iparm 创造和设计ippartner产品,例如:芯片partner把arm ip 和其他 ip 集成进产品oem customer版权费单价oem 用来自arm partner的芯片设计制造最终用户产品业务拓展 / 市场格局第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 采用采用riscrisc架构的架构的armarm微处理器一般具有如下特点:微处理器一般具有如下特点: 支持thumb(16位)/arm(32位)双指令集,能很好的兼容8位/16位器件。thumb指令集比通常的8位和16位cisc/risc处理器具有更好的代码密度; 指令执行采用

4、3级流水线/5级流水线技术; 带有指令cache和数据cache,大量使用寄存器,指令执行速度更快。大多数数据操作都在寄存器中完成。寻址方式灵活简单,执行效率高。指令长度固定(在arm状态下是32位,在thumb状态下是16位); 支持大端格式和小端格式两种方法存储字数据; 支持byte(字节,8位)、halfword(半字,16位)和word(字,32位)三种数据类型。 支持用户、快中断、中断、管理、中止、系统和未定义等7种处理器模式,除了用户模式外,其余的均为特权模式; 处理器芯片上都嵌入了在线仿真ice-rt逻辑,便于通过jtag来仿真调试arm体系结构芯片,可以避免使用昂贵的在线仿真器

5、。另外,在处理器核中还可以嵌入跟踪宏单元etm,用于监控内部总线,实时跟踪指令和数据的执行;l 具有片上总线amba(advanced micro-controller bus architecture)。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 amba定义了3组总线:先进高性能总线ahb(advanced high performance bus);先进系统总线asb(advanced system bus);先进外围总线apb(advanced peripheral bus)。通过amba可以方便地扩充各种处理器及i/o,可以把dsp、其他处理器和i/

6、o(如uart、定时器和接口等)都集成在一块芯片中; arm微处理器包括arm7、arm9、arm9e、arm10e、securcore、cortex系列以及intel的strongarm、xscale和其它厂商基于arm体系结构的处理器,除了具有arm体系结构的共同特点以外,每一个系列的arm微处理器都有各自的特点和应用领域。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.2 arm2.2 arm微处理器结构微处理器结构 经过近20年的发展,arm体系结构发展日趋成熟,功能越来越强,应用领域越来越广泛; 从最初到现在,已经有七个主要的版本:armv1, ar

7、mv2, armv3, armv4, armv5,armv6 ,armv7; armv1系列的cpu主要还是作为研究之用,后面几种都得到了较为广泛的应用; 特别是armv4系列的cpu目前仍然是arm芯片的主要开发版本; 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 arm公司开发了很多系列的arm处理器核,目前最新的系列已经是arm11了,而arm6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是:arm7arm9arm9earm10securcorexscale第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 uarm7微处理器

8、系列 该系列包括arm7tdmi、arm7tdmi-s、带有高速缓存处理器宏单元的arm720t和扩充了jazelle的arm7ej-s。 arm7系列广泛应用于多媒体和嵌入式设备,包括internet设备、网络和调制解调器设备,以及移动电话、pda等无线设备。 arm7tdmi基于体系结构v4版本,支持32位寻址范围; arm7tdmi的后缀意义为:支持高密度16位的thumb指令集;支持片上调试;支持64位乘法;支持embededice观察硬件;arm7tdmi 的可综合(synthesizable)版本(软核),对应用工程师来说其编程模型与arm7tdmi 一致;arm7 t d m i

9、 - s第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 arm7芯片示例第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 u arm9微处理器系列 arm9 系列微处理器在高性能和低功耗特性方面提供最佳的性能,具有以下特点:5级整数流水线,指令执行效率更高;基于体系结构v4版本提供1.1mips/mhz的哈佛结构,支持数据cache和指令cache,具有更高的的指令和数据处理能力;全性能的mmu支持windows ce、linux、palm os等多种主流嵌入式操作系统; 应用领域:无线设备、仪器仪表、安全系统、机顶盒等 第第2 2章章 a

10、rmarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 uarm10系列微处理器 该系列包括arm1020e和arm1022e处理器核,其核心在于使用向量浮点(vfp)单元vfp10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。可以用于视频游戏机和高性能打印机等场合。usecurcore内核系列 该系列涵盖了sc100、sc110、sc200和sc210处理器核。该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全ic开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。第第2 2章章 armarm体系结构体系

11、结构 嵌入式系统设计嵌入式系统设计 ustrongarm微处理器系列 inter strongarm sa-1100处理器是采用arm体系结构高度集成的32位risc微处理器;它融合了inter公司的设计和处理技术以及arm体系结构的电源效率,采用在软件上兼容armv4体系结构、同时采用具有intel技术优点的体系结构;已成功应用于多家公司的掌上电脑系列产品;uxscale处理器 scale 处理器是基于armv5te体系结构的解决方案,是一款全性能、高性价比、低功耗的处理器;xscale 处理器是intel目前主要推广的一款arm微处理器;第第2 2章章 armarm体系结构体系结构 嵌入式

12、系统设计嵌入式系统设计 2.3 arm2.3 arm微处理器的寄存器结构微处理器的寄存器结构 arm处理器共有37个寄存器,被分为若干个组(bank),这些寄器包括:u31个通用寄存器,包括程序计数器(pc指针),均为32位的寄存器。 u6个状态寄存器,用以标识cpu的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.3.1 处理器运行模式arm微处理器支持7种运行模式,分别为: u usr(用户模式):arm处理器正常程序执行模式。u fiq(快速中断模式):用于高速数据传输或通道处理 u irq(

13、外部中断模式):用于通用的中断处理 u svc(管理模式):操作系统使用的保护模式 u abt (数据访问终止模式): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 u sys(系统模式): 运行具有特权的操作系统任务。 u und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 注: 大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 特

14、权模式第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 异常模式第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 用户与系统模式第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.3.2 处理器工作状态 arm处理器有32位arm和16位thumb两种工作状态。u在32位arm状态下执行字对齐的arm指令u在16位thumb状态下执行半字对齐的thumb指令 在thumb状态下,程序计数器pc(program counter)使用位1选择另一个半字。 注意: 两个状态之间的切换并不影响处理器模式或寄存器内容。第第2

15、 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 使用bx指令将arm内核的操作状态在arm状态和thumb状态之间进行切换,程序如下所示。;从arm状态切换到thumb状态 ldr r0,=lable+1 bx r0;从thumb状态切换到arm状态 ldr r0,=lable bx r0地址最低位为1,表示切换到thumb状态地址最低位为0,表示切换到arm状态跳转地址标号第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.3.3 arm处理器的寄存器组织 arm处理器的37个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用

16、与处理器状态和工作模式有关。如图2.3.1所示,每种处理器模式使用不同的寄存器组。其中15个通用寄存器(r0r14)、1或2个状态寄存器和程序计数器是通用的。u31 个通用32位寄存器,包括程序计数器pc: 未分组寄器r0-r7; 分组寄存器r8-r14; 程序计数器pc(r15);u6 个状态寄存器;可访问的寄存器取决于处理器的模式第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构

17、体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器r0(a1)r0r1(a2)r1r2(a3)r2r3(a4)r3r4(v1)r4r5(v2)r5r6(v3)r6r7(v4)r7r8(v5)r8r8_fiqr9(sb,v6)r9r9_fiqr10(sl,v7)r10r10_

18、fiqr11(fp,v8)r11r11_fiqr12(ip)r12r12_fiqr13(sp)r13r13_svcr13_abtr13_undr13_irqr13_fiqr14(lr)r14r14_svcr14_abtr14_undr14_irqr14_fiqr15(pc)r15状态寄存器cpsrcpsrspsr无spsr_abtspsr_abtspsr_undspsr_irqspsr_fiq一般的通用寄存器 寄存器r13、r14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。r14_fiqr14_irqr14_undr14_abtr14_svcr14r13_

19、fiqr13_irqr13_undr13_abtr13_svcr13第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 lable程序a程序br14r14r14寄存器与子程序调用寄存器与子程序调用: :bl lable地址a?mov pc,lrr14(地址a)lable?1.程序a执行过程中调用程序b;操作流程2.程序跳转至标号lable,执行程序b。同时硬件将“bl lable”指令的下一条指令所在地址存入r14;3.

20、程序b执行最后,将r14寄存器的内容放入pc,返回程序a;第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 读读r15r15的限制的限制 正常操作时,从r15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条arm指令的长度)。ldr r0,pc?pcpc-4pc-8正在执行正在译码正在取指流水线状态地址程序代码第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 程序状态

21、寄存器(cpsr) arm内核包含1个cpsr和5个供异常处理程序使用的spsr。cpsr反映了当前处理器的状态,其包含:u4个条件代码标志(负(n)、零(z)、进位(c)和溢出(v);u2个中断禁止位,分别控制一种类型的中断;u5个对当前处理器模式进行编码的位;u1个用于指示当前执行指令(arm还是thumb)的位。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 每个异常模式还带有一个程序状态保存寄存器(spsr),它用于保存在异常事件发生之前的cpsr。cpsr和spsr通过特殊指令进行

22、访问。注意: 如果通过程序修改cpsr寄存器中的模式位进入异常模式,那么硬件将不会把cpsr保存至spsr中.第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 条件代码标志 大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带s后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志(比如cmp、tst、teq等)。 n、 z、 c和v位都是条件代码标志。通过算术操作、逻辑操作、msr或者ldm指令可以对这些位进行设置。所有arm指令都可按条件来执行,而thumb指令中只有分支指令可按条件执行。举例: add r0, r0, r

23、1 adds r0, r0, r1 addeqs r0, r0, r1第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 控制位 cpsr的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。 它们分别是:u中断禁止位;ut位;u模式位。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 中断禁止位包括i和f位:u当i位置位时,irq中断被禁止;u当f位置位时,fiq中断被禁止。 t位反映了正在操作的状态:u当t位置位时,处理器正在thumb状态下运行;u当t位清零时,处理器正在arm状态下运行。 模

24、式位包括m4、m3、m2、m1和m0,这些位决定处理器的操作模式。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 程序状态寄存器 条件位:条件位: n = 1-n = 1-结果为负结果为负,0-,0-结果为正或结果为正或0 0 z = 1-z = 1-结果为结果为0,0-0,0-结果不为结果不为0 0 c =1-c =1-进位,进位,0-0-借位借位 v =1-v =1-结果溢出,结果溢出,0 0结果没溢出结果没溢出q q 位:位: 仅仅arm 5te/jarm 5te/j架构支持架构支持

25、指示增强型指示增强型dspdsp指令是否溢出指令是否溢出j j 位位 仅仅arm 5te/jarm 5te/j架构支持架构支持 j = 1: j = 1: 处理器处于处理器处于jazellejazelle状态状态中断禁止位:中断禁止位: i = 1: i = 1: 禁止禁止 irq.irq. f = 1: f = 1: 禁止禁止 fiq.fiq.t bitt bit 仅仅arm xtarm xt架构支持架构支持 t = 0: t = 0: 处理器处于处理器处于 arm arm 状态状态 t = 1: t = 1: 处理器处于处理器处于 thumb thumb 状态状态modemode位位( (

26、处理器模式位处理器模式位):): 0b100000b10000useruser 0b100010b10001fiqfiq 0b100100b10010irqirq 0b100110b10011supervisorsupervisor 0b101110b10111abortabort 0b110110b11011undefinedundefined 0b111110b11111systemsystem2731n z c v q2867i f t mode1623 815 54024fsxc u n d e f i n e dj第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统

27、设计 2.4 arm2.4 arm微处理器的异常处理微处理器的异常处理 在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件使正常的程序产生暂时的停止时,称之为异常。 在处理异常之前,当前处理器的状态必须保留,当异常处理完成之后,恢复保留的当前处理器状态,继续执行当前程序。 多个异常同时发生时,处理器将会按固定的优先级进行处理。2.4.1 arm体系结构的异常类型 arm体系结构支持7种类型的异常,异常类型、异常处理模式和优先级如表2.4.1所示。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(exception vectors)。第第2 2章章

28、 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 异常类型异常进入模式地址(异常向量)优先级复位复位管理模式0 x0000,00001(最高)未定义指令未定义指令未定义模式0 x0000,00046(最低)软件中断软件中断管理模式0 x0000,00086(最低)指令预取中止中止(预取指令)中止模式0 x0000,000c5数据中止中止(数据)中止模式0 x0000,00102irq(外部中断请求)irqirq0 x0000,00184fiq(快速中断请求)fiqfiq0 x0000,001c3表2.4.1 arm体系结构的异常类型和异常处理模式第第2 2章章 armarm体系结构

29、体系结构 嵌入式系统设计嵌入式系统设计 2.4.2 异常类型的含义(1)复位 当处理器的复位电平有效时,产生复位异常,arm处理器立刻停止执行当前指令。复位后,arm处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行(从地址0 x00000000或0 xffff0000开始执行指令)。(2)未定义指令异常 当arm处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。当arm处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协

30、处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。(3)软件中断异常(software interrupt,swi) 软件中断异常由执行swi指令产生,可使用该异常机制实现系统功能调用,用于用户模式下的程序调用特权操作指令,以请求特定的管理(操作系统)函数。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 (4)指令预取中止 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出存储器中止(abort)信号,但当预取的指令被执行时,才会产生指令预取中止异常。(5)数据中止(数据访问存储器中止) 若处理器数据访问指令的地

31、址不存在,或该地址不允许当前指令访问时,产生数据中止异常。存储器系统发出存储器中止信号。响应数据访问(加载或存储)激活中止,标记数据为无效。在后面的任何指令或异常改变cpu状态之前,数据中止异常发生。(6)外部中断请求(irq)异常 当处理器的外部中断请求引脚有效,且cpsr中的i位为0时,产生irq异常。系统的外设可通过该异常请求中断服务。irq异常的优先级比fiq异常的低。当进入fiq处理时,会屏蔽掉irq异常。(7)快速中断请求(fiq)异常 当处理器的快速中断请求引脚有效,且cpsr中的f位为0时,产生fiq异常。fiq支持数据传送和通道处理,并有足够的私有寄存器。第第2 2章章 ar

32、marm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.4.3 异常的响应过程当一个异常出现以后,arm微处理器会执行以下几步操作: 将下一条指令的地址存入相应连接寄存器lr,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从arm状态进入,lr寄存器中保存的是下一条指令的地址(当前pc4或pc8,与异常的类型有关);若异常是从thumb状态进入,则在lr寄存器中保存当前pc的偏移量。 将cpsr状态传送到相应的spsr中。 根据异常类型,强制设置cpsr的运行模式位。 强制pc从相关的异常向量地址取下一条指令执行,跳转到相应的异常处理程序。还可以设置中断禁止位,以禁止中断发生

33、。注:异常总是在arm状态中进行处理。如果异常发生时,处理器处于thumb状态,则当异常向量地址加载入pc时,处理器自动切换到arm状态。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 异常处理完毕之后,arm微处理器会执行以下几步操作从异常返回: 将连接寄存器lr的值减去相应的偏移量后送到pc中。 将spsr内容送回cpsr中。 若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。注:恢复cpsr的动作会将t、f和i位自动恢复为异常发生前的值。第第2 2章章 armarm体系结构体系结

34、构 嵌入式系统设计嵌入式系统设计 程序airq服务程序系统模式irq模式程序寄存器组图示进入异常过程1. 程序在系统模式下运行用户程序,假定当前处理器状态为thumb状态、允许irq中断;2. 用户程序运行时发生irq中断,硬件完成以下动作:lr_sysspsr_irqlr_irqlrpccpsrspsrsys1?0. . .? ? ? ?modtfi. . .n z c v置位i位(禁止irq中断)清零t位(进入arm状态)设置mod位,切换处理器模式至irq模式将下一条指令的地址存入irq模式的lr寄存器将cpsr寄存器内容存入irq模式的spsr寄存器将跳转地址存入pc,实现跳转irq0

35、?1. . .? ? ? ?backaddrjumpaddrjumpsys1?0. . .?“?”表示对该位不关心第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 在异常处理结束后,异常处理程序完成以下动作:程序airq服务程序系统模式irq模式程序寄存器组图示退出异常过程lr_sysspsr_irqlr_irqlrpccpsrspsrsys1?0. . .? ? ? ?modtfi. . .n z c v将spsr寄存器的值复制回cpsr寄存器;将lr寄存的值减去一个常量后复制到pc寄存器,跳转到被中断的用户程序。irq0?1. . .? ? ? ?backaddr

36、jumpaddrreturnsys1?0. . .?sys1?0. . .? ? ? ?backaddr-4jump“?”表示对该位不关心第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:异常优先级异常优先级异常类型优先级复位1(最高优先级)数据中止2fiq3irq4预取中止5未定义指令6swi7(最低优先级)优先级降低第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.4.4 应用程序中的异常处理 在应用程序的设计中,异常处理采用的方式是在异常向量表中的特定位置放置一条跳转指

37、令,跳转到异常处理程序。当arm处理器发生异常时,程序计数器pc会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.5 arm2.5 arm微处理器指令系统微处理器指令系统2.5.1 基本寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。arm处理器具有9种基本寻址方式。 1.寄存器寻址;2.立即寻址; 3.寄存器移位寻址;4.寄存器间接寻址; 5.基址寻址;6.多寄存器寻址; 7.堆栈寻址;8.块拷贝寻址; 9.相对寻址。第第2 2章章 ar

38、marm体系结构体系结构 嵌入式系统设计嵌入式系统设计 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: mov r1,r2mov r1,r2 ;将r2的值存入r1 sub r0,r1,r2sub r0,r1,r2 ;将r1的值减去r2的值,结果保存到r0 0 xaa0 x55r2r11.寄存器寻址mov r1,r20 xaa第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作

39、数(这样的数称为立即数)。立即寻址指令举例如下: subssubsr0,r0,#1r0,r0,#1 ;r0减1,结果放入r0,并且影响标志位movmovr0,#0 xff000r0,#0 xff000 ;将立即数0 xff000装入r0寄存器 0 x55r0mov r0,#0 xff00程序存储2.立即寻址mov r0,#0 xff000 xff00从代码中获得数据第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 寄存器移位寻址是arm指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指

40、令举例如下:movmovr0,r2,lsl #3r0,r2,lsl #3 ;r2的值左移3位,结果放入r0, ;即是r0=r28 andsandsr1,r1,r2,lsl r3r1,r1,r2,lsl r3 ;r2的值左移r3位,然后和r1相 ;“与”操作,结果放入r1,并影响标志位0 x55r0r20 x013.寄存器移位寻址mov r0,r2,lsl #30 x080 x08逻辑左移3位第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针

41、。寄存器间接寻址指令举例如下: ldrldrr1,r2r1,r2 ;将r2指向的存储单元的数据读出,保存在r1中 swpswpr1,r1,r2r1,r1,r2;将寄存器r1的值和r2指定的存储;单元的内容交换 0 x55r0r20 x400000000 xaa0 x400000004.寄存器间接寻址ldr r0,r20 xaa第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: ldrldrr

42、2,r3,#0 x0cr2,r3,#0 x0c;读取r3+0 x0c地址上的存储单元的内容,放入r2 str strr1,r0,#-4!r1,r0,#-4! ;先r0=r0-4,然后把r1的值寄存 ;到保存到r0指定的存储单元 5.基址寻址0 x55r2r30 x400000000 xaa0 x4000000cldr r2,r3,#0 x0c0 xaa将r3+0 x0c作为地址装载数据第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: ldmialdmia

43、r1!,r2-r7,r12 r1!,r2-r7,r12 ;将r1指向的单元中的数据读出到 r2r7、r12中(r1自动加1) stmiastmia r0!,r2-r7,r12 r0!,r2-r7,r12 ;将寄存器r2r7、r12的值保 ;存到r0指向的存储单元中 ;(r0自动加1)注:使用多寄存器寻址指令时,寄存器子集的顺序是由小到大排列,连续的寄存器用“-”连接,否则用“,”分隔书写。0 x40000000r1r20 x?0 x010 x400000000 x?r3r40 x?r60 x?0 x020 x030 x040 x400000040 x400000080 x4000000c存储器

44、6.多寄存器寻址ldmia r1!,r2-r4,r6 0 x010 x020 x030 x040 x40000000第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”和“先进后出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈7.堆栈寻址第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 栈底栈顶栈区sp堆栈存储

45、区栈顶栈底栈区sp向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 栈顶sp栈顶sp栈底空堆栈栈底满堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 0 x123456780 x12345678栈顶sp0 x12345678栈顶sp压栈压栈第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如ldmfa、stmfa

46、等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如ldmea、stmea等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如ldmfd、stmfd等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如ldmed、stmed等。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 快拷贝寻址指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如:stmiastmiar0!,r1-r7r0!,r1-r7;将r1r7的数据保存到存储器中。;存储指针在保存第一个值之后增加,增长方向为向上增长;stmibstmibr0!,r1-r

47、7r0!,r1-r7;将r1r7的数据保存到存储器中。;存储指针在保存第一个值之前增加,增长方向为向上增长 8.块拷贝寻址第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 相对寻址是基址寻址的一种变通。由程序计数器pc提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:blsubr1;调用到subr1子程序beqloop;条件跳转到loop标号处.loopmovr6,#1.subr1. 9.相对寻址第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 简单的arm程序:;文件名:test1.

48、s ;功能:实现两个寄存器相加 ;说明:使用armulate软件仿真调试 areaexample1,code,readonly ;声明代码段example1 entry ;标识程序入口,相当于main() code32 ;声明32位arm指令start movr0,#0 ;设置参数 movr1,#10loopbladd_sub ;调用子程序add_sub bloop ;跳转到loopadd_sub addsr0,r0,r1 ;r0 = r0 + r1 movpc,lr ;子程序返回 end ;文件结束,必须与entry配合使用 使用“;”进行注释标号顶格写实际代码段声明文件结束第第2 2章章

49、armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2.5.2 arm 指令集1 1指令格式指令格式(1)基本格式 arm指令的基本格式如下: s , 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcodeopcode:指令助记符;condcond:执行条件;s s:是否影响cpsr寄存器的值;rdrd:目标寄存器; rnrn:第1个操作数的寄存器;operand2operand2:第2个操作数;第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 arm指令的基本格式如下:arm指令集第2个操作数: s , 灵活的使用第2个操作数“operand2

50、operand2”能够提高代码效率。它有如下的形式:rm寄存器方式;rm,shift寄存器移位方式;第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。例如: subr1,r1,r2 movpc,r0rm,shift寄存器移位方式 将寄存器的移位结果作为操作数,但rm值保持不变,移位方法如下:操作码说明操作码说明asr #n算术右移n位ror #n循环右移n位lsl #n逻辑左移n位rrx带扩展的循环右移1位lsr #n逻辑右移n位type rstype为移位的一种类型,rs为偏移量寄存器,低8位有效。第第2 2章

51、章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 rm,shift寄存器移位方式例如: addr1,r1,r1,lsl #3;r1=r1+r1*8=9r1 subr1,r1,r2,lsr r3;r1=r1-(r2/2r3)第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 (2)条件码 几乎所有的arm指令都包含一个可选择的条件码,即。使用指令条件码,可实现高效的逻辑操作,提高代码效率。u 当处理器工作在arm状态时,几乎所有的指令均根据cpsr中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。u 每一条arm指

52、令包含4位的条件码,位于指令的最高4位31:28。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令b可以加上后缀eq变为beq表示“相等则跳转”,即当cpsr中的z标志置位时发生跳转。arm条件码如表2.5.1所示。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 表2.5.1 arm条件码操作码条件助记符标志含义0000eqz=1相等0001nez=0不相等0010cs/hsc=1无符号数大于或等于0011cc/loc=0无符号数小于0100min=1负数0101pln=0正数或零0110vsv=1溢出

53、0111vcv=0没有溢出1000hic=1,z=0无符号数大于1001lsc=0,z=1无符号数小于或等于1010gen=v有符号数大于或等于 1011ltn!=v有符号数小于 1100gtz=0,n=v有符号数大于 1101lez=1,n!=v有符号数小于或等于 1110al任何无条件执行 (指令默认条件) 1111nv任何从不执行(不要使用) 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 条件码应用举例比较两个值大小,并进行相应加1处理c代码为:if(ab) a+;else b+;对应的arm指令为(其中r0为a,r1为b)cmp r0,r1addhi r0

54、,r0,#1addls r1,r1,#1第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 若两个条件均成立,则将这两个数相加c代码为:if(a!=10)&(b!=20) a=a+b;对应arm指令为:cmp r0,#10cmpne r1,#20addne r0,r0,r1第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 2 2armarm存储器访问指令存储器访问指令 arm微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。 arm的加载/存储指令是可以实现字

55、、半字、,无符/有符字节操作;批量加载/存储指令可实现一条指令加载/存储多个寄存器的内容. swp指令是一条寄存器和存储器内容交换的指令,可用于信号量操作等。 arm存储访问指令表如表2.5.2所示。第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 助记符说明操作条件码位置ldrrd,addressing 加载字数据 rdaddressing,addressing 索引 ldrcond ldrbrd,addressing 加载无符字节数据 rdaddressing,addressing 索引 ldrcondb ldrtrd,addressing 以用户模式加载字数据

56、rdaddressing,addressing 索引 ldrcondt ldrbtrd,addressing 以用户模式加载无符号字数据 rdaddressing,addressing 索引ldrcondbt ldrhrd,addressing 加载无符半字数据 rdaddressing,addressing 索引 ldrcondh 表2.5.2 arm 存储访问指令表第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 strbrd,addressing 存储字节数据 addressingrd,addressing 索引 strcondb strtrd,addressi

57、ng 以用户模式存储字数据 addressingrd,addressing 索引 strcondt srtbtrd,addressing 以用户模式存储字节数据 addressingrd,addressing 索引 strcondbt strhrd,addressing 存储半字数据 addressingrd,addressing 索引 strcondh ldmmode rn!,reglist 批量(寄存器)加载 reglistrn,rn 回存等 ldmcondmore stmmode rn!,rtglist 批量(寄存器)存储 rn reglist,rn 回存等 stmcondmore sw

58、p rd,rm,rn 寄存器和存储器字数据交换 rdrd,rnrm(rnrd 或rm) swpcond swpb rd,rm,rn 寄存器和存储器字节数据交换 rdrd,rnrm(rnrd 或rm) swpcondb 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 lldr和str单寄存器加载/存储指令 ldr指令用于从内存中读取单一字或字节数据存入寄存器中,str指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下: ldrcondtrd, ;将指定地址上的字数据读入rd strcondtrd, ;将rd中的字数据存入指定地址 ldrcondbtrd, ;

59、将指定地址上的字节数据读入rd strcondbtrd, ;将rd中的字节数据存入指定地址 其中,t为可选后缀。若指令有t,那么即使处理器是在特权模式下,存储系统也将访问看成是在用户模式下进行的。t在用户模式下无效,不能与前索引偏移一起使用t。 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 ldr/str指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: 立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:ldr r1,r0

60、,#0 x12 寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:ldr r1,r0,r2 寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:ldr r1,r0,r2,lsl #2 第第2 2章章 armarm体系结构体系结构 嵌入式系统设计嵌入式系统设计 从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: 零偏移,rn的值作为传送数据的地址,即地址偏移量为0。 如:ldr rd,rn 前索引偏移。在数据传送前,将偏移量加到rn中,其结果作为传送数据的存储地址。若使用“!”号,则结果写回rn中。如:ldr rd,rn,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论