[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指令集的区别。

相关推荐
醇氧13 分钟前
ab (Apache Bench)的使用
linux·学习·centos·apache
小青头15 分钟前
numpy学习笔记
笔记·学习·numpy
Mephisto.java21 分钟前
【大数据学习 | flume】flume的概述与组件的介绍
大数据·学习·flume
V搜xhliang02461 小时前
基于深度学习的地物类型的提取
开发语言·人工智能·python·深度学习·神经网络·学习·conda
VertexGeek2 小时前
Rust学习(四):作用域、所有权和生命周期:
java·学习·rust
抱走江江2 小时前
SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)
学习·spring·spring cloud
不会编程的懒洋洋3 小时前
Spring Cloud Eureka 服务注册与发现
java·笔记·后端·学习·spring·spring cloud·eureka
scc21404 小时前
spark的学习-06
javascript·学习·spark
luoganttcc4 小时前
能否推荐开源GPU供学习GPU架构
学习·开源
垂杨有暮鸦⊙_⊙4 小时前
阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_技术趋势
笔记·学习·无人机