ARM9体系结构ARM9内部资源ARM9内部结构教程.pptx

上传人:赵** 文档编号:72527331 上传时间:2023-02-12 格式:PPTX 页数:108 大小:1.03MB
返回 下载 相关 举报
ARM9体系结构ARM9内部资源ARM9内部结构教程.pptx_第1页
第1页 / 共108页
ARM9体系结构ARM9内部资源ARM9内部结构教程.pptx_第2页
第2页 / 共108页
点击查看更多>>
资源描述

《ARM9体系结构ARM9内部资源ARM9内部结构教程.pptx》由会员分享,可在线阅读,更多相关《ARM9体系结构ARM9内部资源ARM9内部结构教程.pptx(108页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第2章 ARM体系结构硅谷芯微硅谷芯微 技术贡献技术贡献网址:网址:.threeway.ccARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第1页!本章中,将着眼于ARM9内核、处理器状态与模式、内部寄存器、程序状态寄存器、异常、中断及其向量表和存储系统的学习,这是成为一个应用工程师必备的基础。本章中程序范例除非特别声明,否则处理器均处于ARM状态,执行字方式的ARM指令。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第2页!第2章 目录q1.ARM9TDMI q2.ARM的模块、内核和功能框图q3.ARM处理器状态q4.A

2、RM处理器模式q5.ARM内部寄存器q6.当前程序状态寄存器q7.ARM体系的异常、中断及向量表q8.ARM体系的存储系统q9.课后练习 ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第3页!2.1.1 存储器的字与半字(1)ARM处 理 器 使 用 了 冯 诺 依 曼(von Neumann)结构,提供单一的主存接口。比如ARM7处理器就是标准的冯诺依曼(von Neumann)结构。而ARM9处理器的CPU/MMU/CACHE系统是指令和数据分开的,不过通常也还是提供单一的主存接口,因此ARM9处理器也可以看成是哈佛(Harvard)结构。从大的方面讲,

3、无论哪种ARM处理器结构,都可以看成是是冯诺依曼(von Neumann)结构,指令和数据共用一条32位总线,因此只有装载、存储和交换指令可以对存储器中的数据进行访问。ARM处理器直接支持8位字节、16位半字或者32位字的数据类型。其中,以能被4整除的地址开始连续的4个字节构成1个字,字的数据类型为4个连续的字节。从偶数地址开始连续的2个字节构成一个半字,半字的数据类型为2个连续的字节。ARM指令的长度刚好是1个字,Thumb指令的长度刚好是一个半字。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第4页!2.1.1 存储器的字与半字(3)注意:ARM处理器直

4、接支持对齐的半字或字数据的存取,也就是可以使用一条相应的指令来实现对应操作(详见第三章)。如果访问非对齐的半字或字数据,将需要多条指令组合才能实现对应的操作,这对程序的执行效率影响较大。因此,在C语言编程中,定义的多字节变量或结构体,最好使其为对齐存放。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第5页!2.1.2 5级流水线(2)图2.1 ARM9的5级指令流水线ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第6页!2.1.2 5级流水线(4)完成执行时,才开始对“指令4”的取指处理。由此可见,与PC有关的阶段只有取指

5、、译码和执行,即执行PC-8处的指令的同时,对PC-4处的指令进行译码操作,对PC处的指令进行取指操作。而访存与回写则与PC无关。图2.2 ARM9的5级最佳流水线指令执行顺序 ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第7页!2.1.2 5级流水线(6)下面通过示例程序来进一步了解实际读取PC时要注意的问题,如程序清单2.1所示:程序清单2.1 PC的读取 假设地址0 x4000上的ADD指令是处理器“正在执行”的第1条指令,该指令的功能是把PC+4的值放到PC寄存器里(通常用于程序跳转)。由于PC总是指向第三条指令,即0 x4008就是“正在取指”的

6、指令的地址,从而可以得出地址:PC+4=0 x4008+4=0 x400C,于是将地址值0 x400C写入PC寄存器,千万不要误认为是写入地址值0 x4004。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第8页!2.2 ARM的模块、内核和功能框图 ARM的模块框图见图2.3,功能框图见图2.4,内核框图见图2.5。ARM模块包含了CPU协处理器接口信号、读与写数据总线(WDATA和RDATA)、Embedded ICE硬件仿真功能模块和片上调试系统等必备的功能。数据总线上没有双向路径,图2.3对这些作了简化。如图2.4所示,ARM微处理器与传统的8位单片

7、机相比,在很多地方都有相似之处。例如,同样也包含了时钟、存储器接口、存储器管理接口、总线控制、仲裁等基本功能模块;所不同的是增加了功能更加强大的协处理器接口、调试接口、同步的Embedded ICE-RT扫描调试访问接口等。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第9页!图2.4 ARM功能框图 ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第10页!2.3 ARM处理器状态 嵌入式系统在某些应用场合对存储成本或空间要求比较苛刻,为了让用户更好地控制代码量,于是设计了2套指令系统,分别为ARM指令集和Thumb指令集

8、。其中ARM指令集为32位(字)长度,具有最完整的功能;Thumb指令集为16位(半字)长度,能实现ARM指令集的大部分功能。在功能上可以认为Thumb是ARM指令集的子集(见图2.6),图2.6 两种指令集的关系ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第11页!只有当处理器处于ARM状态时,ARM指令集才有效,反之只能使用Thumb指令集。当处理器处于Thumb状态,处理器“只能”执行16位的Thumb指令;也就是说,无论处理器处于何种状态,ARM指令集与Thumb指令集不能同时混合使用。从一个ARM例程调用另一个Thumb例程时,内核必须切换状态,

9、反之亦然。下面使用BX分支指令将ARM内核的操作状态在ARM和Thumb之间进行切换,见程序清单2.2。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第12页!注意:BX指令是在程序跳转的同时进行状态切换。前面提到,在程序发生跳转时流水线会被清空,所以使用BX指令进行状态切换后,流水线中按原来处理器状态进行取指和译码的指令(与当前处理器状态不符的指令)会被清除,也就不会引起处理器的错误。在第三章会介绍一条可以直接修改CPSR/SPSR寄存器的“MSR写状态寄存器指令”,通过它来修改T位可以实现状态切换;但是,因为它不会清空流水线,所以这种方法是不安全的。因此

10、强烈推荐使用BX指令进行安全的状态切换。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第13页!表2.2 ARM处理器模式ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第14页!2.4.1异常模式(2)每一种异常与处理器的一种模式相对应,一旦应用程序发生特定的异常中断时,处理器便进入相应的异常模式,处理器内核立即跳转到向量表中的某个入口地址,执行相应的处理程序。与此同时,在每一种异常模式中都有对应的寄存器,供相应的异常处理程序使用,从而可以保证处理器在进入异常模式时,用户模式下的寄存器不被破坏。究竟何时进入异常模式,具体规

11、定如下:处理器复位之后进入管理模式,操作系统内核通常处于管理模式;当处理器访问存储器失败时,进入数据访问中止模式;当处理器遇到不支持的指令时,进入未定义模式;中断模式与快速中断模式分别对ARM处理器两种不同级别的中断作出响应。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第15页!2.5 ARM内部寄存器 在ARM处理器内部共有37个用户可访问的32位寄存器,其中有6个32位宽的状态寄存器目前只使用了其中12位。37个寄存器分别为:31个通用32位寄存器:R0 R15、R13_svc、R14_svc、R13_abt、R14_abt、R13_und、R14_u

12、nd、R13_irq、R14_irq、R8_fiq、R9_fiq、R10_fiq、R11_fiq、R12_fiq、R13_fiq、R14_fiq;6个状态寄存器:CPSR、SRSR_svc、SPSR_abt、SPSR_und、SPSR_irq、SPSR_fiq。注意:这些寄存器不能在同一时间同时被访问,究竟何时才能访问上述寄存器完全取决于处理器状态和处理器模式。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第16页!2.5.1 ARM状态下的寄存器(2)模式相关的寄存器组,如表2.3所列为每种模式所能访问的寄存器。表2.3 ARM状态各种模式下的寄存器ARM

13、9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第17页!2.5.1 ARM状态下的寄存器(4)(2)一般的通用寄存器:寄存器R0 R7为保存数据或地址值的通用寄存器,这是因为在任何处理器模式下,R0 R7 中的每一个寄存器都是同一个32位物理寄存器。寄存器R0 R7是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。寄存器R8 R14所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用寄存器R8 R14。寄存器R8 R12有2组不同的物理寄存器,如表2.4所列。其中,一组用于除FIQ模式之外的所有寄

14、存器模式(R8 R12),另一组用于FIQ模式(R8_fiq R12_fiq)。在进入FIQ模式后就不必为保护寄存器而浪费时间,程序可以直接使用R8_fiq R12_fiq来执行操作了,从而实现快速的中断处理。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第18页!2.5.1 ARM状态下的寄存器(6)(3)堆栈指针R13(SP):严格来说,“堆栈”实际上是指“堆”和栈,这是两个不同的概念,但是为了符合通常的表述习惯,在以后的内容中如果没有特别指出,堆栈一词仅表示“栈”的意思。堆栈是在内存中划分出的一段存储空间,这个存储空间就像是一个大的数据仓库,用于暂时保

15、存一些数据。堆栈操作通常会发生在子程序调用、异常发生或是程序运行过程中寄存器数量不够时。在前两种情况下,通常是把子程序或者异常服务程序将要用到的寄存器内容保存到堆栈中。在子程序或者异常处理程序结束返回时再将保存在堆栈中的值重载到相应的寄存器中,这样便可确包原有的程序状态不会被破坏。还有一种情况是,如果程序运行过程中,局部变量的数量太多,以至于处理器内部的寄存器无法全部装下ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第19页!2.5.1 ARM状态下的寄存器(8)表2.5 堆栈指针 ARM处理器的堆栈操作具有非常大的灵活性,根据堆栈指针的增减方向和指针指向的

16、存储单元是否为空,共有4种堆栈方式:满递增、空递增、满递减和空递减。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第20页!2.5.1 ARM状态下的寄存器(10)在结构上R14有2种特殊功能:当使用BL指令调用子程序时,返回地址将自动存入R14中。在子程序结束时,将R14复制到程序计数器PC中实现子程序的返回。通常有2种方式实现子程序的返回操作。执行下列任何一条指令:在子程序入口,使用STMFD指令将R14和其他寄存器的内容保存到堆栈SP中:ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第21页!2.5.1 ARM状态下

17、的寄存器(12)(5)程序计数器R15(PC):寄存器R15保存程序计数器(PC),也就是说,R15总是指向正在“取指”的指令。读R15:由于ARM指令是字对齐的,PC值的结果bit1:0总为0。当使用STR或STM指令保存R15时,R15保存的可能是当前指令地址加8字节,后者是当前指令地址加12字节(将来还可能出现别的数据)。偏移量究竟是8还是12(或是其他数值)取决于ARM的芯片设计。对于某个具体的芯片,它是个常量。由于上述原因,最好避免使用STR和STM指令来保存R15,否则会影响程序的可移植性。如果确实很难做到,那么应当在程序中使用一些合适的指令代码来确定当前使用的芯片所使用的便移量。

18、例如,使用程序清单ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第22页!2.5.1 ARM状态下的寄存器(14)(6)CPSR与SPSR:所有模式全部共享一个程序状态寄存器CPSR,ARM内核就是通过使用CPSR来监视和控制内部操作的。在异常模式中,允许访问用于保存CPSR当前值的备份程序状态寄存器SPSR,每种异常都有对应的SPSR,它们分别是SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq、SPSR_fiq,如表2.7所列。表2.7 CPSR与SPSR状态寄存器ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您

19、现在浏览的是第23页!2.5.1 ARM状态下的寄存器(16)CPSR与SPSR相互之间的关系:当一个特定的异常中断发生时,将CPSR的当前值保存到相应异常模式下的SPSR,然后设置CPSR为相应的异常模式;从异常中断程序退出返回时,可通过保存在SPSR中的值来恢复CPSR。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第24页!2.5.2 Thumb状态下的寄存器(1)(1)各种模式下实际访问的寄存器:Thumb状态寄存器集是ARM状态集的子集,程序可直接访问:8个通用寄存器(R0R7);程序计数器(PC);堆栈指针(SP);链接寄存器(LR);程序状态寄

20、存器(CPSR);每个特权模式都有分组的SP和LR,Thumb寄存器的详细情况见表2.8。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第25页!2.5.2 Thumb状态下的寄存器(3)(2)一般的通用寄存器:在汇编语言中寄存器R0 R7为保存数据或地址值的通用寄存器,对于任何处理器模式,它们中的每一个都对应于相同的32位物理寄存器。它们是完全通用的寄存器,不会被体系结构做为特殊的用途,并且可用于任何使用通用寄存器的指令。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第26页!2.5.2 Thumb状态下的寄存器(5)(

21、4)链接寄存器LR:链接寄存器LR对应ARM状态寄存器R14,在结构上有2种功能,详见2.5.1小节关于“链接寄存器R14”部分。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第27页!2.5.2 Thumb状态下的寄存器(7)图2.7 状态切换过程 Thumb状态SP映射到ARM状态R13;Thumb状态LR映射到ARM状态R14;Thumb状态PC映射到ARM状态R15(PC)。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第28页!2.5.2 Thumb状态下的寄存器(9)(6)Thumb状态中访问高端寄存器:Thu

22、mb指令集并不能访问寄存器机构中的所有寄存器,但所有数据处理处理指令都可以访问R0 R7;然而,可以对R8 R12访问的指令只有以下几条,它们分别为MOV、ADD、CMP。可以使用MOV指令的特殊变量将一个值从低端寄存器(R0 R7)转移到高端寄存器,或者从高端寄存器转移到低端寄存器。CMP指令可用于比较高端寄存器和低端寄存器的值。ADD指令可用于将高端寄存器的值与低端寄存器的值相加。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第29页!图2.9 程序状态寄存器的格式注意:为了保持与将来的ARM处理器兼容,并且作为一种良好的习惯,在更改CPSR时,建议使用

23、读修改写的方法。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第30页!2.6.1 条件代码标志(2)进位标志C:使用加法运算(包括CMN指令),b31位产生进位时,C=1;否则C=0。使用减法运算(包括CMP指令),b31位产生借位时,C=0;否则,C=1。对于结合移位操作的非加法/加法指令,C为b31位最后的移出值,其他指令C通常不变;溢出标志V:使用加法/减法运算,当发生有符号溢出时,V=1;否则V=0。其他指令V通常不变。在ARM状态中,所有指令都可按条件来执行。在Thumb状态中,只有分支指令可条件执行。ARM9体系结构,ARM9内部资源,ARM9

24、内部结构教程共108页,您现在浏览的是第31页!2.6.2 控制标志位(2)注意:当I或者F控制位为0时,则允许IRQ或者FIQ中断(使能),即CPU内核可以响应中断了。那么到底需要满足什么条件,CPU才能响应外设中断?到底需要满足什么条件,CPU外设才能产生中断?这里的关键词是“响应中断”、“响应外设中断”与“产生中断”,具体的内容可以参考中断相关章节。在后面的学习中将会了解到,以中断为主线贯穿整个CPU渗透到各个功能不见,起到了极其重要的纽带作用,由内核到外设以中断为主干线、外设为枝构成“中断关联多叉树”,这是学习和设计ARM嵌入式应用系统的关键所在,希望能够引起大家的关注。剩下的问题比较

25、简单,那就是如何使用外设。显而易见,只要抓住了中断和外设的使用,一切问题将迎刃而解。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第32页!2.6.2 控制标志位(4)(3)模式控制位:M4、M3、M2、M1和M0位(即M4:0)都是模式控制位,这些位决定处理器的操作模式,见表2.9。不是所有模式位的组合都定义了有效的处理器模式,因此不要使用表中没有列出的组合。表2.9 CPSR模式位值注意:如果将非法值写入M4:0中,处理器将进入一个无法恢复的模式。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第33页!2.7 ARM体

26、系的异常、中断及其向量表 只要正常的程序被暂时中止,处理器就进入异常模式。例如,在用户模式下执行程序时,外设向处理器内核发出中断请求,将导致内核从用户模式切换到异常中断模式。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常。详见2.7.3小节。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第34页!2.7.2 异常向量表(1)如表2.11所列为异常向量地址一览表。其中,I和F表示先前的值。每种处理器操作模式都有一个相关联的中断向量,当一个异常发生时,ARM将改变模式,而程序计数器PC将会被强行指向异常向量。异常向量表从地址0的复位向量开始,然后每4

27、个字节就是一个异常向量。表2.11 异常向量地址一览表ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第35页!2.7.3 异常优先级(1)当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序,见表2.12。表2.12 异常优先级下面介绍有些异常不能同时发生:由于未定义指令与SWI优先级相同,所以未定义的指令和SWI不能同时发生,也就是说正在执行的指令不可能既是一条未定义的指令,又是一条SWI指令;ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第36页!2.7.4 异常中断的进入与退出(1)当多个异常同时发生时,一

28、个固定的优先级系统决定它们被处理的顺序,见表2.12。(1)进入异常:当一个异常导致模式切换时,内核自动地做如下处理:将当前PC保存到相应异常模式下的LR,异常处理程序完成后的返回可通过将LR的值减去偏移量以得到异常处理程序返回地址,然后写入PC;将CPSR的当前值保存到相应异常模式下的SPSR,异常处理程序完成后的返回可通过保存在SPSR中的值来恢复CPSR;设置CPSR为相应的异常模式;设置PC为相应异常处理程序的中断入口向量地址,跳转到相应的异常中断处理程序执行。ARM内核在中断异常时置位中断禁止控制位,这样可防止不受控制的异常嵌套。ARM9体系结构,ARM9内部资源,ARM9内部结构教

29、程共108页,您现在浏览的是第37页!2.7.4 异常中断的进入与退出(3)(2)退出异常:当异常处理程序结束时,异常处理程序必须执行如下操作:返回到发生异常中断的指令的下一条指令处执行,也就是说,将LR中的值减去偏移量后移入PC,偏移量根据异常的类型而有所不同,见表2.10;将SPSR的值复制回CPSR;在入口处置位的置位的中断禁止控制位清零。注意:恢复CPSR的动作会将控制位T、F和I自动恢复为异常发生前的值。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第38页!2.7.6 中断请求异常IRQ(1)只有当CPSR中相应的中断屏蔽被清除时,才可能发生中断

30、请求(IRQ)异常,IRQ异常是一个由nIRQ输入端的低电平所产生的正常中断。当一个IRQ异常中断发生时,内核切换到中断模式,表明产生了中断。内核自动地做如下处理:将异常处理程序的返回地址保存到异常模式下的R14(R14_irq或者LR)中。如图2.11所示,由于ARM处理器的5级流水线结构,当异常发生时,程序计数器PC总是指向返回位置的下一条指令即第3条指令,也就是说异常处理程序的正确返回地址为PC-4,且在PC-8的地址处发生异常中断服务程序跳转,由此可见,R14(R14_irq或者LR)保存的是指向第3条指令的程序计数器PC(地址),即“中断返回地址+4”。ARM9体系结构,ARM9内部

31、资源,ARM9内部结构教程共108页,您现在浏览的是第39页!2.7.6 中断请求异常IRQ(3)修改CPSR。将I位置1,禁止新的IRQ中断产生,但是不限制FIQ中断的发生(F位保持原有状态)。清零T标志位,CPU进入ARM状态。修改模式位,设置为IRQ模式,此时用户模式下的R13和R14将不可操作,而IRQ模式下的R13和R14变为可操作,即R13_irq保存IRQ中断模式的堆栈指针,R14_irq保存了“IRQ中断返回地址+4”。设置IRQ模式下的PC为IRQ异常处理程序的中断入口向量地址,在IRQ模式下,该向量地址为0 x0000 0018。由用户模式进入IRQ异常模式的流程示例如图2

32、.12所示,按照上述说明完成步流程后,软件处理程序开始执行,并且调用适当的中断服务程序来为中断源服务。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第40页!2.7.6 中断请求异常IRQ(5)图2.13 退出IRQ异常模式 由于流水线的特性,在IRQ中断处理程序的入口,R14指向的地址比返回地址多4个字节,IRQ处理程序使用减法指令将R14的值减去4存入PC中,并从中断返回,不管处于哪种处理器操作状态(ARM状态或者Thumb状态)。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第41页!2.7.7 快速中断请求异常FI

33、Q(1)有些嵌入式系统的应用对实时性要求比较高,需要足够快的中断响应速度,比如数据转移或通道处理。ARM在设计上充分地考虑了嵌入式系统的这一特点,在IRQ异常之外还设计了一种快速中断请求(FIQ)异常,并在硬件结构和资源分配上给予了足够的支持。只有当CPSR中相应的F位被清零时,才可能发生FIQ异常。在ARM状态中,快速中断模式有8个专用的寄存器,可用来满足寄存器保护的需要(这是上下文切换的最小开销)。将ARM内核的nFIQ信号拉低可实现外部产生FIQ,FIQ异常是优先级最高的中断。内核进入FIQ处理程序之后,FIQ、IRQ同时禁止任何外部中断源再次发生中断,除非在软件中重新使能IRQ、FIQ

34、请求。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第42页!2.7.8 未定义指令异常 未定义指令异常是内部异常中断。当ARM处理器遇到一条自己和系统内任何协处理器都无法执行的指令时,就会发生未定义指令异常,从而进入中断处理程序;同时软件可使用这一机制通过仿真未定义的协处理器来扩展ARM指令集。在仿真失败的指令后,不管处于哪种处理器操作状态(ARM状态或者Thumb状态),捕获处理器执行下面的指令:MOVS指令将R14的值写入PC,CPSR将自动从SPSR寄存器中恢复并返回到未定义指令之后的指令。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共1

35、08页,您现在浏览的是第43页!2.7.9 中止异常(2)SUBS指令将R14的值写入PC,CPSR将自动从SPSR寄存器中恢复并重试被中止的指令。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第44页!2.7.9 中止异常(4)SUBS指令将R14的值写入PC,CPSR将自动从SPSR寄存器中恢复并重试被中止的指令。Abort(中止)机制使得页面虚拟存储器机制得以实现。在采用虚拟存储器的系统中,处理器可以产生任意的地址。当某个地址的数据无效,MMU(存储器管理单元)将产生一个abort中止。这样abort的处理程序就必须找出异常中断的原因,使要求的数据可用

36、,并重试被中止掉的指令。应用程序也就不需要了解实际可用存储空间的大小,也不需要了解异常中断对它的影响。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第45页!2.7.10 SWI软件中断异常(1)事实上,所有的任务都是在用户模式下运行的,因此任务只能读CPSR而不能写CPSR。任务切换到特权模式的唯一途径,就是使用一个SWI指令调用。SWI指令强迫处理器从用户模式切换到SVC管理模式,并且IRQ中断自动关闭,所以软件中断方式长被用于系统调用。只有处理器切换到系统模式时,中断才能继续使用。如图2.14所示是进入和退出临界取代码时的系统调用流程,其他系统调用的过

37、程与此类似,只是调用的功能函数不同而已。SWI处理程序通过执行下面的指令返回:MOVS指令将R14的值写入PC,CPSR将自动从SPSR寄存器中恢复并返回到SWI指令之后的指令。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第46页!2.7.11 中断延迟(1)中断是为了从系统中得到更好响应的一个工具,人们常常会问:系统对每个中断的响应速度到底有多快?这个问题取决于4个因素:中断被禁止的最长时间。任一个优先级更高的中断的中断程序执行时间。CPU停止当前任务、保存必要的信息以及执行中断程序中的指令,这一过程需要花费的时间。从中断程序保存上下文到完成一次响应需要

38、的时间。中断延迟也就是系统响应一个中断所需要的时间,在某些系统中如果对中断进行处理不及时,系统可能会显得非常迟钝甚至出现崩溃的现象。通过软件处理程序来缩短中断延迟的方法有2种,它们分别是中断嵌套和使用高优先级。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第47页!2.8 ARM体系的存储系统 ARM处理器采用冯诺依曼(von Neumann)结构,指令和数据共用一条32位数据总线,只有装载、保存和交换指令可访问存储器中的数据。ARM的规范仅定义了处理器核与存储系统之间的信号及局部总线,而实际的芯片一般在外部总线与处理器核的局部总线之间有一个存储器管理部件将

39、局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总线的信号和时序与具体的芯片相关,不是ARM的标准。具体到某个芯片的外部存储系统的设计需要参考芯片的使用手册。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第48页!2.8.1 地址空间(1)ARM结构使用232个8位字节地址空间,字节地址的排列从0232-1。地址空间也可以看作是包含230个32位字,地址以字为单位进行分配。也就是将地址除以4,地址为A的字包含4个字节,地址分别为A、A+1、A+2和A+3。与此同时,地址空间还可被看作包含231个16位半字,地址按照半字进行分配。地址为A的半字包

40、含2个字节,废止分别为A和A+1。通常地址计算通过普通的整数指令来实现。这意味着如果地址向上或向下溢出地址空间,通常会发生翻转,也就是说计算的结果以232为模。如果地址的计算没有发生翻转,那么结果仍然位于0232-1范围内。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第49页!2.8.1 地址空间(3)LDR、LDM、STR和STM指令在增加的地址空间访问一连串的字,每次装载或保存,存储器的地址都会加4。如果计算溢出了地址空间的顶端,结果是不可预测的。换句话说,程序应保证在使用这些指令时不使其溢出地址空间的顶端。注意:上述原则不只适用于执行的指令,还包括条

41、件代码检测失败的指令。大多数ARM在当前执行的指令之前执行预取指令,如果预取操作溢出了地址空间的顶端,则不会产生执行动作并导致不可预测的结果,除非预取的指令实际上已经执行。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第50页!2.8.2 存储器格式(2)图2.15 字内字节的小端地址 (2)大端存储器系统:在大端格式中,ARM处理器将最高位字节保存在最低地址,最低字节保存在最高地址。因此存储器系统字节0连接到数据线3124,如图2.16所示。图2.16 字内字节的大端地址 ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第

42、51页!2.8.2 存储器格式(4)如果一个基于ARM芯片将存储器系统配置为其中一种存储器格式(如小端),而实际连接的存储器系统配置为相反的格式(如大端),那么只有以字为单位的指令取指、数据装载和数据保存能够可靠实现,其他的存储器访问将出现不可预期的结果。当标准系统控制协处理器连接到支持大小端的ARM处理器时,协处理器寄存器1的bit7在复位时清零,这表示ARM处理器在复位后立即配置为小端存储器系统。如果它连接到一个大端存储器系统,复位处理程序要尽早做的事情之一就是切换到大端存储器系统,并且必须在任何可能的字节或半字数据访问之前或Thumb指令执行之前执行。ARM9体系结构,ARM9内部资源,

43、ARM9内部结构教程共108页,您现在浏览的是第52页!2.8.3 非对齐的存储器访问(1)ARM结构通常期望所有的存储器访问都合理对齐,具体就是字访问的地址通常是字对齐的,而半字访问的地址是半字对齐的。不按这种方式对齐的存储器访问,称为非对齐的存储器访问。(1)非对齐的指令取指:如果在ARM状态下将一个非字对齐的地址写入R15(PC),结果通常不可预测。如果在Thumb状态下将一个非半字对齐的地址写入R15(PC),地址位bit0通常被忽略。结果在ARM状态下有效代码从R15(PC)读 出 值 的 bit1:0为 0,而 在 Thumb状 态 下 读 出 的R15(PC)值的bit0为0。当

44、规定忽略这些位时,ARM实现不要求在指令取指时将这些位清零。可以将写入R15的值不加改变地发送到存储器,并在ARM或Thumb指令取指时请求系统忽略地址位bit1:0或bit0。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第53页!2.8.3 非对齐的存储器访问(3)指令执行时,首先忽略造成访问不对齐的低地址位bit1:0,所以R2开始读到的数据是0 x3322 1100;接下来,R2中的数据又循环右移了1个字节,变为0 x0033 2211;因此,上述指令执行完毕后,R2中的书为0 x0033 2211。ARM9体系结构,ARM9内部资源,ARM9内部结

45、构教程共108页,您现在浏览的是第54页!2.9 课后练习1.ARM9TDMI中的T、D、M、I的含义是什么?2.ARM9TDMI采用几级流水线?使用何种存储器编址方式?3.ARM处理器的模式和ARM处理器状态有何区别?并列举。4.PC和LR分别使用哪个寄存器?5.R13寄存器的通用功能是什么?6.CPSR寄存器中哪些位用来定义处理器状态?7.描述一下如何禁止IRQ和FIQ的中断?8.请描述一下ARM9TDMI产生异常的条件是什么?各种异常会使处理器进入哪种模式?进入异常时内核有何操作?各种异常的返回指令是什么?ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是

46、第55页!2.1 ARM9TDMI ARM9TDMI是基于ARM体系结构v4版本的高端ARM核(注意:核并非芯片,ARM核与其他部件(如RAM、ROM、片内外设)组合在一起才构成现实的芯片)。ARM9TDMI是从ARM7核发展而来的。ARM9TDMI后缀的涵义如下:T:支持高密度Thumb指令集扩展;D:支持片上调试;M:支持64位乘法指令;I:带Embedded ICE硬件仿真功能模块。ARM9TDMI-S是ARM9TDMI的可综合(synthesizable)版本(软核),对应用工程师来说,除非芯片生产厂商对ARM9TDMI-S进行了裁剪,否则在逻辑上ARM9TDMI-S与ARM9IDMI

47、没有太大区别,其编程模型与ARM7TDMI一致。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第56页!2.1.1 存储器的字与半字(2)如果一个数据是以字方式存储的,那么它就是字对齐的,否则就是非字对齐的。如果一个数据是以半字方式存储的,那么它就是半字对齐的,否则就是非半字对齐的,半字与字对齐的实际情况见表2.1。表2.1 半字与字对齐ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第57页!2.1.2 5级流水线(1)ARM处理器使用流水线来增加处理指令流的速度,这样可使几个操作同时进行,并使处理和存储器之间的操作更加流

48、畅、连续,能提供1.1MIPS/MHz的指令执行速度。相比ARM7(3级流水线),ARM9增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡。5级流水线如图2.1所示(其中PC为程序计数器),流水线使用5个阶段,因此指令分为5个阶段执行。取指:从存储器装载一条指令;译码:识别将要被执行的指令;执行:处理指令,产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲);访存:访问数据存储器;回写:将执行结果写回寄存器。ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第58页!2.1.2 5级流水线(3)

