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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/44652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Raki的读paper小记:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

Abstract&Introduction&Related Work 研究任务 对大模型进行部分微调 已有方法和相关工作 现有技术通常通过扩展模型深度引入推理延迟(Houlsby 等人,2019;Rebuffi 等人,2017),或通过减少模型可用序…

28.JavaWeb-Elasticsearch

1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发,基于Apache协议的开源项目,具有实时搜索,稳定,可靠,快速的特点。 1.1 全文检索引擎 分为通用搜索引擎(百度、谷歌&…

基于Java+SpringBoot+vue前后端分离在线商城系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

java项目之人事管理系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的人事管理系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&…

【MySQL进阶(一)】MySQL在Linux中的配置信息和数据备份工具

MySQL在Linux中安装的话可以看这篇博客:MySQL在Linux中的安装,我觉得总结的很好。 my.cnf 中的配置信息 当 MySQL 启动的时候,会从安装目录中加载软件数据,即使用 mysqld 工具初始化设置的 --basedir,会从数据目录中…

【iOS】—— block,KVC,KVO,Category等问题解答

文章目录 block1.block的原理是怎样的?本质是什么?2.__block的作用是什么?有什么使用注意点?3.block的属性修饰词为什么是copy?使用block有哪些使用注意?4.block在修改NSMutableArray,需不需要添…

不止工具:音视频开发「利器」的新机遇

Boxing的制胜关键是快、准、稳,与“音视频开发”有异曲同工之妙。 数字化浪潮席卷、视频化形态加速、终端性能挑战加剧、端侧算力遭遇瓶颈...... 是否存在一种可能性,让所有企业从复杂的音视频开发工程中抽身,重新回归业务本身? …

消息队列总结(3)- RabbitMQ Kafka RocketMQ高可用方案

目录 1. 什么是高可用? 1.1 常见的高可用方法 1.2 消息队列的高可用 2. RabbitMQ的高可用方案 2.1 镜像队列 2.2 消息生产的确认机制 2.3 消息的持久化 3. Kafka的高可用方案 3.1 消息备份 3.2 ISR & IEO & HW 3.3 消息生产的确认机制 4. Rocke…

微信小程序开发使用echarts报错Cannot read property ‘getAttribute‘ of undefined

如图,我在小程序圈中的区域渲染echarts图标报错了,报错提示Cannot read property getAttribute of undefined 这里的canvas ,width ,height,dpr获取为 undefined 分析问题: 初始化图表时传递错误的参数: 在 onShow 生…

Vue第四篇:html和js基础知识查漏补缺

1、a标签 定义超链接,用于从一个页面链接到另一个页面 target属性:打开目标URL的方式,_top为再当前窗口打开,_blank为新窗口打开 2、span标签 对文档中的行内元素进行组合,它提供了一种将文本的一部分或者文档的一部分…

MySQL 数据抽稀 每分钟取一条

假如原始数据为每5秒一个数据,现在想展示为每4分钟一条数据,先按照分钟数把除以4余数为0的行选出来,在按照 年月日 时分,做组内排序(窗函数ROW_NUMBER),最后再拿出序号为1的行。 WITH data_01 …

了解Unity编辑器之组件篇UI(一)

UI组件:提供了用户交互,信息展示,用户导航等功能 一、Button:用于响应用户的点击事件 1.Interactable(可交互):该属性控制按钮是否可以与用户交互,如果禁用则按钮无法被点击。可以通…

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…

ubuntu挂载ext4文件系统

文章目录 1.虚拟机分配10G磁盘用来挂载ext4文件系统2.磁盘分区3.创建文件系统4.挂载文件系统5.卸载文件系统6.使用ior测试ext4三种日志模式(1)ordered(2)journal(3)writeback 1.虚拟机分配10G磁盘用来挂载e…

Flutter动画库:animations(路由过渡动画或者页面切换动画)

animations animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 flutter pub add animations看了下官方文档和官方例子&a…

【深度学习】【Image Inpainting】Free-Form Image Inpainting with Gated Convolution

模型:DeepFillv2 (CVPR’2019) 论文:https://arxiv.org/abs/1806.03589 代码:https://github.com/JiahuiYu/generative_inpainting 文章目录 效果AbstractIntroductionRelated WorkAutomatic Image InpaintingGuided Image Inpainting and Sy…

第1章 获取数据库中的数据

CoreShop源程序是以数据库优先进行定义的,所以其本身不包含代码优先的定义,但本从更习惯于代码优先,所以为其定义了代码优先的定义。 1 CoreCms.Net.Model.Entities.SysRole using SqlSugar; using System.ComponentModel.DataAnnotations…

三十章:Segmenter:Transformer for Semantic Segmentation ——分割器:用于语义分割的Transformer

0.摘要 图像分割在单个图像块的级别上经常存在歧义,并需要上下文信息来达到标签一致性。在本文中,我们介绍了一种用于语义分割的Transformer模型- Segmenter。与基于卷积的方法相比,我们的方法允许在第一层和整个网络中对全局上下文进行建模。…

《PyTorch深度学习实践》

文章目录 1.线性模型2.梯度下降算法3.反向传播3.1原理3.2Tensor in PyTorch 4.用PyTorch实现线性模型 1.线性模型 2.梯度下降算法 # 梯度下降x_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0]w 3.0def forward(x):return x*w# 损失函数 def cost(xs,ys):cost 0for x,y in zip(x…

基于 Flink SQL CDC 数据处理的终极武器

文章目录 一、传统的数据同步方案与 Flink SQL CDC 解决方案1.1 Flink SQL CDC 数据同步与原理解析1.2 基于日志的 CDC 方案介绍1.3 选择 Flink 作为 ETL 工具 二、 基于 Flink SQL CDC 的数据同步方案实践2.1 CDC Streaming ETL2.2 Flink-CDC实践之mysql案例 来源互联网多篇文…