文档视界 最新最全的文档下载
当前位置:文档视界 › ARM处理器工作模式

ARM处理器工作模式

ARM处理器工作模式
ARM处理器工作模式

除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中除了系统模式外的其他5种特权模式又称为异常模式。处理器模式可以通过软件来切

通用寄存器通常又可以分为下面3类。

n 未备份寄存器:包括R0~R7。

n 备份寄存器:包括R8~R14。

n 程序计数器PC:即R15。

1)未备份寄存器R0~R7

对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未备份寄存器。

2)备份寄存器R8~R14

备份寄存器中的每个寄存器对应于两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_fiq和R9_fiq,当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记做R8_usr和R9_usr 等。在这两种情况下使用的是不同的物理寄存器,系统没有将这几个寄存器用于任何的特殊用途。中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理过程很迅速。

2)Q标志位

在ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位,主要用于指示增强的DSP指令是否发生了溢出,同样的,SPSR的bit[27]也称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。

3)CPSR中的控制位

CPSR的低8位I、F、T及M[4:0]统称为控制位,当异常中断发生时这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

① I中断禁止位

当I=1时禁止IRQ中断。

当F=1时禁止FIQ中断。

通常一旦进入中断服务程序可以通过置位I和F来禁止中断,但是在本中断服务程序退出前必须恢复原来I、F位的值。

CPSR的其他位用于将来ARM版本的扩展,程序可以先不操作这些位。

1.4.4 ARM体系结构的异常中断

ARM体系结构中的异常中断是ARM处理器的核心,而对于异常中断的处理则是嵌入式操作系统的核心。一般来说ARM体系结构中程序的执行通常由以下3种方式来控制。

n 在正常程序执行时,每执行一条ARM指令,PC的值加4字节,每执行一条

Thumb指令,PC加2字节,整个过程是按顺序执行。

n 通过跳转指令,程序可以跳到特定的地址标号执行,或者跳转到特定的子程

序处执行。常用的跳转指令有B、BL、BX、BLX等。

ARM处理器对异常中断的响应过程是首先保存处理器当前状态、中断屏蔽位及C PSR寄存器中的各个条件标志位。这是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的SPSR寄存器中实现的。其次设置当前程序状态寄存器CPSR中相应的位。再次将寄存器LR_mode(R14_mode)设置成返回地址。最后将PC设置成该异常中断的中断向量地址,从而跳转到对应的中断处理程序处执行。

ARM处理器从异常中断程序中返回的过程:首先恢复被中断程序的处理器状态,也就是将SPSR_mode 内容复制到CPSR。然后返回到发生异常中断指令的下一条指令处执行,即将LR_mode(R14_mode)寄存器的内容复制到PC中。

1.4.5 ARM体系结构中的存储系统

非对齐的存储访问操作:在ARM体系结构中通常希望字单元的地址是字对齐的(地址的低两位是0b00),半字单元的地址是半字对齐的(地址的最低位为0b 0),但在存储单元中地址没有遵守上述的对齐规则,称为非对齐的存储访问操作,在ARM体系结构的伪指令集中有专门的align指令来指定对齐格式。

在ARM体系结构中允许指令预取,在CPU执行当前代码的同时,可以从存储器中预取其后若干条指令,具体预取多少条指令则由不同的ARM处理器内核的实现来决定。

2.ARM体系结构中的MMU

另外一个重要的概念就是MMU(Memory Manager Unit)。ARM存储系统的体系结构适应不同的嵌入式系统应用,它的差别很大。最简单的存储系统使用平板式的地址映射机制,地址空间的分配是固定的,系统中各部分都使用物理地址,这样的处理器不带MMU。而一些复杂的系统可能包含一种或多种下面提到的技术,从而提供功能更为强大的存储系统。

(1)系统中可能包含多种类型的存储器件,一般都有Flash、SRAM、SDRAM等接口。

(2)使用指令/数据cache及Write Buffer技术缩小处理器和存储系统速度差别,从而提高系统的整体性能。

(3)系统中包含有MMU单元。

MMU使用内存映射技术实现虚拟空间到物理空间的映射,这种映射机制对于嵌入式系统尤其重要。通常程序放在ROM/Flash中,这样系统掉电后程序能够保存。但是ROM/Flash比SDRAM速度慢很多,而且在嵌入式系统中,中断向量表存放在RAM中,不过利用内存映射就可以解决这种问题。在系统加电时将ROM/Flash地址映射到0x00000000,在0x00000000地址处存放启动代码,来完成系统设备的初始化,之后再把内核程序加载到SDRAM,然后把地址映射到SDRAM的地址,跳转到SDR AM地址运行就可以了。

针对具有MMU的ARM处理器可以移植Linux for ARM操作系统,针对没有MMU

的处理器,一般都是移植uClinux for ARM。比如说Samsung公司的S3C4510、S 3C2510都是不带MMU的处理器,只能移植uClinux,而针对S3C2410、PXA27x、OMAP591x等带有MMU单元的ARM处理器通常都可以移植Linux操作系统。带有M MU的处理器内部都有用于存储管理的系统控制协处理器CP15,在移植嵌入式操作系统的Boot Loader时,必须要对存储管理单元进行初始化设置。

3.快速上下文切换技术

FCSE(Fast Context Switch Extension)技术通过修改系统中不同进程的虚拟地址,避免在进程间切换时造成的虚拟地址到物理地址的重映射,从而提高系统

的性能。通常FCSE位于CPU和MMU之间,其责任就是将不同进程使用的相同虚拟地址映射为不同的虚拟空间,使得在上下文切换时无须重建TLB等。

相信通过对ARM处理器架构的简单介绍,读者可以对ARM处理器有大体地了解,如果要继续深化研究,可以到ARM公司的网站去下载对于每个体系结构的详细技术说明文档。对于MMU部分更为详细的介绍,推荐参考《ARM体系结构与编程》(杜春雷编著)一书。接下来介绍一下运行在ARM处理器之上的几种常用的嵌入式软件操作系统。

1.5 嵌入式操作系统概述

前几年在笔者参与设计的石油探测仪器中,通常都是使用8位处理器——单片机,包括51机、PIC等处理器,程序有的是用汇编写的,有的是用C写的,程序基本没有底层和应用层之分,也根本不使用操作系统。这样的系统最后在应用发生变更的时候带来的问题就是:硬件和软件扩展都感觉非常不便,驱动程序、文件系统都没办法加载,以至于很多的功能没有办法去完善,一旦程序需要修改,就需要把所有代码重新编译等问题。还好,及时地跟上了技术的发展,很快开始选用32位ARM处理器,也渐渐地引入了操作系统。并且开始搭建基于ARM处理器的开发平台,这样的平台建立之后,给系统的软件、硬件升级带来了很大的便利。而且在一个平台上进行适当地裁剪之后可以在不同的应用上进行快速开发。这使得后来的开发效率有了很大的提高。

目前嵌入式系统应用领域的一个发展倾向是采用实时多任务操作系统RTOS。应该说RTOS的应用是与应用复杂化直接相关的。过去一个单片机应用程序所控制的外设和履行的任务不多,采取一个主循环和几个顺序调用的用户程序模块即可满足要求,而且现在的单片机芯片本身的性能也有很大程度的提高,可以适应复杂化这一要求,问题还在于软件上。随着应用的复杂化,一个嵌入式控制器系统可能要同时控制、监视很多外设,要求有实时响应能力,需要处理很多任务,而且各个任务之间也许会有多种信息需要相互传递,如果仍采用原来的程序设计方法可能会存在以下问题。

(1)中断可能得不到及时响应,处理时间过长,这对于一些控制场合是不允许的,对于网络通信方面则会降低系统整体的信息流量。

(2)系统任务多,要考虑的各种可能也多,各种资源如调度不当就会发生死锁,降低软件可靠性,程序编写任务量成指数级增加。

