目录
1 Cortex-M3概述
1.1 ARM 处理器
1.2 cortex-M3介绍
1.3 cortex-M3结构概览图
1.4 cortex-M3组件
1.4.1 内核系统
1.4.2 NVIC
1.4.3 寄存器组
控制寄存器(CONTROL)
程序计数寄存器(PC:R15)
堆栈指针寄存器(SP:R13)
程序状态寄存器(PSRs)
链接寄存器(LR)
1.4.4 指令集
1 Cortex-M3概述
1.1 ARM 处理器
对于ARM处理器而言,其目前有Classic系列、Cortex-M系列、Cortex-R系列、Cortex-A系列和ARM SecurCore系列5个大类。
目前最常见的Cortex系列,用于如下:
- 工业控制处理器,可选择Cortex-M系列,其中M0适合用于替代51单片机
- Cortex-R处理器可以作为具有带操作系统的控制系统
- Cortex-A系列处理器更加常用的场合是消费电子
ARM公司推出的常见处理器和架构版本简要对比:
架构版本 | 处理器 |
ARMv1 | ARM1 |
ARMv2 | ARM2、ARM3 |
ARMv3 | ARM6、ARM7 |
ARMv4 | StrongARM、ARM7TDMI、ARM9TDMI |
ARMv5 | ARM7EJ、ARM9E、ARM10E、XScale |
ARMv6 | ARM11、ARM Cortex-M |
ARMv7 |
|
ARMv8 |
|
1.2 cortex-M3介绍
Cortex-M3是ARM公司推出的一款基于ARMv7架构的32位微控制器核心,具有以下功能和性能特点:
- 较强的性能: 主频能够达到100MHz以上,能够满足许多高性能应用的需求
- 低功耗特性:采用了高效的架构和处理技术,使得它具有低功耗特性
- 支持Thumb-2指令集:能够提高代码密度,从而节省嵌入式系统的存储空间。
- 支持多种外设接口:提供种外设接口和功能,包括SPI、I2C、UART、定时器等
- 分层保护机制:采用分层保护机制,可以提高系统安全性,防止非授权访问和攻击
- 应用广泛:适用领域,如工业控制、汽车电子、医疗设备、消费类电子等。
- 支持物联网连接:用于物联网连接,支持通信协议,如ZigBee、BLE、WiFi等
1.3 cortex-M3结构概览图
1.4 cortex-M3组件
1.4.1 内核系统
Cortex-M3处理器中央处理核心包括:
- 取指单元
- 指令解码单元
- 指令执行单元
- 寄存器组
其主要特性如下:
- 支持的指令集是Thumb-2指令集,包含所有基本的16位和32 位Thumb-2 指令
- 哈佛处理器架构,数据处理的同时能够执行取指操作;
- CM3重大革新是支持除法指令和部分支持64位乘法指令可成十上百倍地提高程序的执行速度
- 支持三级流水线:取指,解码和执行
- 工作状态支持Thumb状态和调试状态
- 工作模式支持handler模式(中断模式)和线程模式
- 支持ISR 的低延迟进入和退出
- 支持咬尾中断处理
- 支持晚到中断处理
- 支持非对齐访问
1.4.2 NVIC
NVIC是Cortex-M3的中断控制器,它的存在提高了嵌入式系统的可靠性、响应速度和方便软件编程,特点如下:
- NVIC与CPU紧耦合,包含若干系统控制寄存器
- 支持多达240个外部中断
- 每个中断都有自己的中断优先级
- 中断优先级由8位的优先级和4位的子优先级组成
- 可以通过配置控制器来设置中断优先级
- 支持嵌套中断和优先级继承
- 当中断正在被处理,如有更高优先级中断请求,NVIC中断当前中断,优先响应更高优先级的中断请求,并在处理完毕后回到原来被中断的中断程序中继续执行。
- 支持向量表重定位
- Cortex-M3的向量表可以位于内存中的任意地址,并且可以在运行时动态地进行重定位,这使得系统可以更加灵活地进行中断处理。
- 支持中断屏蔽和中断使能
- NVIC支持对中断进行屏蔽和使能,这使得处理器可以根据需要灵活地控制中断的响应和处理。
- SysTick 定时器
- SysTick 定时器在NVIC内部实现
- SysTick定时器是一个非常基本的倒计时定时器,用于在每隔一定的时间产生一个中断,即使是系统在睡眠模式下也能工作
1.4.3 寄存器组
寄存器分类 | 寄存器 | 功能描述 | |
通用寄存器 | 通用寄存器 | R0-R12 | 用于数据操作,绝大多数16位Thumb指令只能访问R0-R7,而32 位Thumb-2指令可以访问所有寄存器 |
堆栈指针寄存器SP | R13 | 主堆栈指针(MSP):复位后缺省使用的堆栈指针 进程堆栈指针(PSP):应用程序代码使用 | |
连接寄存器LR | R14 | 当调用一个子程序时,由R14存储返回地址 | |
程序计数寄存器PC | R15 | 指向当前的程序地址。修改其值,能改变程序执行流 | |
特殊功能寄存器 | 程序状态寄存器 PSRs | APSR | 应用 PSR(APSR)包含条件代码标志 |
IPSR | 中断 PSR(IPSR)包含当前激活的异常的ISR编号 | ||
EPSR | 执行 PSR(EPSR)包含两个重叠的区域 | ||
中断屏蔽寄存器 | PRIMASK | 除能所有中断—不可屏蔽中断(NMI)除外 | |
FAULTMASK | 除能所有fault—NMI除外,被除能faults会“上访” | ||
BASEPRI | 除能所有优先级不高于某个具体数值的中断 | ||
控制寄存器 | CONTROL | 定义特权状态,决定使用哪一个堆栈指针 |
控制寄存器(CONTROL)
寄存器名 | bit | 描述 | 备注 |
CONTROL | 0 | 0表示特权级的线程模式, |
|
1表示用户级的线程模式 | |||
1 | 0表示选择MSP |
| |
1表示选择PSP |
程序计数寄存器(PC:R15)
- R15 是程序计数器,也称为“PC”
- M3内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4
- 如果向 PC 中写数据,就会引起一次程序的分支改变, 不更新 LR 寄存器
堆栈指针寄存器(SP:R13)
堆栈指针用于访问堆栈,只需要两条指令,PUSH和POP,默认使用 MSP。通常进入子程序后,第一件事把寄存器值PUSH入堆栈中,子程序退出前POP曾经PUSH的寄存器。
程序状态寄存器(PSRs)
- 处理器状态可分为3类,因此有3个程序状态寄存器
- 程序状态寄存器里存放了两类信息
- 一类体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位),结果正负(SF位),结果是否为零(ZF位),奇偶标志位(P位)等。
- 一类存放控制信息,如允许中断(IF位),trace标志(TF位)等
- 执行 PSR(EPSR)包含两个重叠的区域:
- 用于 If-Then( IT)指令的执行状态区,以及T位(Thumb 状态位)。
- 可中断-可继续(interruptible-continuable)指令( ICI)区,用于被打断的多寄存器加载和存储指令
31 | 30 | 29 | 28 | 27 | 26:25 | 24 | 23:20 | 19:16 | 15:10 | 9 | 8 | 7 | 6 | 5 | 4:0 | |
APSR | N | Z | C | V | Q | |||||||||||
IPSR | Exception Number | |||||||||||||||
EPSR | ICI/IT | T | ICI/IT |
通过MRS/MSR指令,这3个PSR可以单独访问,也可组合访问:
- PSR = APSR + IPSR + EPSR
- IAPSR = IPSR + APSR
- IEPSR = IPSR + EPSR
- EAPSR = EPSR + APSR
链接寄存器(LR)
- R14 是连接寄存器(LR), 汇编程序中,可以把它写作LR或R14
- LR 用在调用子程序时存储返回地址
- 使用 BL指令,自动填充 LR的值
1.4.4 指令集
ARM Cortex-M系列处理器均使用Thumb-2指令集,主要特征为:在一种工作状态中允许混合使用16位和32位指令,下图指出了Thumb-2指令集与Thumb指令集的区别。