ARM中断及相关寄存器

合集下载

arm9处理器的内部寄存器结构

arm9处理器的内部寄存器结构

arm9处理器的内部寄存器结构
ARM9处理器是一种32位的嵌入式处理器,内部包含了多种寄存器,这些寄存器扮演着不同的角色,用于存储不同类型的数据和指令,从而实现处理器的各种功能。

ARM9处理器的内部寄存器结构主要包括:
1.通用寄存器:ARM9处理器有16个32位的通用寄存器,这些寄存器不仅可以用于存储数据,还可以用于存储指令中的操作数。

通用寄存器还可以用于存储函数的参数和返回值。

2.程序计数器(PC):程序计数器是一个32位的寄存器,用于存储当前正在执行的指令的地址。

当处理器执行完一条指令后,PC会自动递增,指向下一条指令的地址。

3.状态寄存器:状态寄存器用于存储处理器的当前状态。

例如,它可以用于存储处理器的运行模式,或者存储处理器的条件码。

4.堆栈指针(SP):堆栈指针用于指向当前的堆栈顶部。

当处理器需要执行函数调用或其他需要使用堆栈的指令时,它会将数据压入堆栈中,并将堆栈指针减小。

当函数返回时,处理器会将数据从堆栈中弹出,并将堆栈指针增加。

5.链接寄存器(LR):链接寄存器用于存储函数调用的返回地址。

当函数被调用时,处理器将当前指令的地址存储在LR中。

当函数执行完毕后,处理器会将LR中的地址作为返回地址,跳转回调用函数的地方。

6.中断寄存器:中断寄存器用于存储当前中断的状态。

当处理器
接收到一个中断时,它会将当前的状态保存在中断寄存器中,并跳转到中断处理程序的地址。

总之,ARM9处理器的内部寄存器结构是非常复杂的,不同类型的寄存器扮演着不同的角色。

通过合理地利用这些寄存器,程序员可以实现各种复杂的嵌入式应用。

ARM的37个寄存器详解

ARM的37个寄存器详解

ARM的37个寄存器详解ARM寄存器ARM共有37个32位物理寄存器,7种⼯作模式下可访问的寄存器见下表,User和System使⽤完全相同的物理寄存器。

2.1 R0~R7所有⼯作模式下,R0-R7都分别指向同⼀个物理寄存器(共8个物理寄存器),它们未被系统⽤作特殊的⽤途。

在中断或异常处理进⾏⼯作模式转换时,由于不同⼯作模式均使⽤相同的物理寄存器,可能造成寄存器中数据的破坏。

2.2 R8~R12在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同⼀个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独⽴的物理寄存器(共5个物理寄存器)。

2.3 R13和R14在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各⾃模式下独⽴的物理寄存器(共12个物理寄存器)。

R13在ARM指令中常⽤作堆栈指针(SP),但这只是⼀种习惯⽤法,⽤户也可使⽤其他的寄存器作为堆栈指针。

⽽在Thumb指令集中,某些指令强制性的要求使⽤R13作为堆栈指针。

由于处理器的每种⼯作模式均有⾃⼰独⽴的物理寄存器R13,在⽤户应⽤程序的初始化部分,⼀般都要初始化每种模式下的R13,使其指向该⼯作模式的栈空间。

这样,当程序进⼊异常模式时,可以将需要保护的寄存器放⼊R13所指向的堆栈,⽽当程序从异常模式返回时,则从对应的堆栈中恢复,采⽤这种⽅式可以保证异常发⽣后程序的正常执⾏。

R14称为链接寄存器(Link Register),当执⾏⼦程序调⽤指令(BL)时,R14可得到R15(程序计数器PC)的备份。

在每⼀种⼯作模式下,都可⽤R14保存⼦程序的返回地址,当⽤BL或BLX指令调⽤⼦程序时,将PC的当前值复制给R14,执⾏完⼦程序后,⼜将R14的值复制回PC,即可完成⼦程序的调⽤返回。

以上的描述可⽤指令完成。

执⾏以下任意⼀条指令:MOV PC, LRBX LR在⼦程序⼊⼝处使⽤以下指令将R14存⼊堆栈:STMFD SP!,{,LR}对应的,使⽤以下指令可以完成⼦程序返回:LDMFD SP!,{,PC}R14也可作为通⽤寄存器。

ARM寄存器组成

ARM寄存器组成

ARM寄存器组成R8~R14、SPSR寄存器则被切换到各个模式下的私有寄存器组上,不同的模式下可以访问相应的私有寄存器。

