新闻中心

EEPW首页>嵌入式系统>设计应用> 详解ARM Cortex-A32处理器 打造超高能效嵌入式环境

详解ARM Cortex-A32处理器 打造超高能效嵌入式环境

作者: 时间:2016-09-12 来源:网络 收藏

操作模式

本文引用地址://m.amcfsurvey.com/article/201609/303274.htm

如2图所示,v7-M仅定义两种操作模式,线程模式与模式。模式可以设置为普通模式,也就是说,在不需要时,软件可以不启用该特性。模式主要被用于处理异常情况,线性模式则用于用户进程。模式间的转化基本上是自动的,发生条件如图所示。如异常情况发生,处理器模式自动启用,异常处理完成后,处理器模式自动退出。SVCall指令是软件进入处理器模式的主要方法(将启动的IRQ设定为未决,可令处理器执行异常操作)。

打造超高能效嵌入式环境 详解ARM Cortex-A32处理器

图2:v7-M操作模式

对比图3,图2显示的是AArch32执行态下支持的操作模式。基本的操作模式有七种,其中五种用于处理特定异常。如发生快速中断(Fast Interrupt,FIQ)异常,则会进入FIQ模式;如出现未定义指令,则进入Undef模式,诸如此类。

打造超高能效嵌入式环境 详解ARM Cortex-A32处理器

图3: AArch32操作模式

模式间的转换通常自动执行,但是如果在现程序状态寄存器(Current Program Status Register,CPSR)中写入模式字段,则可完全由软件控制进行模式转换,具体细节稍后再做说明。与SVCall指令类似,SVC指令可以支持软件处理SVC异常,并进入SVC模式。

AArch32还支持其他两种模式,但未在图中显示(仅为节省版面空间)。它们分别是Hyp模式(用于管理程序)和监控模式(用于TrustZone)。

寄存器组

图4及图5分别介绍了v7-M 和 AArch32寄存器组。从图中可以看出,两种寄存器有许多相似之处,这是因为两者皆承袭了ARMv6及早期架构的共同特性。

多数指令可以访问13个通用寄存器(r0至r12)。两种架构下,r13预设为栈指针(SP),r14预设为连接寄存器(LR),r15预设为程序计数器(PC)。ARMv7-M架构下,访问专用寄存器受到严格限制;AArch32下,可以用与其他通用寄存器相同的方式访问这些寄存器;不过无需多言,擅自修改PC值可能会产生不良后果!

打造超高能效嵌入式环境 详解ARM Cortex-A32处理器

图4:ARMv7-M寄存器组 图5- AArch32寄存器组

ARMv7-M是一小组其他专用寄存器,包括PRIMASK、FAULTMASK、xPSR、CONTROL及BASEPRI,用于控制、配置处理器及处理异常情况。

指令集

如图5所示,AArch32还有一些与特定操作模式相关的寄存器。如进入对应的模式下,这些寄存器会与相应的用户模式切换。只有极少数特殊指令能够访问,并且还无法直接访问。这些数值随着模式变化被保存,以辅助异常处理。特别值得指出的是,每种异常模式都对应独立的栈指针,从而能够在单独堆栈上解决每个异常状况。这就让异常处理程序更可靠、防御性更强。异常出现后,相关模式的连接寄存器会被设定为异常返回地址。

每种异常模式都对应一个附加寄存器,即程序保护状态寄存器(SPSR)。程序保护状态寄存器用于出现异常时及时记录当前的程序状态寄存器数值以及LR,从而自动保存相关数据。另外,AArch32的图示中未显示Mon与Hyp模式。与其他模式一样,它们分别支持R13与R14分组寄存器。

Cortex-A架构下,有一个与ARM NEON SIMD指令集相关的独立寄存器组,包含32个128位宽寄存器。每个寄存器都可作为单字、双字或四倍字寻址,NEON指令集也支持依据字节或四倍字进行向量运算。

异常模型

上述两个架构的异常模型具有显著差异,但两者都支持因系统事件或外围中断引起的内部及外部异常。

ARMv7-M支持与传统微控制器上发现的异常更相近的模型,所有外部中断都通过含有处理器地址的向量表单独进行向量处理。

AArch32与早期ARM架构中的异常模型更相近,早期的ARM架构中仅有8种异常类型,向量也各不相同。向量表由可执行指令组成,通常是特定异常处理器的分支指令。仅支持两种外部中断源,即FIQ和IRQ。通常,一个高优先级中断会连接FIQ,其他则连接IRQ。这意味着系统要么装有软件调度程序,要么就要和现代系统一样装有中断向量控制器(Vectored Interrupt Controller,VIC),可以利用单一向量地址进行编程。

多数Cortex-A系统装有基于ARM的通用中断控制器(Generic Interrupt Controller,GIC)。GIC是许多物理中断和ARM核心中断输入(FIQ和IRQ)的接口,处理优先次序、遮蔽、单一中断启用或禁止,及优先权。欲了解更多信息,请参考《GIC架构参考手册》。

虚拟内存支持

支持完全虚拟内存环境是ARMv8-A的一个主要特性,使设备可以支持Linux和Android等平台操作系统。同样,虚拟内存能力通常也是客户选择核心的重要依据。

虚拟内存环境使操作系统能够以更加灵活的方式管理内存,例如,允许单独处理动态扩展栈区域,按照需求将单个代码和数据区域调入和调出外部存储页面,并使每个用户处理系统内存映射的相同视图。

打造超高能效嵌入式环境 详解ARM Cortex-A32处理器

图6:虚拟内存

为此,如图6所示,虚拟内存在处理器提供的每个地址上进行“转换”。软件在“虚拟地址空间”和称为内存管理单元(Memory Management Unit,MMU)的模块中运行,并将其转换为“物理地址空间”,为系统中的每个用户任务以及操作系统本身创建新的虚拟内存映射,还使操作系统完全控制访问权限等。每项任务都可以在自身的虚拟内存空间中执行,就像是系统中的唯一任务。只有操作系统知道外部物理内存中该任务的代码和数据区域的真实物理位置。



评论


相关推荐

技术专区

关闭