因此,RTOS的应用成为嵌入式系统的另一个基本要求。ARM芯片获得了许多实时操作系统(Real Time Operating System)供应商的支持,比较知名的有:Win dows CE、QNX、Linux、VxWorks、Nucleus、Palm OS等。

下面对可以在ARM处理器上运行的常用操作系统做一个简单介绍。具体在平台上的操作系统的选择要根据系统的应用及设计成本等因素综合考虑。

1.5.1 VxWorks

VxWorks是Wind River System公司开发的具有工业领导地位的高性能实时操作系统内核,具有先进的网络功能。VxWorks的开放式结构和对工业标准的支持,使得开发人员易于设计高效的嵌入式系统,并可以很小的工作量移植到其他不同的处理器上。其主要特点如下。

n 可裁剪微内核结构。

n 高效的任务管理能力(多任务——具有256个优先级)。

n 具有优先级排队和循环调度能力。

n 支持快速的、确定性的上下文切换。

n 灵活的任务间通信机制,支持3种信号灯(二进制、计数、有优先级继承特

性的互斥信号灯)。

n 具有消息队列。

n 具有套接字(Socket)。

n 具有共享内存技术。

n 支持信号(Signals)。

n 微秒级的中断处理能力。

n 支持POSIX 1003.1b实时扩展标准。

n 支持多种物理介质及标准和完整的TCP/IP网络协议。

n 灵活的引导方式(支持从ROM、U盘、本地盘、软盘、硬盘或网络中引导)。

n 支持多处理器并行处理。

n 快速灵活的I/O系统管理能力。

n 支持MS-DOS和RT-11等多种文件系统、支持本地盘、U盘、CD-ROM的

使用。

n 完全符合ANSI C标准。

VxWorks板级支持包(BSP)包含了开发人员需要在特定的目标机上运行VxWork s所需要的一切支持:支持特定目标机的软件接口驱动程序等,以及从主机通过网络引导VxWorks的Boot Rom。WindRiver提供支持不同厂商的200多种商业体系结构和目标板的BSP。另外WindRiver还提供一个BSP移植包,帮助用户移植VxWorks到客户化硬件板上。VxWorks是一个商用操作系统,用户需要购买lice nse。

1.5.2 QNX

QNX是由QNX软件系统有限公司开发的一套实时操作系统,它是一个实时的、可扩展的操作系统,部分遵循了POSIX相关标准,可以提供一个很小的微内核及一些可选择的配合进程。其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理。其进程在独立的空间中运行,所有其他操作系统服务都实现为协作的用户进程,因此QNX内核非常小巧,大约几千字节,而且运行速度极快。这个灵活的结构可以使用户根据实际的需求,将系统配置为微小的嵌入式系统或者包括几百个处理器的超级虚拟机系统。

POSIX(Portable Operating SystemInterface)表示可移植操作系统接口。不过QNX目前的市场占有量不是很大,而且大家对它的熟悉程度也不够,而且QNX 对于GUI系统的支持不是很好。因而如果选用QNX系统的话,需要一个熟悉过程,而且对于GUI显示的驱动或者移植工作量会比较大。

1.5.3 Palm OS

3Com公司的Palm OS在PDA市场上占有很大的份额,它有开放的操作系统API 接口,开发商可以根据需要自行开发所需要的应用程序。目前大约有3 500个应

用程序可以在Palm上运行,这使得Palm的功能得以不断增多。这些软件包括计算器、各种游戏、电子宠物、GIS(地理信息)等。

1.5.4 Windows CE

Microsoft Windows CE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对从PDA到专用的工业控制器用户的电子设备进行定制,操作系统的基本内核至少需要200KB。现在Microsoft 又推出了针对移动应用的Windows Mobile操作系统。Windows Mobile是微软进军移动设备领域的重大品牌调整,它包括Pocket PC、Smartphone 及Media Ce nters三大平台体系,面向个人移动电子消费市场。凭借微软在视窗领域内的垄断地位,Windows Mobile从一诞生起就占据了很多优势,众多的Windows开发者可以在熟悉的环境下进行各种应用的开发。Windows Mobile系列专题,将带你从最基本的工具安装、环境配置开始,进入移动应用开发的世界。

1.5.5 uClinux

uClinux开始于Linux 2.0的一个分支,它被设计用来应用于微控制领域。uCli nux最大的特征是没有MMU(内存管理单元模块)。它很适合那些没有MMU的处理器,如ARM7TDMI等。这种没有MMU的处理器在嵌入式领域中应用得相当普遍。同标准的Linux相比,由于uClinux上运行的绝大多数用户程序并不需要多任务。另外,针对uClinux内核的二进制代码和源代码都经过了重新编写,以紧缩和裁剪基本的代码。这就使得uClinux的内核同标准的Linux内核相比非常小,但是它仍能保持Linux操作系统常用的API,小于512KB的内核和相关的工具。操作系统所有的代码加起来小于900KB。

uClinux有完整的TCP/IP协议栈,同时对其他多种网络协议都提供支持,这些网络协议都在uClinux上得到了很好的实现。uClinux可以称为是一个针对嵌入式系统的优秀网络操作系统。uClinux所支持的文件系统很多,其中包括了最常用的NFS(网络文件系统)、ext2(第二扩展文件系统,它是Linux文件系统的标准)、MS-DOS及FAT16/32、Cramfs、jffs2、ramfs等。

1.5.6 Linux

Linux有很多的版本,下面介绍BlueCat Linux 和HardHat Linux。

1.BlueCat Linux

BlueCat Linux是LynuxlN'orks公司开发的专用于嵌入式实时领域的应用开发产品,支持以Linux和Windows作为主机的交叉开发环境。BlueCat的开发环境是一个完整的开发、调试及服务体系,为嵌入式实时应用程序的开发提供了品种繁多的开发工具和性能分析工具,例如,交叉编辑器gcc/g++,内核裁剪工具m kimage,调试工具如源代码级系统调试工具Total/gdb,内核调试工具SKdb,支持多种shell环境bash、ash、sash和多种Linux的编辑器。

BlueCat Linux提供了丰富的、支持许多种嵌入式处理器的板级支持包BSP,大大减少了产品投入市场的时间,其支持的处理器包括以下几种。

n Intel xScale Micro architecture。

n Network Processors and IA-32。

n MIPS。

n ARM 系列。

n PowerPC。

n x86系列。

2.HarHat Linux

HardHat Linux是MontaVista公司针对嵌入式设备量身定制的、实时的、专业的嵌入式设备操作系统。它针对嵌入式设备的处理器、存储器资源有限的特点,在不减少新内核对嵌入设备有利的、特性的基础上,对Linux内核进行高度裁减、配置。

HardHat Linux所配备的Cross Development Kit (CDK)为从事远程嵌入式设备上的系统开发、应用开发提供了良好的环境。CDK提供了一个可以应用于很大范围的主机——目标机(host-target)结构可普遍支持的开发环境。利用CDK,可以在主机上编辑、编译源程序,而把编译完成的程序放到目标机上运行。同时,在主机上进行跟踪和排错。这样,在编译和调试程序的时候就不再受到设备资源的限制,这将是以后开发的常用方法。

MontaVista将其下一代旗舰产品的名称HardHat Linux改为MontaVista Linux。MontaVista Linux 2.1已经可以广泛地支持各类嵌入式处理器体系结构、CPU

板卡及软件组件,包括6种业界领先体系结构的20款处理器:x86/IA-32、Pow erPC、StrongARM、XScale、 ARM、MIPS及SH等。现在TI公司的OMAP系列、达芬奇系列使用的Linux系统都是由MontaVista公司提供的商用版本。

1.5.7 uC/OS-II