表1显示了在每种模式下,哪些寄存器是有效的(阴影部分的寄存器都是私有寄存器)。

表1ARM状态下的寄存器组织结构从表1中我们可以看出:☆R0~R7、R15、CPSR寄存器组在任何模式下都是共用的,可访问的;☆R13、R14寄存器在用户(uer)和系统(y)模式下共用一套;其他模式(管理(vc)、中止(abt)、未定义(und)、中断(irq)、快中断(fiq)模式)下都具有两个私有寄存器R13和R14。

这就使得这些模式中的每一种模式都具有各自的堆栈寄存器指针R13和链接寄存器R14,分别用于堆栈处理和异常退出;☆SPSR寄存器可用于保存CPSR的值,在用户和系统模式下不能访问,在其他模式下都有私有的SPSR寄存器。

表1中第二列列举了寄存器在汇编语言中的名称,其中括号中的内容是别称。

下面我们对这些寄存器的功能进行介绍。

1、一般通用寄存器R0~R12寄存器R0~R12为保存数据或地址值的一般通用寄存器。

其中寄存器R0~R7为未分组的寄存器,R8~R12为分组寄存器。

未分组的寄存器意味着对于任何处理器模式,他们中的每一个都对应于相同的32位物理寄存器。

他们是完全通用的寄存器,分组寄存器意味着同一个寄存器名对应多个物理寄存器,具体所对应的物理寄存器取决于当前的处理器模式。

参照表2-1,寄存器R8~R12有两个分组物理寄存器。

一组用于除FIQ模式之外的所有寄存器模式(R8~R12),另一组用于FIQ模式(R8_fiq~R12_fiq)。

、寄存器R8~R12在ARM体系结构中没有特定的用途。

不过对于那些只使用R8~R14来说就足够处理的简单的中断,FIQ所单独使用的这些寄存器可实现快速的中断处理。

2、堆栈指针R13寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器,见表2-1。

一个用于用户和系统模式,其余5个分别用于5种异常模式。

举例arm芯片的三个专用寄存器的名称

举例arm芯片的三个专用寄存器的名称

ARM体系结构是一种经典的32位精简指令集(RISC)处理器架构。

在ARM处理器架构中,有许多专用寄存器用于特定的功能,例如控制处理器状态、存储系统和I/O设备的配置信息等。

以下是ARM处理器架构中三个常见的专用寄存器的名称及其功能:1.程序状态寄存器(CPSR)程序状态寄存器(CPSR)是ARM处理器架构中最重要的专用寄存器之一。

它用于存储处理器的当前执行状态,包括当前处理器模式(用户模式、系统模式等)、条件标志位(零标志、负标志等)以及中断屏蔽状态。

通过读取和修改CPSR的值,软件可以控制处理器的执行状态,例如启用或禁用中断、切换处理器模式等。

CPSR的位字段结构非常复杂,需要仔细阅读ARM体系结构手册以理解其所有细节。

2.控制寄存器(CR)控制寄存器(CR)是用于控制处理器操作模式和系统功能的专用寄存器。

其中包括了配置指令和操作类型,如分支指令的方式(指数或者相关)、数据访问权限(只读或者读写)等。

通过对CR的设置,软件可以控制处理器的操作行为,例如启用或禁用高速缓存、配置分支预测算法等。

CR寄存器中的内容对于系统的性能和功能有着重要的影响,因此需要谨慎设置。

3.中断控制寄存器(ICR)中断控制寄存器(ICR)用于存储处理器中断系统的配置信息和状态。

ICR包括了中断屏蔽寄存器和中断向量寄存器两部分。

中断屏蔽寄存器用于控制处理器对各种中断的响应,包括屏蔽中断、启用中断等。

中断向量寄存器用于存储中断向量表的起始位置区域,当发生中断时,处理器从中断向量表中读取相应中断处理程序的入口位置区域。

ICR的设置对于系统的中断处理有着重要的影响,需要根据具体的系统需求进行合理配置。

总结上述是在ARM处理器架构中,三个常见的专用寄存器及其功能。

这些专用寄存器对于处理器的操作和系统的性能有着重要的影响,需要在系统软件开发和调试过程中予以重视。

更多的专用寄存器和其功能还需要开发者去阅读ARM体系结构手册获取更多了解。

ARM寄存器

