ARM七种运行模式.docx

上传人:b****6 文档编号:7376262 上传时间:2023-05-11 格式:DOCX 页数:12 大小:440.62KB
下载 相关 举报
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_第6页
第6页 / 共12页
ARM七种运行模式.docx_第7页
第7页 / 共12页
ARM七种运行模式.docx_第8页
第8页 / 共12页
ARM七种运行模式.docx_第9页
第9页 / 共12页
ARM七种运行模式.docx_第10页
第10页 / 共12页
ARM七种运行模式.docx_第11页
第11页 / 共12页
ARM七种运行模式.docx_第12页
第12页 / 共12页
亲,该文档总共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-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2