ARM中断及相关寄存器
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寄存器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寄存器组成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体系结构是一种经典的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寄存器

#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体系结构提供了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中断程序的原理和实现,包括中断的基本概念、中断的分类、中断的处理过程以及中断控制器的实现方式。
一、中断的基本概念中断可以看作是外部设备向CPU发送一个请求的一种方法。
当外部设备发生一些特定的事件时(如按键、时钟周期等),它会产生一个中断请求信号,通知CPU去处理相应的事件。
CPU收到中断请求信号后,会暂停当前的任务,保存现场并跳转到中断处理程序来处理中断。
二、中断的分类1.外部中断:外部中断是由外设产生的中断信号,如GPIO、串口等。
当外设产生中断请求信号时,中断控制器会将信号传递给CPU,触发相应的中断处理程序。
2.软件中断:软件中断是由软件主动触发的中断,通过软件指令可以触发中断控制器发送中断请求信号给CPU。
软件中断可以用于实现系统调用、任务切换等功能。
三、中断的处理过程1.中断请求:外部设备发生特定事件,产生中断请求信号。
中断请求信号会被中断控制器接收并传递给CPU。
2.中断响应:CPU收到中断请求信号后,会立即响应中断,并执行中断处理程序。
在响应中断之前,CPU需要保存当前的现场(包括程序计数器PC、寄存器等)。
3.中断处理:CPU跳转到中断处理程序的入口地址,开始执行中断处理程序。
中断处理程序通常用来处理中断事件,并根据需要进行中断服务例程的调用。
4.中断返回:中断处理程序执行完毕后,CPU会根据中断处理程序的返回指令返回到原来的程序中,并恢复之前保存的现场。
同时,中断控制器会清除中断请求信号,使其能够接受新的中断请求。
四、中断控制器的实现方式ARM架构中,中断控制器常用的实现方式包括级联式中断控制器和向量式中断控制器。
1.级联式中断控制器:级联式中断控制器是一种层级结构的中断控制器。
它包含多个级别的中断控制器,每个级别对应一组中断请求。
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),字节四到字节七存储第二个字,以此类推。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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("*");
}
如果有几个中断发生,优先级高的直接赋值不是就把优先级低的中断给清除了吗?。