【微处理器系统原理与应用设计第四讲】Cortex-M4处理器内核和存储系统以及异常处理机制

一. Cortex-M4处理器的主要特点

(1)32位RISC处理器,其内核采用哈佛总线结构(程序指令存储和数据存储分开),取指令和数据访问可以同时进行。

(2)内部含有32位寄存器组,内部数据通路和总线接口,可以高效处理8位和16位数据,还支持涉及64位数据的多种运算

(3)工作在Thumb状态,采用Thumb-2指令体系。

区分ARM状态和Thumb状态:

1. ARM状态是ARM处理器的默认状态,支持所有32位的指令集,在ARM状态下,存储器可以同时访问32位的数据和地址空间,具有更好的代码效率和执行速度。

2. Thumb状态是另一种工作状态,支持16位指令集,有着更高的代码密度和功耗。Thumb-1指令是16位的指令格式,能够提供基本的数据处理和流程控制操作,包括算术运算、逻辑运算、条件分支和跳转等。而Thumb-2指令则是32位的指令格式,可以执行高级的数据处理和存储访问操作,并且支持更复杂的程序控制结构,如循环和函数调用等。同时,Thumb-2指令还能够使用更强大的32位数据寄存器,提高了数据处理性能。

二. 寄存器组

寄存器组中有16个寄存器,其中13个32位通用寄存器,另外三个有特殊用途。

(1)通用寄存器R0~R12

R0~R7为低寄存器,R8~R12为高寄存器。由于指令中可用的空间有限,因此许多16为指令只能访问低寄存器。高寄存器则可以用于32位指令和几个16位指令。

(2)栈指针R13(SP)

栈指针R13用于指明当前栈存储单元的地址,用于栈存储的访问。改变它的值既可以使用赋值或者运算指令实现,也可以使用栈操作指令实现。另外,异常进入与返回时会自动改变值。

处理器有两个栈指针:主栈指针(MSP)和进程栈指针(PSP)。前者为默认的栈指针,后者为中断下使用的栈指针。

(3)链接寄存器R14(LR)

链接寄存器(LR)用于执行函数或者调用子程序时保存返回地址。当执行了函数或者调用了子程序后,LR值会自动更新。在进行异常处理时,LR也会被自动更新为异常返回值。当该寄存器的值无用时,该寄存器也可以作为通用寄存器参与数据运算。

(4)程序计数器R15(PC)

PC用于保存即将读取的指令地址,读操作返回当前指令地址加4(由于设计的流水线特性),写PC会引起跳转操作。

三. 指令执行

指令执行采用三级流水线方式,即取指、译码和执行三个部件同时工作。如下图所示,这也解释了在地址为m的指令时,PC值为m+4,所以PC值总是当前正在执行的指令地址加4。

四. 处理操作

Cortex-M4处理器有两种操作状态:一种是调试状态,即当处理器被暂停后就会进入调试状态并停止指令执行;二是Thumb状态,即处理器在执行程序代码。

Cortex-M4处理器有两种访问等级:一是特权访问等级,即处理器可以访问所有资源;二是非特权访问等级,即有些存储器区域不能被访问,有些操作也无法执行。

Cortex-M4处理器有两种操作模式:一是处理模式,即执行异常处理,处理器总是具有特权访问等级;二是线程模式,即在执行普通的应用程序代码时,两种访问等级任选其一,具体的访问的等级由特殊寄存器决定。

处理器在启动后默认处于特权访问等级线程模式以及Thumb状态。软件可以将处理器从特权访问等级线程模式切换到非特权访问等级线程模式,但无法将自身从非特权访问等级模式切换到特权访问,必须要借助异常机制才能进行这种升级。

五. 存储系统 

Cortex-M4处理器采用基于高级微控制器总线架构(AMBA)的总线接口,总线接口为32位宽,使用32位寻址的存储系统,地址最大为4GB。存储器空间包括代码、数据、外设以及处理器内的调试支持部件。

1. 存储器空间映射

存储器空间是统一的,指令和数据共用相同的地址空间。存储器空间在架构上被划分为多个存储器区域。程序不允许在外设、设备和系统存储器区域中执行。

2. 总线访问

处理器通过总线访问存储设备。总线上可以执行字访问、半字访问和字节访问,数据在总线上的分布如下所示:

处理器支持对齐和非对齐数据传输。

3. 栈存储

栈(STACK)是一种先进后出或者后进先出的存储结构。保存数据时称为压栈(PUSH)或者入栈,读取数据时称为弹栈(POP)或者出栈。栈有栈底和栈顶,一旦分配栈空间后,栈底是保持不动的,入栈时栈顶上移,出栈时栈顶下移。

处理器采用寄存器SP来保存栈顶的值,入栈或者出栈时,SP会自动改变值来指向新的数据处理单元。Cortex-M4使用的栈模型被称为“满递减”,SP指向上一次数据被存储在栈中的位置。处理器分配一定大小的字型存储空间供栈使用,最高地址字的后一个字的地址为栈底,同时为栈的初值。每次压栈操作,处理器首先减小SP的值,即SP<--SP-4,然后将数据存储在 SP指向的存储器位置,即栈顶上移;每次出栈操作,处理器首先读取SP指向的存储器位置的数据,然后SP的数值会自动增大,即SP<--SP+4。 

六. 异常处理

Cortex-M4处理器最多支持255个异常,每个异常都有唯一的异常编号,编号从1开始。编号1-15为系统异常,16号及以上的编号用于中断。

异常产生时,处理器在结束当前指令执行后自动依次将现场的xPSR、返回地址(PC-4)、LR、R12、R3、R2、R1、R0寄存器压入SP指向的堆栈。这8个32位字称为异常堆栈帧。与此同时,处理器获取异常编号n,计算出异常向量的偏移地址为4n,程序入口地址从【4n】中取出异常服务程序入口地址赋给PC,同时将保存异常状况信息的EXC_RETURN数值保存在LR中。处理器从异常服务程序的入口地址开始读取指令,同时将处理器的状态切换至处理模式,SP也切换到MSP,执行异常服务程序。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值