49、在传统的80C51单片机中,处理器只有完成一条指令的读取和执行后,才会开始下一条指令的处理所以PC总是指向正在“执行”的指令。而ARM9处理器采用5级流水线,具有5个工位,将指令的处理分为5个阶段,分别是取指、译码、执行、访存和回写。因此ARM“正在执行”第3条指令的同时对第4条指令进行译码,将第5条指令从存储器中取出,对第2条指令完成访存操作,对第1条指令完成回写操作。那么一条ARM9流水线只有在取第6条指令的时,条指令才算完成执行。也就是说,在流水线中同时存在5条指令,它们分别处于不同的处理阶段。下面用图2.2来进一步阐述5级流水线的处理机制,这样更加形象和具体。该图反映了处理器处于第三个

50、周期时的PC指向。在执行“指令1”的同时对“指令2”进行译码,并将“指令3”从存储器中取出。也就是说当“指令1”ARM9体系结构,ARM9内部资源,ARM9内部结构教程共108页,您现在浏览的是第59页!2.1.2 5级流水线(5)无论处理器处于何种状态,程序计数器R15(即PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第1条指令。因此,PC总是指向第3条指令,或者说PC总是指向当前正在执行的指令地址再加2条指令的地址。当处理器处于ARM状态时,每条指令长为4字节,所以PC的值为正在执行的指

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com