[Cotex-M3学习教程]-0.1-Cortex-M3概述

目录

[1 Cortex-M3概述](#1 Cortex-M3概述)

[1.1 ARM 处理器](#1.1 ARM 处理器)

[1.2 cortex-M3介绍](#1.2 cortex-M3介绍)

[1.3 cortex-M3结构概览图](#1.3 cortex-M3结构概览图)

[1.4 cortex-M3组件](#1.4 cortex-M3组件)

[1.4.1 内核系统](#1.4.1 内核系统)

[1.4.2 NVIC](#1.4.2 NVIC)

[1.4.3 寄存器组](#1.4.3 寄存器组)

控制寄存器(CONTROL)

程序计数寄存器(PC:R15)

堆栈指针寄存器(SP:R13)

程序状态寄存器(PSRs)

链接寄存器(LR)

[1.4.4 指令集](#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 | 1. Cortex-A系列可以运行Linux等操作系统:Cortex-A8/9/5/7/15/17 2. Cortex-R系列主要用于实时应用领域:Cortex-R4/5/6/7 3. Cortex-M系列用于嵌入式系统的微控制器:Cortex-M3 /4/7 |
| ARMv8 | 1. 也称为ARM 64位架构,主要用于服务器和高性能应用。 2. 该架构支持ARM和Thumb指令集,还增强了虚拟化和安全性能:Cortex-A32/35/53/57/72/73 3. R52 |

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处理器中央处理核心包括:

  1. 取指单元
  2. 指令解码单元
  3. 指令执行单元
  4. 寄存器组

其主要特性如下:

  • 支持的指令集是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):应用程序代码使用 |
| 通用寄存器 | 连接寄存器L R | R14 | 当调用一个子程序时,由R14存储返回地址 |
| 通用寄存器 | 程序计数寄存器PC | R15 | 指向当前的程序地址。修改其值,能改变程序执行流 |
| 特殊功能寄存器 | 程序状态寄存器 P SRs | APSR | 应用 PSR(APSR)包含条件代码标志 |
| 特殊功能寄存器 | 程序状态寄存器 P SRs | IPSR | 中断 PSR(IPSR)包含当前激活的异常的ISR编号 |
| 特殊功能寄存器 | 程序状态寄存器 P SRs | EPSR | 执行 PSR(EPSR)包含两个重叠的区域 |
| 特殊功能寄存器 | 中断屏蔽寄存器 | PRIMASK | 除能所有中断---不可屏蔽中断(NMI)除外 |
| 特殊功能寄存器 | 中断屏蔽寄存器 | FAULTMASK | 除能所有fault---NMI除外,被除能faults会"上访" |
| 特殊功能寄存器 | 中断屏蔽寄存器 | BASEPRI | 除能所有优先级不高于某个具体数值的中断 |
| 特殊功能寄存器 | 控制寄存器 | CONTROL | 定义特权状态,决定使用哪一个堆栈指针 |

控制寄存器(CONTROL)

|----------|--------------|--------------|----------------------------------------------------------|
| 寄存器名 | b it | 描述 | 备注 |
| CONTROL | 0 | 0表示特权级的线程模式, | 1. 当在特权级下操作时才允许写该位 2. 用户级唯一返回特权级的途径,触发一个(软)中断,再由服务例程改写该位 |
| CONTROL | 0 | 1表示用户级的线程模式 | 1. 当在特权级下操作时才允许写该位 2. 用户级唯一返回特权级的途径,触发一个(软)中断,再由服务例程改写该位 |
| CONTROL | 1 | 0表示选择MSP | 1. 仅处于特权级的线程模式下,此位才可写 2. 异常返回,修改LR位2,能实现模式切换 |
| CONTROL | 1 | 1表示选择PSP | 1. 仅处于特权级的线程模式下,此位才可写 2. 异常返回,修改LR位2,能实现模式切换 |

程序计数寄存器(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)区,用于被打断的多寄存器加载和存储指令

|---------------|-------------|-------------|-------------|-------------|-------------|--------------------------|-------------|--------------------------|--------------------------|--------------------------|-------|-------|-------|-------|-------|-------------------|
| | 3 1 | 3 0 | 2 9 | 2 8 | 2 7 | 2 6 :2 5 | 2 4 | 2 3 :2 0 | 1 9 :1 6 | 1 5 :1 0 | 9 | 8 | 7 | 6 | 5 | 4 : 0 |
| APSR | N | Z | C | V | Q | |||||||||||
| I PSR | ||||||||||| E xception Number |||||
| E PSR | ||||| I CI/IT | T | || I CI/IT | | |||||

通过MRS/MSR指令,这3个PSR可以单独访问,也可组合访问:

  • PSR = APSR + IPSR + EPSR
  • IAPSR = IPSR + APSR
  • IEPSR = IPSR + EPSR
  • EAPSR = EPSR + APSR

链接寄存器(LR)

  1. R14 是连接寄存器(LR), 汇编程序中,可以把它写作LR或R14
  2. LR 用在调用子程序时存储返回地址
  3. 使用 BL指令,自动填充 LR的值

1.4.4 指令集

ARM Cortex-M系列处理器均使用Thumb-2指令集,主要特征为:在一种工作状态中允许混合使用16位和32位指令,下图指出了Thumb-2指令集与Thumb指令集的区别。

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习