源码开放(C代码)的免费嵌入式系统 uC/OS-II简单易学,提供了嵌入式系统的基本功能,其核心代码短小精悍,如果针对硬件进行优化,还可以获得更高的执行效率。当然,uC/OS-II相对于商用嵌入式系统来说还是过于简单,而且存在开发调试困难的问题。uC/OS-II的特点主要包括:公开源代码、可移植性很强(采用ANSI C编写)、可固化、可裁剪、占先式、多任务、系统服务、中断管理、稳定性与可靠性都很强。

uC/OS-II已经被移植到以下许多CPU上:ARM系列处理器、Intel公司的8051、80×86等系列、摩托罗拉公司的PowerPC、68K、68HC11等系列。uC/OS-II的移植相对于其他操作系统的移植要简单一些,uC/OS-II上通用的图形系统是Micr oWindow。

1.5.8 Nuclues

Nucleus操作系统是由Accelerated Technology Inc开发的。Nucleus PLUS 是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSI C写成的,因此,非常便于移植并能够支持大多数类型的处理器。从实现角度来看,Nucleus PLUS是一组C函数库,应用程序代码与核心函数库连接在一起,生成一个目标代码,下载到目标板的RAM中或直接烧录到目标板的ROM

中执行。在典型的目标环境中,Nucleus PLUS 核心代码区一般不超过20KB。Nu cleus PLUS 采用了软件组件的方法,每个组件具有单一而明确的目的,通常由几个C及汇编语言模块构成,提供清晰的外部接口,对组件的引用就是通过这些接口完成的。除了少数一些特殊情况外,不允许从外部对组件内的全局进行访问。由于采用了软件组件的方法,Nucleus PLUS的各个组件都非常易于替换和复用。

Nucleus PLUS 的组件包括任务控制、内存管理、任务间通信、任务的同步与互斥、中断管理、定时器及I/O驱动等。

现在Nuclues也被移植到如x86、ARM系列、MIPS系列、PowerPC系列、ColdFi re、TI DSP、StrongARM、H8/300H、SH1/2/3、V8xx、Tricore、Mcore、Panaso nic MN10200、Tricore等处理器上,Nuclues对于GUI的支持不像Lnux、uC/OS -II那么方便。所以Nucleus大部分应用在不含图形系统的应用中。

除了上述国外知名的嵌入式操作系统外,国内也有不少自主开发的嵌入式操作系统如:Hopen OS、EEOS等。

Hopen OS是由凯思集团自主研制的实时操作系统,由一个很小的内核及一些可以根据需要定制的系统模块组成,核心Hopen Kernel一般为10KB左右,占空间小,具有多任务、多线程的系统特性。

EEOS是由中科院计算所组织开发的、开放源码的实时操作系统,支持p-Java,一方面小型化,一方面也可以重用Linux的驱动和其他模块。目前已经发展成一个较为完善、稳定、可靠的嵌入式操作系统平台了。

本书重点描述uClinux及Linux操作系统。

1.6 本章小结

这一章简单地介绍了嵌入式系统的定义、特点及应用,让读者对嵌入式系统有了一个比较粗略的了解。同时本章也系统地介绍了ARM处理器的体系结构,ARM处理器的特点及应用。还介绍了ARM处理器相关的基础知识,包括ARM处理器的几种工作模式、通用寄存器、专用寄存器、异常中断的处理方法,以及ARM体系结构中的存储单元等。概述了几种流行的嵌入式操作系统。读者通过这一章的介绍,能了解ARM处理器的基本体系结构。本章为用户针对自己的应用选择相应的处理器提供了一些依据。

本章从嵌入式系统、ARM处理器、嵌入式操作系统3方面进行了描述,是ARM系统开发基础知识的回顾。

从事基于ARM处理器的底层驱动开发,同样要求对硬件电路有一定的了解,而且在ARM处理器平台上进行底层开发和在其他平台上的底层开发一样,需要阅读比较多的有关ARM处

理器及外围芯片的数据手册。在ARM处理器平台上的底层驱动开发,通常会有两种方式,一种是脱离操作系统的裸机驱动设计方法,这与以前在8位机和16位机上的常用开发方式类同。还有一种就是基于操作系统的底层驱动设计方法。在基于ARM处理器的底层开发的过程中,如果实际设计的系统只是一个单任务系统,那么完全可以不使用操作系统,这个时候所进行的底层驱动程序设计就可以称为裸机底层驱动设计。其实即使是使用了操作系统,还是一样离不开裸机底层驱动设计,就如前面介绍的启动代码Boot Loader,在Boot Load er里面的设备驱动同样也是一种裸机驱动。

本章把重点放在了基于ARM处理器的底层驱动设计上。当然在介绍底层驱动设计之前先要介绍一下ARM处理器的汇编语言编程。

5.1 有关ARM的汇编语言编程

这里需要提到的是ARM处理器的汇编语言编程的一些内容,在嵌入式ARM系统的程序设计中往往离不开ARM汇编语言编程。正如大家所熟知的处理器初始化部分的代码通常都是用汇编来编写的,还有一些操作协处理器的代码,以及部分中断处理程序一样也是用汇编语言写成的。在开始介绍ARM处理器汇编语言编程之前建议读者先阅读一些有关ARM指令集的资料,主要是指ARM指令集、Thumb指令集及ARM宏汇编部分。有关ARM指令集和Thumb指令集这里就不做具体介绍,只从ARM汇编伪指令、模块化汇编语言程序设计、混合语言编程等几个方面对ARM 处理器汇编语言做一些简单介绍。

5.1.1 ARM汇编伪指令介绍

在ARM处理器汇编语言程序设计里,有一些特殊的指令助记符。这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊的指令助记符为伪指令,它们所完成的操作称为伪操作。

伪指令在源程序中的作用是为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了。在ARM处理器的汇编程序中,大体有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令及其他伪指令。

伪操作符可以分为以下几类。

1)数据定义伪操作符

数据定义伪操作符主要包括LTORG、MAP、DCB、FIELD、SPACE、DCQ、DCW等,主要用于数据表定义、文字池定义、数据空间分配等。常用的有DCB/DCQ/DCW分配一段字节/双字/字内存单元,并且将它们初始化。

2)符号定义伪操作符

符号定义伪操作符包括GBLA、GBLL、GBLS、LCLA、CN、CP、DN、FN、RLIST、SE TA等,用于定义ARM汇编程序的变量,对变量进行赋值,以及定义寄存器名称等。其中用于全局变量声明的GBLA、GBLL、GBLS和局部变量声明的LCAL、LCLL、LCLS伪指令较为常用。

3)报告伪操作符

报告伪操作符包括ASSERT、INFO、OPT等,主要用于汇编报告等。其中比较常用的有ASSERT,表示断言错误。

4)条件汇编伪操作符

条件汇编伪操作符包括IF、ELSE、ENDIF、WHIL、WEND、MACRO、MEND等,主要用于条件汇编、宏定义、重复汇编控制等操作。

5)杂项伪操作符

杂项伪操作符包括AREA、ALIGN、ENTRY、EQU、EXPORT、GLOBAL、IMPORT、CODE 16、CODE32等。这些伪指令在汇编程序设计中较为常用,如段定义、入口点设置等伪指令。常用的伪指令主要有以下几条。

n AREA:用来定义段;

n ALIGN:用来设定边界对齐;

n CODE16/CODE32:用来指定指令集;

n ENTRY:指定程序入口;

n END:汇编结束。

有关这些伪指令的详细用法,可以参考ARM指令集参考手册。

5.1.2 模块化程序设计

尽管是汇编程序设计,也同样要求程序设计的模块化。先按模块独立汇编,然后再与应用的其他模块(有可能是汇编程序模块,也有可能是C程序模块)链接形成一个可执行的程序。在模块化程序设计中有几点是需要引起注意的,比如说全局符号的定义与引用、各个模块间符号的互相调用方法等。

1.全局符号

在基于ARM处理器的汇编程序中,模块中定义的、要被其他模块使用的符号(包括变量名和函数名)都必须被声明为全局符号。大体有两种。

(1)在本模块中定义,其他模块中被应用的,具体定义方法如下:

.global symbol

(2)在本模块中要使用其他模块中的全局符号,可以声明,具体方式如下:.extern symbol

在这种方式下也可以不用声明,在汇编时会自动被认为它是其他模块中的全局符号。

全局符号的定义就是为了方便在各个模块之间互相调用,全局符号增加了编程的灵活性,当然,要灵活地使用这些全局符号,在ARM嵌入式程序设计中自然也有一套规则来确保这些全局符号灵活调用。

2.模块间的符号互用

在ARM嵌入式程序设计中,这些符号不仅可以在汇编程序模块中调用,也可以在C程序模块中调用,模块间的符号互相调用主要有以下几种情况。

(1)汇编模块与汇编模块间的调用:只要是全局符号在汇编模块间就可以直接使用。

(2)汇编模块调用C语言模块中的函数:汇编模块调用C语言模块时,要注意不同芯片传递参数的方式有差别。

(3)汇编模块使用C语言模块中的变量:首先保证该变量在C语言中是全局变量,然后在汇编中直接使用变量名。要注意:C语言中的变量名在汇编中不用加下划线。另外该变量名不能用static修饰,否则该变量只局限于对所在的模块有效。

(4)C语言模块调用汇编模块中的函数:该函数名在汇编程序中必须是全局符号,即必须用.global声明,然后在C语言中申明该函数的原型,最后在使用时与一般的C函数一样。

(5)C语言模块使用汇编模块中的变量:该变量在汇编程序中必须是全局符号,即必须用.global声明,然后在C语言中申明该变量的原型,最后在使用时与一般的C变量一样。

5.1.3 混合语言编程

在基于ARM处理器的嵌入式应用系统程序设计中,若所有的编程任务均用汇编语言来完成,其工作量是可想而知的。而且,所有程序如果都是汇编程序,将不利于系统升级或应用软件移植。事实上,ARM体系结构支持C/C++及与汇编语言的混合编程,在一个完整的程序设计中,除了初始化处理器部分及一些中断有关函数用汇编语言完成外,其主要的编程任务一般都用C/C++完成。ARM汇编与C/C+ +的混合编程通常有以下几种方式。

n 在C/C++代码中嵌入汇编指令;

n 在汇编程序和C/C++的程序之间进行变量的互访;

n 汇编程序、C/C++程序间的相互调用。

在实际的编程中,用得比较多的方法是:

(1)程序的初始化部分可以用汇编语言完成,然后用C/C++完成主要的编程任务。

(2)程序在执行时首先完成初始化过程,然后跳转到C/C++程序代码中,汇编程序和C/C++程序之间一般没有参数传递,也没有频繁的相互调用,因此,整个程序的结构显得相对简单,容易理解。

那么,如何在C/C++语言中内嵌汇编语言呢?在程序设计中嵌入汇编程序的目的通常是为了实现一些高级语言所没有的功能,提高程序执行效率等。

armcc编译器的内嵌汇编器支持ARM指令集,tcc编译器的内嵌汇编器支持Thum bT指令集。下面将介绍在使用内嵌汇编指令编程时的一些注意事项。

1.内嵌汇编的通用语法

嵌入式-ARM寄存器基本概念.

嵌入式-ARM寄存器基本概念 嵌入式-ARM寄存器基本概念 类别:嵌入式系统 无论是学习哪一种处理器,首先需要明确的就是这种处理器的寄 存器以及工作模式。ARM有37个寄存器,其中31个通用寄存器,6个状 态寄存器。这里尤其要注意区别的是ARM自身寄存器和它的一些外设的寄存器的区别。ARM自身是统一架构的,也就意味着37个寄存器无论在哪 个公司的芯片里面都会出现。但是各家公司会对ARM进行外设的扩展,所以就 出现了好多外设寄存器,一定要与这37个寄存器区别开来!!!1、备份寄存器(R8-R14)对于R8-R12来说,除在快速中断模式下,每个模式对 应相同物理寄存器,所以在FIQ模式下可不必保护和恢复中断现场。对于R13-R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式 和系统模式共用的。寄存器R13常用做栈指针SP,除用户和系统模式 外,其他模式在使用时的名字构成为R13_。寄存器R14又被称 2、不分组寄存器(R0-R7)不分组也就是说说,在所有的处理器模式下指的都时同一物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理 器模式使用一个名字相同的物理寄存器,就是使用的同一个寄存器,这样可能 造成寄存器中数据被破坏,所以在进行模式切换时必须加以保护。为连接寄存器(LR),除用户和系统模式外,其他模式在使用时的名字构成为 R14_。有下面两种特殊用途:A、每个处理器模式自己的物理R14中存放在当前子程序的返回地址。当通过BL或BLX指令调用子程序时, R14被设置成该子程序的返回地址。B、当异常中断发生时,该异常模式 下的R14被设置成保存该模式基于PC的返回地址,对于有些异常模式,R14的值有可能与将返回的地址有个常数的偏移量,不同模式偏移量还有所不同(在ARM 的异常处理里有详细介绍)。3、程序计数器R15 对于用户来说,尽量避免使用STR/STM指令来保存R15的值。当成功向R15写入一个地址 数值时,程序将跳转到该地址执行。在ARM状态下指令总是字对齐的,所以PC的PC[1:0]位恒为零,在想PC写入地址时一定要注意将PC[1:0]设为零。ARM采用的是3级流水线结构,所以PC指向的是当前执行指令的下 两条指令,PC-8为当前指令地址。4、程序状态寄存器CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。同时除了用户和系统模式以外,每中处理器模式下都有一个专用的物理状态寄存器,称为 SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态 寄存器的内容。当在用户模式和系统模式中访问SPSR,将会产生不可预知的结果。CPSR和SPSR的格式相同,如下:0:M0 1:M1 2:M2 3:M3 4:M4 5:T(=1 Thumb执行) 6:F(=1是禁止) 7: I(=1是禁止) 注意:M0~M4并不是所有的组合都定义了有效的处理模式,如 果错误设置,将会引起无法预料的错误。27:Q 在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,主要用于指示增强的dsp指令是否发生了

ARM体系的7种工作模式

ARM体系的7种工作模式 一、ARM体系的CPU有以下7种工作模式: 1、用户模式(usr):正常的程序执行状态 2、快速中断模式(fiq): 3、中断模式(irq): 4、管理模式(svc):操作系统使用的保护模式 5、系统模式(sys):运行具有特权的操作系统任务 6、数据访问终止模式(abt):数据或指令预取终止时进入该模式 7、未定义指令终止模式(und):未定义的指令执行时进入该模式 注解: 可以通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式;除用户模式外,其余6种工作模式都属于特权模式; 特权模式中除了系统模式以外的其余5种模式称为异常模式; 大多数程序运行于用户模式; 进入特权模式是为了处理中断、异常、或者访问被保护的系统资源; 二、ARM体系的CPU有两种工作状态 1、ARM 2、THumb CPU上电处于ARM状态 三、寄存器 ARM有31个通用的32位寄存器,6个程序状态寄存器,共分为7组,有些寄存器是所有工作模式共用的,还有一些寄存器专属于每一种工作模式; R13——栈指针寄存器,用于保存堆栈指针; R14——程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15的备份,而当发生中断或异常时,R14保存R15的返回值;

R15——程序计数器; 快速中断模式有7个备份寄存器R8—R14,这使得进入快速中断模式执行很大部分程序时,甚至不需要保存任何寄存器; 其它特权模式都含有两个独立的寄存器副本R13、R14,这样可以令每个模式都拥有自己的堆栈指针和连接寄存器; 四、当前程序状态寄存器(CPSR) CPSR中各位意义如下: T位:1——CPU处于Thumb状态,0——CPU处于ARM状态; I、F(中断禁止位):1——禁止中断,0——中断使能; 工作模式位:可以改变这些位,进行模式切换; 五、程序状态保存寄存器(SPSR) 当切换进入某一个特权模式时,SPSR保存前一个工作模式的CPSR值,这样,当返回前一个工作模式时,可以将SPSR的值恢复到CPSR中; 六、模式切换

《ARM嵌入式系统结构与编程》习题答案

1章绪论 1.国内嵌入式系统行业对“嵌入式系统”的定义是什么?如何理解?答:见教材1.1节。 2.嵌入式系统是从何时产生的,简述其发展历程。答:见教材1.1节。 3.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。 答:见教材1.2.1节的嵌入式Linux和嵌入式实时操作内核UC /OS-I 。 4.举例说明嵌入式设备在工控设备中的应用。答:见教材1.3节的“工业控制领域”。 5.未来嵌入式技术的发展趋势有哪些?答:见教材1.4节的嵌入式技术的发展趋势。 2章ARM技术与ARM体系结构 1.简述ARM处理器内核调试结构原理。答:对教材1.2节的图2-1进行描述。 2.分析ARM7TDMI-S各字母所代表的含义。答:参考教材 2.1.2 ARM核版本命名规则说明。3.ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。 ARM处理器共有7种工作模式: 用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式FIQ模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优(fast)中断产生时将会进入这种模式。 IRQ模式:也称为普通中断模式,:当一个低优先级中断产生时将会进入这种模式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ 模式下进行。 SVC模式:称之为管理模式,它是一种操作系统保护模式。当复位或软中断指令执行时处理器将进入这种模式。 中止模式:当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。 未定义指令异常模式:当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。 系统模式:使用和User模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。 在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式 4.分析程序状态寄存器(PSR)各位的功能描述,并说明C、Z、N、V在什么情况下进行置位和清零。PSR的具体格式为 V—溢出标志位 对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其他的指令通常不影响V位。 例如:两个正数(最高位为0)相加,运算结果为一个负数(最高位为1),则符号位溢出,相应V=1。

关于ARM中的名词常用解释

关于ARM中的名词常用解释 1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中断控制器; SPI:全双工串行接口; CAN:控制器局域网,一种串行通讯协议; PWM:脉宽调制器; ETM:嵌入式跟踪宏; CPSR:当前程序状态寄存器; SPSR:程序保护状态寄存器; 2.MAM 使用注意事项: 当改变MAM 定时值时,必须先通过向MAMCR 写入0 来关闭MAM,然后将新值写入MAM ti M。最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。 对于低于20MHz 的系统时钟,MAMTIM 设定为001。对于20MHz 到40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz 的系统时钟下,建议使用3cclk。

3.VIC 使用注意事项 如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x4000 0000。 4. ARM启动代码设计 ARM启动代码直接面对处理器内核和硬件控制器进行编程,一般使用汇编语言。启动代码一般包括: 中断向量表 初始化存储器系统 初始化堆栈初始化有特殊要求的端口、设备 初始化用户程序执行环境 改变处理器模式 呼叫主应用程序 5.IRQ 和FIQ 之间的区别 IRQ和FIQ是ARM处理器的两种编程模式。IRQ是指中断模式,FIR是指快速中断模式。对于FIQ 你必须尽快处理你的事情并离开这个模式。IRQ 可以被FIQ 所中断,但IRQ 不能中断FIQ。为了使FIQ 更快,所以这种模式有更多的影子寄存器。FIQ 不能调用SWI(软件中断)。FIQ 还必须禁用中断。如果一个FIQ 例程必须重新启用中断,则它太慢了,并应该是IRQ 而不是FIQ。

ARM技术中英文缩写解说

ARM技术中英文缩写解说 中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中断控制器; SPI:全双工串行接口; CAN:控制器局域网,一种串行通讯协议; PWM:脉宽调制器; ETM:嵌入式跟踪宏; CPSR:当前程序状态寄存器; SPSR:程序保护状态寄存器; 使用注意事项: 答:当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。 对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议将Flash 访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。 使用注意事项 答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x4000 0000。 4. ARM启动代码设计 答:ARM启动代码直接面对处理器内核和硬件控制器进行编程,一般使用汇编语言。启动代码一般包括:中断向量表 初始化存储器系统 初始化堆栈初始化有特殊要求的端口、设备 初始化用户程序执行环境 改变处理器模式 呼叫主应用程序 和 FIQ 之间的区别 答:IRQ和FIQ是ARM处理器的两种编程模式。IRQ是指中断模式,FIR是指快速中断模式。对于 FIQ 你必须尽快处理你的事情并离开这个模式。IRQ 可以被 FIQ 所中断,但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以这种模式有更多的影子寄存器。FIQ 不能调用 SWI(软件中断)。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了,并应该是 IRQ 而不是 FIQ。

《ARM嵌入式系统结构与编程》第二章课后答案

第2章ARM技术与ARM体系结构 1.简述ARM处理器内核调试结构原理 答:ARM处理器一般都带有嵌入式追踪宏单元ETM(Embedded Trace Macro),它是ARM 公司自己推出的调试工具。ARM处理器都支持基于JTAG(Joint Test Action Group 联合测试行动小组)的调试方法。它利用芯片内部的Embedded ICE来控制ARM内核操作,可完成单步调试和断点调试等操作。当CPU处理单步执行完毕或到达断点处时,就可以在宿主机端查看处理器现场数据,但是它不能在CPU运行过程中对实时数据进行仿真。 ETM解决了上述问题,能够在CPU运行过程中实时扫描处理器的现场信息,并数据送往TAP(Test Access Port)控制器。上图中分为三条扫描链(图中的粗实线),分别用来监视ARM核,ETM,嵌入式ICE的状态。 1.分析ARM7TDMI-S各字母所代表的含义。 答:ARM7 T D M I – S 中 ARM是Advanced RISC Machines的缩写 7是系列号; T:支持高密度16位的Thumb指令集; D:支持JTAG片上调试; M:支持用于长乘法操作(64位结果)ARM指令,包含快速乘法器;; I:带有嵌入式追踪宏单元ETM,用来设置断点和观察点的调试硬件; S:可综合版本,意味着处理器内核是以源代码形式提供的。这种源代码形式又可以编译成一种易于EDA工具使用的形式。 2.ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处 理器在什么情况下进入相应的模式。 答:ARM技术的设计者将ARM处理器在应用中可能产生的状态进行了分类,并针对同一类型的异常状态设定了一个固定的入口点,当异常产生时,程序会自动跳转到对应异常入口处进行异常服务。 ?1.用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下 执行。在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器不会自动切换工作模式 ?2.FIQ模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先

ARM寄存器详解

ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六 个。 R0~R7:是通用寄存器并可以用做任何目的。 R8~R12:是通用寄存器,但是在切换到FIQ模式的时候,使用它们的影子(shadow)寄存器。 R13:被称为栈指针寄存器,常用来保存栈指针。 R14:链接寄存器,常用来保存函数返回地址 R15:是程序指针PC CPSR:(Current Program Status Register)当前程序状态寄存器,CPSR 寄存期保存当前程序运行的状态。 0 0 0 0 0 User26 模式 0 0 0 0 1 FIQ26 模式 0 0 0 1 0 IRQ26 模式 0 0 0 1 1 SVC26 模式 1 0 0 0 0 User 模式 1 0 0 0 1 FIQ 模式 1 0 0 1 0 IRQ 模式 1 0 0 1 1 SVC 模式 1 0 1 1 1 ABT 模式 1 1 0 1 1 UND 模式

ARM寻址方式 1.立即数寻址 ARM 指令的立即数寻址是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数。ADD R0,R0,#1 ;R0←R0 + 1 ADD R0,R0,#0x3A ;R0←R0 + 0x3A 在以上 2 条指令中,第2个源操作数即为立即数,实际使用时以“#”符

号为前缀。 2.寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采 用的一种方式,也是一种执行效率较高的寻址方式。如以下的指令。 ADD R0,R1,R2 ;R0←R1 + R2 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。 3.寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器 中。例如以下指令。 ADD R0,R1,[R2] ;R0←R1 + [R2] LDR R0,[R1] ;R0←[R1] 在第1 条指令中,以寄存器R2 的内容作为操作数的地址,然后与R1相加,其结果存入 寄存器R0中。 第2条指令将以 R1 的值为地址的存储器中的内容送到寄存器R0中。 4.基址变址寻址 基址变址的寻址方式就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给 出的地址偏移量相加,从而得到一个操作数的有效地址。如下面的几条指令所示。 LDR R0,[R1,#0x0A] ;R0←[R1 + 0x0A] LDR R0,[R1,#0x0A]!;R0←[R1 + 0x0A]、R1←R1 + 0x0A 在第1条指令中,将寄存器R1 的内容加上0x3A 形成操作数的有效地址,将该地址处的 操作数送到寄存器R0中。 在第2条指令中,将寄存器R1的内容加上0x0A形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增0x0A个字节。 5.多寄存器寻址 采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用 一条指令完成传送最多 16 个通用寄存器的值。比如下面的指令。LDMIA R0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0 + 4]

ARM七种运行模式

s3c2440中断体系结构: 如何用中断? 1.中断发生:保存别人的状态 如何中断可以事先设置,对程序初始化,使能中断。 中断发生后,进入中断模式 2.中断处理 分辨中断源 进行不同的处理 清理工作 3.恢复别人的状态 过程:外界信号上升沿、下降沿,高电平、低电平都可以设置成信号引脚设置,再进入状态寄存器。 状态寄存器连接屏蔽寄存器 进入第二个状态寄存器,储存各种中断,可以储存多个中断 进入优先级寄存器,判断中断运行顺序 再进入屏蔽使能寄存器和模式寄存器 进入优先级寄存器 进入cpu处理 cpu的处理:进入入口地址 b handleIRQ 计算返回地址,被中断处地址 保存现场,即各寄存器状态 调用处理函数 函数运行完后恢复现场 函数的处理:分辨终端 处理中断 清除数据,即清除中断 1.中断寄存器 arm的七种模式 https://www.docsj.com/doc/eb3195117.html,r 用户模式r0-r15 2.fiq 快中断模式r0-r7 专用寄存器r8-r15, 3.svc 管理模式 专用寄存器r13-r14, 4.abt 数据访问终止模式 5.sys 系统模式 6.und 未定义指令终止模式 7.irq 中断模式 几种模式的区别:

嵌入式的中断: a.不同的寄存器 b.不同的权限 c.触发条件不一样 何时使用几种模式: usr 用户模式:arm处理器正常的程序执行状态 fiq 快中断模式:高速数据传输和通道处理 svc 管理模式:操作系统使用的保护模式 abt 数据访问终止模式:数据或者指令终止时进入,用于虚拟存储或者存储保护 sys 系统模式:运行具有特权的操作系统任务 und 未定义指令终止模式:未定义的指令执行时进入该模式,用于支持硬件处理器的软件仿真. irq 中断模式:用于通用的中断处理 后六种是特权模式,用于处理中断、异常和特殊权限处理 用户模式是最常见的模式 2.中断中的异常 中断是一种异常。 当发生中断时,cpu进入中断模式 cpu进入异常入口,异常入口是硬件规定的一个地址 运行模式 ARM920T 支持7 种运行模式: ●用户(usr)):正常ARM 程序执行状态 ●快中断(fiq)):为支持数据传输或通道处理设计 ●中断(irq)):用于一般用途的中断处理 ●管理(svc)):操作系统保护模式 ●中止(abt ): 数据或指令预取中止后进入 ●系统(sys)):操作系统的特权用户模式 ●未定义(und)):执行了一个未定义指令时进入 模式的改变可由软件控制,或者由外部中断或进入异常引起。大部分应用程序都将在用户模式执行。 被称为特权模式的非用户模式,都将进入到中断服务或异常中去,或者访问受保护的资源。内部寄存器 ARM920T 总共有37 个寄存器,其中31 通用32 位寄存器和6 个状态寄存器,但不能在同一时刻对所有的寄存器可见。处理器状态和运行模式决定了哪些寄存器对程序员可见。 ARM状态时内部寄存器集在ARM 状态,16 个通用寄存器和一个状态寄存器在任意时刻都可见。 在特权(非用户)模式下,将切换到指定模式的分组(banked)寄存器。图2-3 显示了哪些寄存器在各模式下是可见的:

ARM常用概念及基本功能使用说明

论坛推荐:新手必看,关于ARM的22个常用概念2014-04-22 电子发烧友网新手必看,关于ARM的22个常用概念! 1.ARM中一些常见英文缩写解释MSB:最高有效位;LSB:最低有效位;AHB:先进的高性能总线;VPB:连接片内外设功能的VLSI外设总线;EMC:外部存储器控制器;MAM:存储器加速模块;VIC:向量中断控制器;SPI:全双工串行接口;CAN:控制器局域网,一种串行通讯协议;PWM:脉宽调制器;ETM:嵌入式跟踪宏;CPSR:当前程序状态寄存器;SPSR:程序保护状态寄存器; 2.MAM 使用注意事项:答:当改变MAM 定时值时,必须先通过向MAMCR 写入0 来关闭MAM,然后将新值写入MAMTIM。最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。对于低于20MHz 的系统时钟,MAMTIM 设定为001。对于20MHz 到40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。 3.VIC 使用注意事项答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x4000 0000。 4.ARM启动代码设计答:ARM启动代码直接面对处理器内

核和硬件控制器进行编程,一般使用汇编语言。启动代码一般包括:中断向量表初始化存储器系统初始化堆栈初始化有特殊要求的端口、设备初始化用户程序执行环境改变处理器模式呼叫主应用程序 5.IRQ 和FIQ 之间的区别答:IRQ和FIQ是ARM处理器的两种编程模式。IRQ是指中断模式,FIR是指快速中断模式。对于FIQ 你必须尽快处理你的事情并离开这个模式。IRQ 可以被FIQ 所中断,但IRQ 不能中断FIQ。为了使FIQ 更快,所以这种模式有更多的影子寄存器。FIQ 不能调用SWI(软件中断)。FIQ 还必须禁用中断。如果一个FIQ 例程必须重新启用中断,则它太慢了,并应该是IRQ 而不是FIQ。 6.ARM处理器对异常中断的响应过程答:ARM处理器对异常中断的响应过程如下所述:保存处理器当前状态、中断屏蔽位以及各条件标志位;设置当前程序状态寄存器CPSR中的相应位;将寄存器lr_mode设置成返回地址;将程序计数器值PC,设置成该异常中断的中断向量地址,跳转到相应异常中断处执行。 7.ARM指令与Thumb指令的区别答:在ARM体系结构中,ARM指令集中的指令是32位的指令,其执行效率很高。对于存储系统数据总线为16位的应用系统,ARM体系提供了Thumb指令集。Thumb指令集是对ARM指令集的一个子集重新编码得到的,指令长度为16位。通常在处理器执行ARM程序时,称处理器处于ARM

ARM处理器共有37个寄存器其中包括.

ARM处理器共有37个寄存器。其中包括: **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。 **6个状态寄存器。这些寄存器都是32位寄存器。 ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。 **************************************************** 通用寄存器 ***************************************************8 通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC 未备份寄存器 未备份寄存器包括R0-R7。对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。 备份寄存器 对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。 对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。采用下面的记号来区分各个物理寄存器: R13_ 其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq 程序计数器PC 可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。由于ARM采用了流水线处理器机制,当正确读取了PC的值时,该值为当前指令地址值加上8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。由于ARM指令是字对齐的,PC值的第0位和第一位总为0。

ARM基础知识详解

复习问题提纲 第一讲基础知识 1.什么是嵌入式系统(IEEE定义和国内普遍认同的定义分别是什么)? IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置” 国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 更简单的讲:就是嵌入到对象体中的专用计算机系统。 三要素:嵌入、专用、计算机 嵌入性:嵌入到对象体系中,有对象环境要求 专用性:软、硬件按对象要求裁减 计算机:实现对象的智能化功能 2.嵌入式系统的特点? 1、专用软、硬件可剪裁可配置; 2、低功耗、高可靠性、高稳定性; 3、软件代码短小精悍; 4、代码可固化; 5、实时性; 6、弱交互性 7、嵌入式系统软件开发通常需要专门的开发工具和开发环境; 8、要求开发、设计人员有较高的技能。 3.嵌入式系统的组成? 嵌入式系统总体上是由硬件和软件组成的,硬件是其基础,软件是其核心和灵魂。 第二讲ARM技术概述(以下指的arm处理器都是指ARM920T) 1.arm处理器是32位架构,它支持的基本数据类有哪3个(提示:字 节、?、?)? (1)Byte:字节,8bit (2)Halfword:半字,16bit(半字必须与2字节边界对齐)(3)word: 字,32bit(字必须与4字节边界对齐) 2.什么是存储大小端模式? 所谓的大端模式,是指高位字节存放在低地址单元中,而低位字节存放在高地址单元中。 所谓的小端模式,是指低位字节存放在低地址单元中,而高位字节存放在高地址单元中。

ARM汇编之寄存器

在线学习好工作https://www.docsj.com/doc/eb3195117.html,/ ARM汇编之寄存器 ARM A系列寄存器的情况 这是寄存器的总表,下面是CPU的各个模式,上面的纵轴就是寄存器组。 CPU在运行的时候为什么会有寄存器? 想象CPU是一个圈一直在运转,然后寄存器里面有大量的指令,这些指令不知道从哪里来的,但是一般情况下我们的程序在计算我们的程序,我们的程序一般是放在内存里面的,它从内存里面把这些程序读进来之后,在运行,但是如果现在这个程序在运行时异常,那么就要进行CPU状态的切换,除了状态切换之外,当前的一些数据结果需要进行一个保存,但是如果要把这个结果存到内存去,内存并不稳定并且很慢,所以就要想办法能不能找到一个临时空间保存一下,这就是为什么会诞生寄存器。

设置寄存器的原因就是为了更好的去控制和达到效率,ARM体系为了很好的去控制CPU,设定了哪些寄存器? User纵轴上的十三个寄存器称为通用寄存器,R13是一个比较特殊的寄存器,也叫做SP,就是占指针的寄存器,就是指向某一些占空间,R14是LR,就是连接寄存器,它肯定是去连接某一个地方。R15是PC,这是程序计数器,这是CPU在每一个空间切换的时候的计数器,最下面那个也就是APSR或者CPSR,PSR 就是程序状态寄存器,A代表应用程序状态寄存器,C代表当前程序状态寄存器。 在往下就类似于R17,只不过它叫做SPSR,S就是以保存程序代表寄存器或者我们也可以称为存储状态寄存器,通过这些我们大概把寄存器了解了。 那么这上面分为通用的,那么下面就是特殊寄存器,从横向来看,我们可以看到在USR模式下面,这样寄存器挺全的,但是USR下面没有SPSR,就是没有存储状态的寄存器,然后FIQ快速中断模式下面面是共享R0到R7,意思就是这些模式下的R0到R7它们与USR模式下的R0到R7是共享的,这样如果存储一些数据在R0到R9下面,突然发生异常,切换到另一个模式,那么我们就应该要想办法把这个存取一下,因为另一个模式可能也要往这里面写东西,那么写之前就应该把USR模式下的先保留一下,到时候退出解决后在还原回来,所以我们要一个R0到R7这块寄存器是共享的,同样FIQ后面几个模式的R8到R12也是和USR共享的,只有FIQ是自己独有的,同样的我们在看到PC计数器也是共享的,还有SPSR也是共享的,但是SPSR每个状态都有自己独有的。

ARM嵌入式系统复习题

嵌入式系统复习题 一、简答题 1、什么是嵌入式处理器,嵌入式处理器可以分为几大类? 嵌入式处理器是为了完成特殊的应用而设计的特殊目的的处理器,分为嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片上系统(SOC)。 2、广泛使用的三种类型的操作系统? 多道批处理操作系统、分时操作系统以及实时操作系统。 3、什么是RISC?什么是CISC? RISC是精简指令集计算机的缩写。CISC是复杂指令集计算机的缩写。 4、ARM7TDMI中的T、D、S、I分别表示什么含义? T:支持高密度16位的Thumb指令集;D:支持片上调试;S:ARM7TDMI 的可综合(synthesizable)版本(软核);I:支持EmbededICE观察硬件;M:支持64位乘法 5、ARM7TDMI处理器采用什么样的体系结构,其可寻址地址空间多大? ARM处理器使用冯.诺依曼结构;使用单个平面的232个8位字节地址空间。地址空间可以看作是包含230个32位字,或231个16位半字。 6、ARM7TDMI处理器采用几级流水线处理,使用何种存储器编址方式? ARM7TDMI处理器采用三级流水线;ARM处理器将存储器看做是一个从0开始的线性递增的字节集合。 7、ARM处理器模式和ARM处理器状态有什么区别? ARM处理器模式指用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。ARM处理器状态指ARM状态和Thumb状态ARM两种处理器状态下均有上述7种模式。 8、ARM7TDMI内部寄存器特点? 分别为31个通用32位寄存器和6个状态寄存器。它们不能在同一使劲同时被访问,对其的访问取决于处理器状态和处理器模式。 9、ARM7TDMI有几种寻址方式? 寄存器寻址、立即寻址、寄存器移位寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、相对寻址。 10、ARM7的内部寄存器R13、R14、R15的主要功能和作用? R13:堆栈指针,用于保存堆栈的出入口处地址、保存待使用寄存器的内容R14:连接寄存器,当使用BL指令调用子程序时,返回地址将自动存入14中;当发生异常时,将R14对应的异常模式版本设置为异常返回地址;其他时候作为通用寄存器。

ARM基础知识(强烈推荐)

ARM基础知识(强烈推荐).txt有谁会对着自己的裤裆傻笑。不敢跟他说话却一遍一遍打开他的资料又关上。用了心旳感情,真旳能让人懂得很多事。╮如果有一天,我的签名不再频繁更新,那便证明我过的很好。ARM基础知识(强烈推荐) ARM基础知识一 ARM处理器共有37个寄存器。其中包括: **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。 **6个状态寄存器。这些寄存器都是32位寄存器。 ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。 **************************************************** 通用寄存器 ***************************************************8 通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC 未备份寄存器 未备份寄存器包括R0-R7。对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。 备份寄存器 对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。 对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。采用下面的记号来区分各个物理寄存器: R13_ 其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq 程序计数器PC

ARM复习课后题答案(完整版)..

1.国内嵌入式系统行业对嵌入式系统的定义是什么?如何理解 答:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 从这个定义看以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统要求进行合理的裁剪利用。因此有人把嵌入式系统比作是一个针对特定的应用而量身定做的专用计算机系统。 2.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点 答:嵌入式linux和嵌入式实时操作系统uc/os-II Linux: (1)linux是源码开放的,每一个技术细节都是透明的,易于裁剪定制。 (2)目前嵌入式linux已经在多种嵌入式处理器芯片移植成功,有大量且不断增加的开发工具,这些工具为嵌入式系统开发提供了良好的开发环境。 (3)Linux内核小、功能强大、运作稳定、效率高。 Ucos: (1)源代码公开 (2)可移植性。 (3)可固化 (4)可裁剪 (5)占先式 (6)多任务 (7)可确定性。 (8)系统服务 第2章ARM技术与ARM体系结构 3.arm处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理 器在什么情况下进入相应的模式。 答:ARM 处理器共有7 种工作模式: 用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式 下执行。在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作 模式,如果有异常发生,处理器会自动切换工作模式 FIQ 模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优 先级(fast)中断产生时将会进入这种模式。 IRQ 模式:也称为普通中断模式,:当一个低优先级中断产生时将会进入这种模 式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中 断处理都在IRQ 模式下进行。 SVC 模式:称之为管理模式,它是一种操作系统保护模式。当复位或软中断指 令执行时处理器将进入这种模式。 中止模式:当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟 存储或存储保护。 未定义指令异常模式:当执行未定义指令时会进入这种模式,主要是用来处理 未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协 处理器的操作上。 系统模式:使用和User 模式相同寄存器组的特权模式,用来运行特权级的操作