ARM寄存器
#define BCFG2 (*((volatile unsigned int *) 0xFFE00008)) /* lpc22xx only */
#define BCFG3 (*((volatile unsigned int *) 0xFFE0000C)) /* lpc22xx only */
/* 管脚连接模块控制寄存器 */
#define PINSEL0 (*((volatile unsigned long *) 0xE002C000))
#define PINSEL1 (*((volatile unsigned long *) 0xE002C004))
/* External Interrupts */
/* 外部中断控制寄存器 */
#define EXTINT (*((volatile unsigned char *) 0xE01FC140))
#define EXTWAKE (*((volatile unsigned char *) 0xE01FC144))
#define IOPIN (*((volatile unsigned long *) 0xE0028000)) /* lpc210x only */
#define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014))
#define VICSoftInt (*((volatile unsigned long *) 0xFFFFF018))
#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C))
#define VICVectAddr15 (*((volatile unsigned long *) 0xFFFFF13C))

arm寄存器的分类

arm寄存器的分类

arm寄存器的分类ARM寄存器是ARM体系结构中的一部分,用于存储和处理数据。

根据其功能和用途的不同,ARM寄存器可以分为通用寄存器、程序状态寄存器、系统控制寄存器和浮点寄存器等多个类别。

一、通用寄存器通用寄存器是最常用的寄存器类型,用于存储临时数据、变量和计算结果等。

ARM体系结构提供了16个32位的通用寄存器,分别用R0-R15表示。

其中,R0-R12可用于存储数据和计算结果,R13为堆栈指针SP,R14为链接寄存器LR,R15为程序计数器PC。

通用寄存器具有快速访问和高灵活性的特点,可以在程序执行过程中频繁读写。

在函数调用过程中,通用寄存器用于保存临时变量、函数参数和返回值,保证程序的正确执行。

二、程序状态寄存器程序状态寄存器(CPSR)是ARM体系结构中的一种特殊寄存器,用于存储和控制程序的执行状态。

CPSR寄存器是一个32位的寄存器,包含了当前程序的运行状态、中断控制状态和条件执行状态等信息。

CPSR寄存器的位域有多个,其中最重要的有条件执行位、中断控制位和程序状态位等。

条件执行位用于控制条件分支指令的执行,中断控制位用于控制中断的使能和禁止,程序状态位用于记录程序的运行状态,如运行模式、状态标志和当前指令的执行情况等。

三、系统控制寄存器系统控制寄存器(SCR)是ARM体系结构中的一种特殊寄存器,用于存储和控制系统的运行状态。

SCR寄存器是一个32位的寄存器,包含了系统的控制状态、访问权限和异常处理等信息。

SCR寄存器的位域有多个,其中最重要的有访问权限位、异常处理位和系统控制位等。

访问权限位用于控制对系统资源的访问权限,异常处理位用于控制异常处理器的行为,系统控制位用于控制系统的运行方式和功能。

四、浮点寄存器浮点寄存器是ARM体系结构中的一种特殊寄存器,用于存储和处理浮点数数据。

ARM体系结构提供了16个32位或64位的浮点寄存器,分别用S0-S31或D0-D31表示。

其中,S0-S15用于单精度浮点数操作,D0-D15用于双精度浮点数操作。

ARM中断程序的原理和实现

ARM中断程序的原理和实现

ARM中断程序的原理和实现引言:中断是计算机系统中一种特殊的事件,它可以打断当前正在执行的程序,并执行一段特定的代码。

在ARM架构中,中断主要由两部分组成:中断处理程序和中断控制器。

本文将介绍ARM中断程序的原理和实现,包括中断的基本概念、中断的分类、中断的处理过程以及中断控制器的实现方式。

一、中断的基本概念中断可以看作是外部设备向CPU发送一个请求的一种方法。

当外部设备发生一些特定的事件时(如按键、时钟周期等),它会产生一个中断请求信号,通知CPU去处理相应的事件。

CPU收到中断请求信号后,会暂停当前的任务,保存现场并跳转到中断处理程序来处理中断。

二、中断的分类1.外部中断:外部中断是由外设产生的中断信号,如GPIO、串口等。

当外设产生中断请求信号时,中断控制器会将信号传递给CPU,触发相应的中断处理程序。

2.软件中断:软件中断是由软件主动触发的中断,通过软件指令可以触发中断控制器发送中断请求信号给CPU。

软件中断可以用于实现系统调用、任务切换等功能。

三、中断的处理过程1.中断请求:外部设备发生特定事件,产生中断请求信号。

中断请求信号会被中断控制器接收并传递给CPU。

2.中断响应:CPU收到中断请求信号后,会立即响应中断,并执行中断处理程序。

在响应中断之前,CPU需要保存当前的现场(包括程序计数器PC、寄存器等)。

3.中断处理:CPU跳转到中断处理程序的入口地址,开始执行中断处理程序。

中断处理程序通常用来处理中断事件,并根据需要进行中断服务例程的调用。

4.中断返回:中断处理程序执行完毕后,CPU会根据中断处理程序的返回指令返回到原来的程序中,并恢复之前保存的现场。

同时,中断控制器会清除中断请求信号,使其能够接受新的中断请求。

四、中断控制器的实现方式ARM架构中,中断控制器常用的实现方式包括级联式中断控制器和向量式中断控制器。

1.级联式中断控制器:级联式中断控制器是一种层级结构的中断控制器。

它包含多个级别的中断控制器,每个级别对应一组中断请求。

ARM寄存器的总结

ARM寄存器的总结
ARM寄存器的总结
ARM处理器共有37个寄存器:
1) 31个通用寄存器,包括程序计数器(PC)。这些寄存器都是32位的;
2)6个状态寄存器。这些寄存器也是32位的,但是只使用了其中的12位。
ARM通用寄存器
通用寄存器(R0-R15)可分为三类:不分组寄存器R0~R7;分组寄存器R8~R14;程序计数器PC。
1)不分组寄存器R0~R7
不分组寄存器R0~R7在所有处理器模式下,它们每一个都访问一样的32位寄存器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
2)分组寄存器R8~R14
分组寄存器R8~R14对应的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。
寄存器R8~R12各有两组物理寄存器:一组为FIQ模式,另一组为除了FIQ以外的所有模式。寄存器R8~R12没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器R13,R14各对应6个分组的物理寄存器,1个用于用户模式和系统模式,其它5个分别用于5种异常模式。寄存器R13通常用做堆栈指针,称为SP;寄存器R14用作子程序链接寄存器,也称为LR。
中断禁止位:I置1则禁止IRQ中断;F置1则禁止FIQ中断。
T位:T=0指示ARM执行;T=1指示Thumb执行。在这些体系结构系统中,可自由地使用能在ARM和Thumb状态之间切换的指令。
模式位:M0,M1,M2,M3和M4(M[4:0])是模式位,这些位决定处理器的工作模式,如表所示。
3)其他位
程序状态寄存器的其他位保留,用作以后的扩展。
ARM核工作在用户模式,R0~R15可用。
存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。字节零到字节三放置第一个字(WORD),字节四到字节七存储第二个字,以此类推。

ARM7内核的中断屏蔽方法

ARM7内核的中断屏蔽方法

ARM7内核的中断屏蔽方法ARM7内核的中断屏蔽方法是通过设置与中断相关的寄存器来实现的。

ARM7内核提供了多个中断屏蔽寄存器,可以分别对不同的中断进行屏蔽设置。

下面将对常见的中断屏蔽方法进行详细介绍,包括通过CPSR寄存器和INTCON寄存器进行中断屏蔽。

1.CPSR寄存器屏蔽中断ARM7内核的CPSR寄存器(Current Program Status Register)是一个32位寄存器,其中的第7位(I-bit)用于控制中断的屏蔽。

当I位为1时,中断被屏蔽,当I位为0时,中断不被屏蔽。

通过修改CPSR寄存器的I位,可以实现对中断的屏蔽和开启。

中断屏蔽可以通过以下方式进行设置:(1)通过修改CPSR寄存器的I位:在特权级别下,可以直接修改CPSR寄存器的I位,来控制中断的屏蔽。

(2)通过使用屏蔽和解屏函数:ARM提供了两个专门的汇编指令用于修改CPSR寄存器的I位,分别是CPSID和CPSIE。

CPSID指令用于屏蔽中断,CPSIE指令用于解除中断的屏蔽。

2.INTCON寄存器屏蔽中断ARM7内核还提供了INTCON寄存器(Interrupt Control Register)用于屏蔽和控制外部中断的响应。

INTCON寄存器是一个32位的寄存器,每个位对应一个外部中断的屏蔽位。

当一些屏蔽位为1时,对应的中断将被屏蔽,当屏蔽位为0时,对应的中断不被屏蔽。

通过修改INTCON寄存器的屏蔽位,可以实现对外部中断的屏蔽和开启。

中断屏蔽可以通过以下方式进行设置:(1)直接修改INTCON寄存器的屏蔽位:在特权级别下,可以通过直接写入INTCON寄存器来修改外部中断的屏蔽位。

(2)使用特殊函数来修改INTCON寄存器的屏蔽位:ARM提供了特殊的函数用于修改INTCON寄存器的屏蔽位。

需要注意的是,中断屏蔽方法只能屏蔽外部中断,对于内部中断(如软中断、异常中断)无法进行屏蔽。

同时,ARM7内核的中断屏蔽方法也存在优先级的问题,当多个中断同时发生时,只会响应优先级最高的中断请求。

ARM寄存器详解

ARM寄存器详解

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寄存器

ARM寄存器

ARM寄存器简介ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。

(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。

(2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。

1.通用寄存器在ARM处理器的7种模式下都有一组对应的寄存器组。

在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。

在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。

详细如表1-3所示。

表1-3 ARM物理寄存器用户模式/系统模式特权模式中止模式未定义指令模外部中断模快速中断模R0 R0 R0 R0 R0 R0R1 R1 R1 R1 R1 R1R2 R2 R2 R2 R2 R2R3 R3 R3 R3 R3 R3R4 R4 R4 R4 R4 R4R5 R5 R5 R5 R5 R5R6 R6 R6 R6 R6 R6R7 R7 R7 R7 R7 R7R8 R8 R8 R8 R8 R8_fiqR9 R9 R9 R9 R9 R9_fiqR10 R10 R10 R10 R10 R10_fiqR11 R11 R11 R11 R11 R11_fiqR12 R12 R12 R12 R12 R12_fiqR13 R13_svc R13_abt R13_und R13_irq R13_fiqR14 R14_svc R14_abt R14_und R14_irq R14_fiqPC PC PC PC PC PCCPSR CPSR CPSR CPSR CPSR CPSRSPSR_svc S PSR_abt SPSR_und SPSR_irq SPSR_fiq 通用寄存器通常又可以分为下面3类。

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

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

n 程序计数器PC:即R15。

1)未备份寄存器R0~R7对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。

ARM中的lr寄存器

ARM中的lr寄存器

ARM中的lr寄存器/***********摘⾃《ARM LR寄存器https:///fivedoumi/article/details/50446444》********************/异常的发⽣会导致程序正常运⾏的被打断,并将控制流转移到相应的异常处理(异常响应),有些异常(fiq、irq)事件处理后,系统还希望能回到当初异常发⽣时被打断的源程序断点处继续完成源程序的执⾏(异常返回),这就需要⼀种解决⽅案,⽤于记录源程序的断点位置,以便正确的异常返回。

类似的还有⼦程序的调⽤和返回。

在主程序中(通过⼦程序调⽤指令)调⽤⼦程序时,也需要记录下主程序中的调⽤点位置,以便将来的⼦程序的返回。

在ARM处理器中使⽤ R14实现对断点和调⽤点的记录,即使⽤R14⽤作返回连接寄存器(LR)。

在硬件上和指令执⾏上,CPU ⾃动完成相应返回点的记录。

在ARM 汇编语⾔程序设计时,R14和LR通⽤。

ARM处理器相应异常时,会⾃动完成将当前的PC保存到LR寄存器。

//注意:发⽣异常时进⼊异常程序时,LR中保存的不是断点下⼀条指令,⽽是直接将PC保存到 LR中,不是将PC-4保存到LR中。

ARM处理器执⾏⼦程序调⽤指令(BL )时,会⾃动完成将当前的PC的值减去4的结果数据保存到LR寄存器。

即将调⽤指令的下紧邻指令的地址保存到LR。

ARM处理器针对不同的模式,共有6个链接寄存器资源(LR ),其中⽤户模式和系统模式共⽤⼀个 LR,每种异常模式都有各⾃专⽤的R14 寄存器(LR )。

这些链接寄存器分别为 R14、R14_svc、R14_abt、R14_und、R14_irq、R14_fiq,程序设计者要清晰处理器的模式与相应寄存器的对应关系,都是使⽤ R14,但不同模式下的R14 不是同⼀个物理资源,其内容可能天壤之别。

R14 不⽤做链接寄存器(LR )时,也可以⽤做通⽤数据寄存器。

PC 代表程序计数器,流⽔线使⽤三个阶段,因此指令分为三个阶段执⾏:1.取指(从存储器装载⼀条指令);2.译码(识别将要被执⾏的指令);3.执⾏(处理指令并将结果写回寄存器)。

ARM寄存器解释

ARM寄存器解释

一:模式
1.用户模式(USR):ARM处理器正常的程序执行状态。

2.快速中断模式(FIQ):用于高速数据传输或通断管理。

3.外部中断模式(IRQ):用于通用的中断处理。

4.管理模式(SVC):操作系统使用的保护。

5.数据访问种植模式(ABT)。

6.系统模式(SYS):运行具有特权的操作系统任务。

7.未定义指令终止模式(UND):当未定义指令执行时进入该模式可用于支持硬件协
处理器的软件仿真。

二:寄存器
1.R0——》R7:通用寄存器。

2.R13:一般为栈指针。

3.R14:返回地址。

4.R15:程序计数器。

(指向当前指令的下的第2条指令的地址。

例:当前指令正在执
行,第1条指令正在译码,第2条指令正在取址,总共是三条指令(当前正在执行的指令+第1条指令+第2条指令=3条指令)R15指向第2条指令)
5.CPSR:程序状态寄存器。

(在用户级编程时用于存储条件码)。

6.SPSR:程序状态保存寄存器。

(SPSR用于保存CPSR的状态,以便异常返回后恢复异
常发生时的工作状态。

注意:用户模式和系统模式没有SPSR因为用户模式不属于异常中断模式)。

ARM7-寄存器总结

ARM7-寄存器总结
A/D 转换器 保留
VIC 通道号 0 1 2 3
4
5
6
7
8 9 10 11 12 13 14 15 16 17 18 19~31
软件中断清零寄存器(VICSoftIntClear):

[31:0]
功能
当某位为 1 时,将清零 VICSoftInt 寄存器中对应位
保护使能寄存器(VICProtection):
11 保留 EINT0 保留 EINT1 保留 保留 保留 EINT2 保留 EINT3 保留 保留 保留 保留 保留 保留
外部存储器寄存器(PINSEL1):
端口高级功能设置
复位值 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PINSEL1 1:0 3:2 5:4 7:6 9:8 11:10
通用输入输出口
GPIO 引脚值寄存器(IOxPIN):
IOxPIN
描述
31 : 0
GPIO 引脚值。IOxPIN[0]对应于 Px.0 … IOxPIN[31]对应于 Px.31 引脚
该寄存器反映了当前引脚的状态。
复位值 未定义
GPIO 方向控制寄存器(IOxDIR):
IOxDIR
描述
复位值
31 : 0
ARM7 寄存器
外部存储器寄存器(PINSEL0):
PINSEL0 1:0 3:2 5:4 7:6 9:8 11:10 13:12 15:14 17:16 19:18 21:20 23:22 25:24 27:26 29:28 31:30
引脚名称 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P0.8 P0.9 P0.10 P0.11 P0.12 P0.13 P0.14 P0.15

ARM中断程序的原理和实现

ARM中断程序的原理和实现

ARM中断程序的原理和实现中断是计算机系统中的一种强制性事件,它能够暂停正在执行的程序,并立即转移到一个特殊的处理程序上去执行。

ARM架构的处理器也支持中断机制,为了正确处理中断,ARM定义了一套中断处理的规范和流程。

本文将介绍ARM中断的原理和实现。

一、ARM中断的原理1. 中断请求(Interrupt Request, IRQ):外部设备或其它条件触发的一种中断请求信号,用于向处理器报告需要进行中断处理的事件。

2. 中断服务例程(Interrupt Service Routine,ISR):是一段特殊的程序代码,用于处理中断事件。

当中断被触发后,处理器会跳转到对应的中断服务例程中执行,完成相应的中断处理逻辑。

3. 中断控制器(Interrupt Controller):负责接收处理器的中断请求,并将其派发给对应的中断服务例程。

1.外设或其它条件触发中断请求,发送中断信号给中断控制器。

2.中断控制器接收到中断请求后,对中断请求进行优先级判断,确定哪个中断请求最先被处理。

3.中断控制器将中断请求发送给处理器,并将处理器的执行流转移到中断服务例程上。

4.处理器执行中断服务例程,处理相应的中断事件。

5.中断服务例程执行完毕后,处理器返回到中断发生前的状态,继续执行原程序。

二、ARM中断的实现1.配置中断控制器ARM架构提供了多种中断控制器,如VIC(Vectored Interrupt Controller)和GIC(Generic Interrupt Controller)等。

具体的中断控制器的选择和配置方式根据具体的处理器和系统架构而定。

配置中断控制器的基本步骤如下:(1)开启中断:通过设置相关的寄存器,使能中断功能。

(2)配置中断优先级:对不同中断请求进行优先级的设置,确保高优先级的中断能够被及时处理。

(3)分配中断服务例程:将不同的中断请求与相应的中断服务例程关联起来,当中断请求触发时,中断服务例程能够被正确执行。

详解ARM处理器中的37个寄存器

详解ARM处理器中的37个寄存器

详解ARM处理器中的37个寄存器ARM处理器共有37个寄存器。

其中包括:31个通用寄存器,包括程序计数器(PC)在内。

这些寄存器都是32位寄存器。

6个状态寄存器。

这些寄存器都是32位寄存器。

ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。

在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。

在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。

通用寄存器:通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器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。

需要注意的是,当使用str/stm保存R15时,保存的可能是当前指令地址值加8个字节,也可能保存的是当前指令地址值加12个字节。

arm各寄存器的作用分析

arm各寄存器的作用分析

arm各寄存器的作用分析
ARM中的程序状态寄存器(CPSR)
N Negative/Less Than I IRQ disable
Z Zero F FIQ disable
C Carry/Borrow/Extend T State bit
V Overflow M0~4 Mode bits
1、条件码标志
N、Z、C、V均为条件码标志位。

它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。

条件码标志各位的具体含义如下表所示:
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的。

2 控制位
CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。

如果处理器运行于特权模式时,这些位也可以由程序修改。

·中断禁止位I、F:置1时,禁止IRQ中断和FIQ中断。

·T标志位:该位反映处理器的运行状态。

当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。

该信号反映在外部引脚TBIT上。

在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。

·运行模式位M[4:0]:这几位是模式位,这些位决定了处理器的运行模式。

具体含义如下表所示:
·保留位:CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要用保留位存储数据。

保留位将用于ARM版本的扩展。

LR链接寄存器,保存子程序返回地址。

ARM汇编之寄存器

ARM汇编之寄存器

ARM汇编之寄存器在ARM处理器内部共有37个⽤户可访问的寄存器,分别为31个通⽤的32位寄存器和6个状态寄存器。

⼀.通⽤寄存器:1.在汇编语⾔中,寄存器R0-R13为保存数据或地址值的通⽤寄存器。

2.其中寄存器R0-R7为未分组的寄存器。

对于任何处理器模式,它们都共享R0~R7的通⽤寄存器。

3.寄存器R8-R12为两个分组的物理寄存器。

a.FIQ拥有⾃⼰独⽴的R8~R12的通⽤寄存器。

b.其他六种处理器模式共享R8~R12的通⽤寄存器注:寄存器R8~R12在ARM体系结构中没有特定的⽤途。

给FIQ单独的R8~R12可实现快速的中断处理(在发⽣FIQ中断后,处理器不⽤为了保护寄存器⽽浪费时间,从⽽提⾼了FIQ的处理速度)4.寄存器R13和R14a.⽤户模式和系统模式公⽤R13和R14的寄存器内容。

b.其它五个模式拥有⾃⼰独⽴的R13和r14寄存器内容。

c.R13作为堆栈指针(SP),⽤于保存待使⽤的寄存器内容。

d.寄存器R14称为链接寄存器(LR),它的作⽤有两个:当使⽤BL指令调⽤⼦程序时,系统会⾃动将 BL指令的下⼀条指令的地址存⼊R14中。

程序A指令过程中调⽤程序B程序跳转⾄标号Lable处,执⾏程序B.系统将BL Lable指令的下⼀条指令所在地址存⼊R14中程序B执⾏最后,执⾏语句MOV PC,LR将R14寄存器的内容放⼊PC处,返回⾄NEXT处继续执⾏。

●当发⽣异常时,系统⾃动将异常的返回地址放⼊R14中(有些异常有⼀个⼩的固定的偏移量)⼆.重要的寄存器1.堆栈指针R13R13作为堆栈指针SP。

在ARM指令集中,由于没有以特殊⽅式使⽤R13的指令。

(在Thumb)指令集中存在使⽤R13的指令)每个异常模式都有其⾃⾝的R13分组版本,它通常指向由异常模式所专⽤的堆栈。

在⼊⼝处,异常处理程序通常将其他要使⽤的寄存器值保存到这个堆栈。

通过返回时将这些值重装到寄存器中。

异常处理程序可确保异常发⽣时的程序状态不会被破坏。

ARM寄存器

ARM寄存器
R1 R2 R3 R4 R5 R6 R7 R8_fiq
R9(SB,v6)
R10(SL,v7) R11(FP,v8) R12(IP)
R9
R9_fiq
R13(SP)
R14(LR) R15(PC) 状态寄 存器 CPSR SPSR
寄存器R15为程序计数器( PC),它指向 R10 R10_fiq R11 R11_fiq 正在取指的指令地址, R15也是可以进行读 写操作的,写R15R12 可以引起程序的转移。R12_fiq
R13(SP)
R14(LR) R15(PC) 状态寄 存器 CPSR SPSR
ARM态通用寄存器分组情况
寄存器 寄存器在汇编 类别 中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断
R0(a1)
R1(a2) R2(a3) R3(a4) R4(v1) R5(v2) 通用寄 存器和 程序计 数器 R6(v3) R7(v4) R8(v5)
R12(IP) R10(SL,v7)
R9
R10 R11 R12 R13_svc R14_svc R13_abt R13_abt R14_abt R14_abt R15 CPSR CPSR R13_und R13_und R14_und R14_und R13_irq R13_irq R14_irq R14_irq
R13_fiq
R14_fiq

SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq
ARM态通用寄存器分组情况
寄存器 寄存器在汇编 类别 中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断
R0(a1)
R1(a2) R2(a3) R3(a4) R4(v1) R5(v2) 通用寄 存器和 程序计 数器 R6(v3) R7(v4) R8(v5)

arm basepri作用

arm basepri作用

arm basepri作用
ARM的BasePri是基于优先级的中断屏蔽寄存器,用于控制中
断的优先级。

它是ARM Cortex-M处理器中的一个特殊寄存器。

BasePri寄存器用于设置一个基本优先级,高于或等于该基本
优先级的中断将被屏蔽,而低于该基本优先级的中断将被允许执行。

这样可以在处理中断时灵活地控制中断的优先级,以满足系统的需求。

具体来说,BasePri寄存器是一个8位的寄存器,其中的7个
比特位(Bit 7-1)用于表示基本优先级,最低有效位(Bit 0)保留。

BasePri寄存器的值越小,表示的基本优先级越高。

当BasePri寄存器的值为0时,表示没有设置基本优先级,此
时所有中断都可以执行。

当BasePri寄存器的值不为0时,表示设
置了基本优先级,高于或等于该基本优先级的中断将被屏蔽。

在处理中断时,可以通过修改BasePri寄存器的值来动态地调
整中断的优先级。

