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

2023-10-19 08:40

本文主要是介绍[Cotex-M3学习教程]-0.1-Cortex-M3概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

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

  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):应用程序代码使用

连接寄存器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. 当在特权级下操作时才允许写该位
  2. 用户级唯一返回特权级的途径,触发一个(软)中断,再由服务例程改写该位

1表示用户级的线程模式

1

0表示选择MSP

  1. 仅处于特权级的线程模式下,此位才可写
  2. 异常返回,修改LR位2,能实现模式切换

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

1.4.4 指令集

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

这篇关于[Cotex-M3学习教程]-0.1-Cortex-M3概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238672

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee