ARM七种运行模式.docx

上传人:b****6 文档编号:6302936 上传时间:2023-01-05 格式:DOCX 页数:12 大小:441.69KB
下载 相关 举报
ARM七种运行模式.docx_第1页
第1页 / 共12页
ARM七种运行模式.docx_第2页
第2页 / 共12页
ARM七种运行模式.docx_第3页
第3页 / 共12页
ARM七种运行模式.docx_第4页
第4页 / 共12页
ARM七种运行模式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

ARM七种运行模式.docx

《ARM七种运行模式.docx》由会员分享,可在线阅读,更多相关《ARM七种运行模式.docx(12页珍藏版)》请在冰豆网上搜索。

ARM七种运行模式.docx

ARM七种运行模式

s3c2440中断体系结构:

如何用中断?

1.中断发生:

保存别人的状态

如何中断可以事先设置,对程序初始化,使能中断。

中断发生后,进入中断模式

2.中断处理

分辨中断源

进行不同的处理

清理工作

3.恢复别人的状态

过程:

外界信号上升沿、下降沿,高电平、低电平都可以设置成信号

引脚设置,再进入状态寄存器。

状态寄存器连接屏蔽寄存器

进入第二个状态寄存器,储存各种中断,可以储存多个中断

进入优先级寄存器,判断中断运行顺序

再进入屏蔽使能寄存器和模式寄存器

进入优先级寄存器

进入cpu处理

cpu的处理:

进入入口地址bhandleIRQ

计算返回地址,被中断处地址

保存现场,即各寄存器状态

调用处理函数

函数运行完后恢复现场

函数的处理:

分辨终端

处理中断

清除数据,即清除中断

1.中断寄存器

arm的七种模式

1.usr用户模式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状态时寄存器被设为包含16个直接可以访问的寄存器:

R0到R15。

除了R15,其他全部寄存器都为通用寄存器,如可能用于保存数据或地址值。

除此之外,还有第17个寄存器用于存储状态信息。

FIQ模式包含7个分组寄存器,分别映射到R8-14(R8_fiq-R14_fiq)。

在ARM状态,有很多不需要保存寄存器的FIQ处理程序。

用户,IRQ,管理中止和未定义模式都包含两个分组寄存器映射到R13和R14,允许这些模式都都包含私有堆栈指针和链接寄存器。

Thumb状态时内部寄存器集

Thumb状态时的寄存器集为ARM状态时的寄存器的分配的一个子集。

程序员能够直接访问8个通用寄存器R0至R7,还有程序计数器(PC),一个堆栈指针寄存器(SP),一个链接寄存器(LR)和CPSR。

各自特权模式还分别有分组堆栈指针,链接寄存器和进程保存状态寄存器(SPSR)。

如图2-4所示。

Thumb状态访问高寄存器(Hi-Registers)

在Thumb状态,寄存器R8-R15(“Hiregisters”)不是标准的寄存器集的一部分。

然而,汇编语言程序员可以受限的对它们的进行访问,可以将它们用于快速暂存。

使用MOV指令的特殊变量可以将一个值从R0-R7(“Loregister”)范围内的寄存器传送到高寄存器或从高寄存器到第低寄存器。

使用CMP和ADD指令也可以对高寄存器的值与寄存器的值进行比较以或相加。

更多内容请参考表3-34。

程序状态寄存器

ARM920T包含了一个当前程序状态寄存器(CurrentProgramStatusRegister-CPSR),还有5个用于异常程序处理的程序状态保存寄存器(SavedProgramStatusRegisters-SPSR)。

这些寄存器的功能为:

●保存最近已处理的ALU操作的信息

●控制中断的使能与禁止

●设置处理器的运行模式

图2-6显示了各位的编排

状态代码标志位

N,Z,C和V位为状态代码标志位。

算术或逻辑操作结果可能会改变这些位,并检验以决定是否应该执行某条指令。

在ARM状态,所有指令都可能为条件执行:

详情见表3-2。

在Thumb状态,只有分支指令才能条件执行:

详情见表3-46。

控制位

PSR(包含I,F,T和M[4:

0])的末端8位,统称为控制位。

当发生异常时将会改变这些位。

如果处理器运行在特权模式,它们也可由软件控制。

异常:

程序暂时停止

当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断。

在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序。

如果同时发生好几个异常,将会按照固定的顺序来分配,见P2-13的异常优先级。

进入异常行为

当处理一个异常时,ARM920T将会进行以下活动:

1.相应链接寄存器保存下条指令的地址。

如果在ARM状态进入异常,下条指令的地址将会复制到链接寄存器(当前PC+4或PC+8,由异常决定。

详情见表2-2)中。

如果在Thumb状态进入异常,写入链接寄存器的值则为当前PC偏移一个值,这样异常返回后程序能从正确的位置恢复。

这意味着异常处理不需要确定异常是从什么状态进入的。

例如,在SWI的情况,无论是在ARM状态还是Thumb状态执行SWI,MOVSPC,R14_svc语句都将返回到下一条指令。

2.复制CPSR的内容到相应SPSR中。

3.根据异常类型强制将CPSR模式位设为某一个值。

4.强制PC从相关异常向量处取下条指令。

通常也会置位中断禁止标志位,以防止不同的难处理的异常嵌套。

如果一个异常发生时处理器处于Thumb状态,当装载异常向量地址到PC时会自动切换到ARM状态。

离开异常行为:

当异常结束,异常处理程序将会:

1.将链接寄存器适当减去一个偏移量并放入到PC中。

(偏移量由异常类型决定)

2.复制SPSR的内容返回给CPSR中。

3.如果在异常进入时置位了中断禁止标志位异常,清除中断禁止标志位。

注意:

不需要在异常结束时切换回Thumb状态,因为在异常前会立刻保存CPSR中T位的值到SPSR中,并在退出异常时从SPSR恢复到CPSR中。

异常进入/退出总结

表2-2总结了进入异常时保存在相关R14中的PC值和被推荐的退出异常的指令。

注释:

1.此处PC为含预取中止的BL/SWI/未定义指令取指令的地址。

2.此处PC为由于FIQ或IRQ抢先而未执行的指令地址。

3.此处PC为发生了数据中止的Load或Store指令的地址。

4.当复位时保存在R14_svc的值将是不可预测的。

快中断FIQ

FIQ(快中断请求)异常是为支持数据传输或通道处理而设计的,在ARM状态拥有足够的私有寄存器来消除对寄存器保存的需求(这样最小化了对上下文的切换的开销)。

将nFIQ输入端拉低可以实现外部产生FIQ。

由ISYNC输入信号端的状态决定是同步还是异步传输。

当ISYNC为低电平,认为nFIQ和nIRQ为异步,中断前会引起同步周期延迟并影响处理器流程。

无论是从ARM还是Thumb状态进入的异常,FIQ处理时执行SUBSPC,R14_fiq,#4

时,都应该避免中断。

如果设置CPSR的F标志位,FIQ将会被禁止(但主义这不可能在用户模式中发生)。

如果F标志位为零,ARM920T将在每条指令末检测FIQ同步发生器的输出是否为低电平。

中断IRQ

IRQ(中断请求)异常是一个由nIRQ输入端的低电平产生的一个普通中断。

IRQ的优先级低于FIQ,当进入了相关的FIQ,会屏蔽IRQ。

除非是在特权(非用户)模式,其他任何时刻都禁止设置CPSR内的I位。

无论是从ARM还是Thumb状态进入的异常,IRQ处理时执行SUBSPC,R14_fiq,#4

时,都应该避免中断。

中止

中止表示不能完成当前对存储器的访问。

通过外部ABORT输入端指示的。

ARM920T在存储器访问周期期间检测中止异常。

有两种类型的中止:

●预取中止(PrefetchAbort):

发生在指令预取期间

●数据中止(DateAbort):

发生在数据访问期间

如果发生预取中止,将屏蔽预取指并为无效,但并不会立刻带来异常,直到指令到达流水线的执行阶段才发生。

若未执行该指令,将不会发生中止,因为流水线发生了分支。

如果发生数据中止,由指令类型决定其行为:

●单一的数据转移指令(LDR,STR)回写到被修改的基址寄存器:

中止处理程序必须意识到这点。

●交换指令(SWP)执行失败,就如同没有被执行。

●块数据转移指令(LDM,STM)完成。

如果设置了回写,基址寄存器将被更新。

如果指令会覆盖基址寄存器数据(转移列表中包含基址),覆盖将会被阻止。

表明了中止后所有寄存器的覆盖都会被阻止,特别是R15(通常是最后转移的寄存器)在一个被中止的LDM指令会被阻止覆盖。

中止机制使得分页虚拟存储器系统可以被实现。

在这样一个系统中允许处理器产生任意地址。

当无法获取某一地址上的数据时,内存管理单元(MemoryManagementUnit-MMU)将表明产生一个中止。

中止处理程序必须紧接着找出中止原因,使得被请求的数据可用并重试被中止的指令。

应用程序并不需要了解可以使用的内存总量,也不需要关心中止对其状态以任何方式被影响。

当确定中止原因后,处理程序应该不顾状态(ARM或Thumb)执行下列语句:

SUBSPC,R14_abt,#4;预取中止

SUBSPC,R14_abt,#8;数据中止

这将恢复PC和CPSR,并重试被中止的指令。

软件中断SWI

软件中断指令(SoftwareInterruptInstruction-SWI)用于进入管理模式,通常请求一个特定的管理功能。

SWI处理程序应当在状态(ARM或Thumb)中通过执行下列指令返回:

MOVPC,R14_svc

这将恢复PC和CPSR,并返回到SWI之后的指令。

注意:

nFIQ,nIRQ,ISYNC,LOCK,BIGEND和ABORT引脚只存在于ARM920TCPU内核之中。

未定义指令

当ARM920T遇到不能处理的指令时,将产生未定义指令陷阱。

这个机制可以用于软件仿真扩展Thhumb指令集或ARM指令集。

仿真了失败指令后,陷阱处理程序应该执行在状态(ARM或Thumb)中执行下列指令:

MOVSPC,R14_und

这将恢复CPSR,并返回到未定义指令之后的指令。

 

异常向量

下表显示了异常向量地址

异常优先级

当同时出现多个异常时,一个固定的优先级系统将确定它们的处理顺序:

高优先级:

1.复位

2.数据中止

3.快中断FIQ

4.中断IRQ

5.预取中止

低优先级:

6.未定义指令,软件中断

并不是所有的异常都可以在同一时刻发生!

未定义指令和软件中断异常互斥,因为它们分别对应于当前指令的的特定(非重叠)译码。

如果发生数据中止的同时发生FIQ并且又使能了FIQ(CPSR的F标志位被清零),ARM920T将先进入数据中止处理程序,然后立即转向FIQ向量。

当从FIQ正常返回将会引起数据中止处理程序恢复执行。

为了确保传输错误不会在检测中被遗漏,必须将数据中止置为比FIQ更高的优先级。

进入此异常的时间需要按加上最坏情况下FIQ的时间延迟来算。

 

中断延迟

当使能了FIQ,其最坏情况的延迟包括:

请求通过同步器的最长时间(Tsyncmax,如果为异步),加上完成最长指令的时间(Tldm,最长指令是装载包括PC在内所有的寄存器的LDM指令),加上数据中止进入的时(Texc),

再加上FIQ进入的时间(Tfiq)。

在该时间末ARM920T将会执行位于0x1C处的指令。

Tsyncmax为3个才处理器周期,Tldm为20个周期,Texc为3个周期,Tfiq为2个周期。

因此总时间为28个处理器周期。

在一个使用连续20MHz处理器时钟的系统中,其只过了1.4毫秒。

最大IRQ延迟的计算与此类同,

但还必须实际考虑,FIQ具有更高的优先级并且能推迟任意长度的时间进入到IRQ处理程序。

FIQ或IRQ最小延迟包括请求通过同步器的最短时间(Tsyncmin)加上Tfiq。

此时为4个处理器周期。

复位

当nRESET信号端变为低电平时,ARM920T将放弃正在处理的指令,然后从递增(incrementing)字地址继续取指令。

当nRESET信号端变为高电平时,ARM920T将:

1.复制当前PC和CPSR的值覆盖到R14_svc和SPSR_svc中。

未定义保存的PC和SPSR的值

2.强制将M[4:

0]设置为10011(管理模式),置位CPSR中的I和F位并清除CPSR的T位。

3.强制PC从0x00地址开始对下一条指令的取指。

4.在ARM状态恢复执行。

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1