例如,当需要屏蔽某些低优先级的中断时,可以
将BasePri寄存器的值设置为对应的基本优先级,从而屏蔽这些中
断。

而当处理完紧急任务后,可以将BasePri寄存器的值恢复为0,允许所有中断再次执行。

总之,ARM的BasePri寄存器通过设置基本优先级来控制中断
的屏蔽,提供了一种灵活的方式来管理中断的优先级,以满足系统
的需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM中断及相关寄存器
要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。

ARM中断寄存器主要包括:
·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。

·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。

当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。

·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。

·中断优先级寄存器可以设置21个中断源优先级的高低。

·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。

如表1所示是ARM的一些系统寄存器列表。

表1 ARM系统寄存器列表
系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。

例如:
·SYSCON1中的UARTIEN、LCD EN位分别控制异步串口1与LCD显示的使能。

·SYSCON2中的SDRAM Z用来设置SDRAM存储器的位宽。

·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作
为系统工作频率。

与系统运行紧密相关的其他寄存器如表2所示,对它们进行正确设置,就可以启用
SDRAM、LCD或者串行通信口。

表2 ARM的其他重要寄存器列表
数据手册上是这么说的:
INTPND 寄存器中的26 个位对应着每一个中断源。

当某个中断产生时,INTPND 中相
应的pending 位就会置1,说明该中断还未被处理。

中断服务程序中必须清除该pending 位,从而使系统能够及时响应下一次中断。

INTPND 是一个只读寄存器,清除pending 位的方式
是向I_ISPC/F_ISPC 的相应位写入“1”。

在多个中断同时发生时,INTPND 将所有发生的中断pending 位都置1。

虽然中断请求可以通过INTMSK 寄存器屏蔽,但是如果被屏蔽的中断
发生了,INTPND 中的pending 位仍然会被置1。

但是为什么三星的中断例子里面是这样:
void __irq Eint4567Isr(void)
{
which_int=rEXTINPND;
rEXTINPND=0xf; //clear EXTINPND reg.
rI_ISPC=BIT_EINT4567; //clear pending_bit
}
void __irq Eint2Isr(void)
{
rI_ISPC=BIT_EINT2; //clear pending_bit
which_int=9;
}
void __irq timer_Int(void)
{
//clear pending_bit
rI_ISPC=BIT_TIMER0;
uart_printf("*");
}
我觉得很奇怪,按照手册上说的应该为:
void __irq timer_Int(void)
{
//clear pending_bit
rI_ISPC |= BIT_TIMER0;
uart_printf("*");
}
如果有几个中断发生,优先级高的直接赋值不是就把优先级低的中断给清除了吗?。

相关文档
最新文档