Cortex-M3概述

0. 简介

Cortex‐M3 是一个32 位处理器内核。内部的数据路径是32 位的,寄存器是32 位的,存储器接口也是32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线。指令总线和数据总线共享一个4GB的存储系统。

对于那些需要更多存储系统功能的复杂应用,Cortex‐M3处理器有一个可选配的MPU,如果需要还可以使用外部缓存cache。Cortex‐M3对于小端和大端存储系统都是支持的。

在这里插入图片描述

1. 寄存器组

Cortex‐M3 处理器拥有R0‐R15 的寄存器组。其中R13 作为堆栈指针SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。

在这里插入图片描述

1.1. R0-R12:通用寄存器

R0‐R12 都是32 位通用寄存器,用于数据操作。但是注意:绝大多数16 位Thumb 指令只能访问R0‐R7,而32 位Thumb‐2 指令可以访问所有寄存器。

1.2. R13:MSP/PSP堆栈指针

Cortex‐M3 拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。

  • 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)
  • 进程堆栈指针(PSP):由用户的应用程序代码使用。

堆栈指针的最低两位永远是0,这意味着堆栈总是4 字节对齐的。

在ARM 编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception)。除了外部中断外,当有指令执行了“非法操作”,或者访问被禁的内存区间,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。在不严格的上下文中,异常与中断也可以混用。另外,程序代码也可以主动请求进入异常状态的(常用于系统调用)。

1.3. R14:连接寄存器LR

当呼叫一个子程序时,由R14 存储返回地址。

1.4. R15:程序计数器PC

指向当前的程序地址。如果修改它的值,就能改变程序的执行流。

1.5. 特殊功能寄存器

Cortex‐M3 还在内核水平上搭载了若干特殊功能寄存器,包括:

  • 程序状态字寄存器组(PSRs)
  • 中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)
  • 控制寄存器(CONTROL)

在这里插入图片描述

寄存器及其功能:

寄存器 功能
xPSR 记录ALU 标志(0 标志,进位标志,负数标志,溢出标志),执行状态,以及当前正服务的中断号。
PRIMASK 除能所有的中断,除了不可屏蔽中断(NMI)和 硬件故障(HardFault)。
FAULTMASK 除能所有的中断,除了不可屏蔽中断(NMI)。而且被除能的faults会“上访”。
  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值