实验三 ARM工作模式切换实验

实验三ARM工作模式切换实验 一、实验目的 1. 掌握ARM的各种工作模式 2.熟悉ARM各种工作模式下的寄存器 3. 学会使用软件编程实现ARM工作模式间的切换 二.实验内容和步骤 任务:使用MSR/MRS指令切换工作模式(ARM9) (1)创建项目,并添加shiyan3.s源文件,文件内容如下: 程序解读:本程序使用MSR/MRS指令完成系统初始化过程从管理模式到用户模式的切换,采用Softsim方式调试,选用ARM9TDMI作为目标处理器。 .text .global _start _start: /* 安装中断向量表*/ /*只定义了Reset_Handler 入口,其它中断跳转到自身 */ B Reset_Handler Undefined_Handler: B Undefined_Handler B SWI_Handler Prefetch_Handler: B Prefetch_Handler

Abort_Handler: B Abort_Handler NOP IRQ_Handler: B IRQ_Handler FIQ_Handler: B FIQ_Handler SWI_Handler: MOV PC,LR Reset_Handler: /* into System mode */ MRS r0,CPSR BIC r0 , r0 , #0x1F ORR r0 , r0 , #0x1F MSR CPSR ,r0 /* into FIQ mode */ MRS r0,CPSR BIC r0 , r0 , #0x1F ORR r0 , r0 , #0x11 MSR CPSR ,r0 /*注意在调试器中观察该模式下的寄存器r8-r14有无发生变化*/ /* into SVC mode */ MRS r0,CPSR BIC r0 , r0 , #0x1F

ARM体系及原理

1.1ARM体系结构概述 2.1指令集体系结构 1. 一条ARM指令的最高四位bit[31:28]为条件域(condition field),根据其值的不同来确定当前指令对CPSR中的N、Z、C和V标志的设置与否。 2. ARM指令集支持一个向前或向后32M范围内跳转的Branch指令。如果是Branch and Link指令,则除了支持向前或向后的32M范围跳转外,还能将跳转指令的下一条指令地址(返回地址)压入R14(LR)。而在ARMv4以上支持T的版本中,还有Branch and Exchange指令,此指令可以拷贝通用寄存器Rm的值到PC中,而若其bit[0]为0,则进行ARM至Thumb的切换。 3. ARM指令集中包含了状态寄存器获取指令MSR和MRS用来对CPSR和SPSR进行操作。同时ARM指令集还提供了对协处理器的操作指令MCR和MRC。 4. SWI提供了软件中断的功能,此指令的bit[23:0]为一个立即数,ARM处理器会忽略这个立即数,但这个立即数可以提供异常处理程序使用。 2.2寄存器 通用寄存器(r0-r15): 不分组寄存器r0-r7: 可以工作在所有的处理模式下,没有隐含的特殊用途 分组寄存器r8-r14: 分组寄存器的使用取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。 寄存器R13通常用作堆栈指针,称作sp。每种异常模式都有自己的R13。通常R13被初始化为指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中,返回时,重新将这些值加载到寄存器中。

寄存器R14用作子程序链接寄存器lr。当指令BL指令时,得到R15(PC)寄存器的备份。 程序寄存器R15: ARM状态下,PC位[1:0]为0(字对齐)。 Thumb状态下,位[0]为0(半字对齐)。 由于流水线特性,PC总是指向当前执行指令的下两条指令地址。 程序状态寄存器: 所有处理器模式下都访问相同的CPSR,CPSR包含条件码标志。中断禁止位,当前处理器模式以及其他状态和控制信息。 每种异常模式下都有一个程序状态保存寄存器,发生异常时,SPSR用来保存CPSR的状态。 2.3工作模式和特权等级 ARM工作模式: ARM工作状态:从编程的角度看有两种并可以切换 ARM状态:执行32位字对齐的ARM指令 THunb状态:执行 16位的半字对齐 thumb指令注意:ARM 状态下只能执行ARM指令 thumb也是 存储器格式:0-3第一个字 4-7第二个………………. 因此 ARM最大寻址是 4GB 大端格式:高字节存放在低地址空间 小端空间:高字节放高地址,低地址存放低字节 ARM绝大多数时候使用小端格式 指令长度: ARM支持字节,半字,字三种数据类型其中字需要4字节对齐(地址的低两位是0) 半字需要2字节对齐(地址最低位0) 工作模式: 1:用户模式 usr:正常执行程序 2:快速中断模式FIQ: 用于高速数据的传送 3:外部中断模式IRQ: 用于通常的中断处理 4:管理模式svc: super verzer 超级模式,操作系统使用的保护模式 5:数据访问终止模式abt:当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护 6:系统模式sys: 运行具有特权的操作系统任务 7:未定义指令终止模式und: 当未定义的指令执行时进入该模式,可用于支持硬件除用户模式外,其它称为非用户模式,或者是特权模式除去用户模式和系统模式, 其它称为异常模式. 2.4存储器和映射 1.多数的系统需要通过以下的一些方式来初始化和控制存储系统设备: 1)使能Cache,以保证Cache执行所能获得的效益最大化 2)为虚拟存储系统建立虚拟到物理存储的映射 3)为不同的存储区域建立约束规则 4)保证在正确的时间,以正确的方式对存储映射I/O的获取 2.存储系统应该按以下的方式配置: 1)主存储区(RAM)应该被配置成cachable和bufferable; 2)ROM存储区通常只配置成cachable和只读,因此bufferable属性不会被设置。 3.一些ARM实现中包含了一种契入式的write buffer,将多次对同一位置的写操作归并成对主存储区的一次操作。此外一些write buffer还支持写操作 的重排序,那样会使处理器提交的写操作顺序与实际的写操作提交给存储区的顺序存在差异。因此,对I/O区域尽量不要配置成bufferable,以保证对I/O设置的写操作能以一个正确的顺序执行。 4. 所有存储和系统相关的特性都由协处理器15(CP15)来控制,因此CP15也被称为系统控制协处理器。其包含共计16个32位的主寄存器。此外,由于寄存器获取指令中可以包含额外的位来辨识特定的寄存器版本和(或者)对寄存器特定的获取方式,所以实际CP15种的32bit物理寄存器可以超过16个。CP15的属性可以是只读、只写或者可读可写。 5. ARM仅仅定义了一类对CP15操作的指令,即MCR和MRC,其中MCR用来将一个ARM寄存器的值写入CP15,而MRC指令可以将一个CP15寄存器的值读入ARM寄存器中。MRC和MCR指令只有在各个特权模式下才能正常执行,如果是在用户模式下执行这两条指令,则会导致一个未定义指令的异常发生。 CP15 Register 1中各个位的含义如下: M(bit[0]) MMU或保护单元使能位 A(bit[1]) 对齐错误校验使能位 C(bit[2]) Cache使能位(如果是统一cache架构,则标识统一cache使能,如果是独立cache架构,则标识数据cache使能) W(bit[3]) Write buffer使能位 P(bit[4]) 异常处理模式选择位,可选择进入26-bit模式或32-bit模式 D(bit[5]) 26-bit地址异常校验使能位 L(bit[6]) Abort模式版本选择位 B(bit[7]) 大端或小端配置位 S(bit[8]) 系统保护位(在基于MMU的存储系统中使用)

相关文档