【ARM Cortex-M3指南】2:Cortex-M3综述

文章目录

  • 二、Cortex-M3综述
    • 2.1 基础
    • 2.2 寄存器
      • 2.2.1 R0~R12:通用目的寄存器
      • 2.2.2 R13:栈指针
      • 2.2.3 R14:链接寄存器
      • 2.2.4 R15:程序计数器
      • 2.2.5 特殊寄存器
    • 2.3 操作模式
    • 2.4 内置的嵌套向量中断控制器
      • 2.4.1 关于嵌套
      • 2.4.2 关于向量
      • 2.4.3 关于中断
      • 2.4.4 支持动态修改优先级 *
    • 2.5 存储器映射
    • 2.6 总线接口
    • 2.7 MPU
    • 2.8 指令集
    • 2.9 中断和异常
    • 2.10 调试支持
    • 2.11 特点概括
      • 2.11.1 高性能
      • 2.11.2 中断处理的高级特性
      • 2.11.3 低功耗
      • 2.11.4 系统特性
      • 2.11.5 调试支持

二、Cortex-M3综述

2.1 基础

image.png

  1. Cortex-M3是32位的微处理器,具有32位数据通路,一个32位的寄存器组,以及32位的存储器接口。
  2. 处理器具有哈佛架构,拥有独立的指令总线和数据总线,提升了处理器的性能,但是它们共用相同的存储器空间(同一的存储器系统)。
  3. Cortex-M3处理器拥有一个可选的存储器保护单元(MPU),还可以使用外部缓存,处理器支持大端和小端两种存储器系统。
  4. Cortex-M3处理器包含多个固定的内部调试部件(断点和监视点等)。
  5. 可选部件提供了其他调试特性,如指令跟踪以及多种调试接口。

2.2 寄存器

Cortex-M3处理器的寄存器从R0到R15。

image.png

2.2.1 R0~R12:通用目的寄存器

  • 类型:32位通用目的寄存器。
  • 作用:用于数据操作,有些16位Thumb指令只能访问这些寄存器的子集(低寄存器,R0~R7)。

2.2.2 R13:栈指针

  • 类型:Cortex-M3包含两个栈指针(R13),它们分组存放,且同时只有一个可见。
    • 主栈指针(MSP):默认栈指针,被操作系统内核以及异常处理使用。
    • 进程栈指针(PSP):被用户应用程序代码使用。
  • 注意:栈指针的最低两位永远为0,意味着它们永远是字对齐

2.2.3 R14:链接寄存器

  • 作用:当调用一个子例程时,返回地址存储在链接寄存器中。

2.2.4 R15:程序计数器

程序计数器为当前的程序地址,也可以写这个寄存器来控制程序流。

2.2.5 特殊寄存器

Cortex-M3处理器具有多个特殊寄存器:

  • 程序状态寄存器(PSR);
  • 中断屏蔽寄存器(PRIMASK、FAULTMASK、BASEPRI);
  • 控制寄存器(CONTROL)。

image.png

这些寄存器具有特殊的功能,并且只能通过特殊指令访问,不能用于普通的数据处理。
image.png

2.3 操作模式

image.png

image.png

image.png

流程概述

  1. 当启动或者复位的时候,处理器处于特权线程
  2. 当处理器处于特权等级时,可以通过访问特殊寄存器中的控制寄存器CONTROL切换成用户线程
  3. 处理器在用户线程时,需要通过进入异常特权处理模式,访问CONTROL特殊寄存器,才可以在异常退出时切换为特权线程
  4. 无论是特权线程还是用户线程,当发生异常时都会进入特权处理

2.4 内置的嵌套向量中断控制器

Cortex-M3包括一个特殊的中断控制器,也就是嵌套向量中断控制器NVIC,它与处理器内核紧密相连。

2.4.1 关于嵌套

所有的外部中断和系统异常都可以被编程为不同的优先级,当一个中断发生时,NVIC会将该中断与当前运行优先级比较,如果新中断的优先级大于当前等级,新的中断处理就会覆盖正在运行的任务。

2.4.2 关于向量

当中断被接受后,中断服务程序ISR的起始地址从存储器的向量表中被提取出来,而且无需使用软件确定ISR的起始地址并跳转,这样也就减少了中断请求的处理时间。

2.4.3 关于中断

Cortex-M3处理器还具有可以降低中断等待时间的多个高级特性,它们包括一些寄存器内容的自动保存和恢复、减小从一个ISR到另一个切换的等待时间以及对迟到中断的处理。

中断和系统异常可以由它们的优先级屏蔽,或者由中断屏蔽寄存器BASEPRI、 PRIMASK以及FAULTMASK完全屏版,它们可以确保时间敏感的任务不被打断,从而按时完成。

2.4.4 支持动态修改优先级 *

中断的优先等级可以在运行期间由软件修改,正在执行的中断暂停执行,并且在ISR结束前不会被再次激活,因此,在修改优先级时无须担心中断的意外重入。

2.5 存储器映射

Cortex-M3具有预定义的存储器映射,这样一些内置外设,如中断控制器和调试单元等,可以通过简单的存储器访问指令操作。因此,大多数的系统可以使用C程序代码访问。该预定义的存储器映射也使得Cortex-M3具有速度上的高度优化,并且可以很容易地被集成到片上系统(SoC)设计中。

image.png

Cortex-M3的设计具有进行了存储器使用优化的内部总线,另外,它也允许这些区域的用法不同。例如,数据存储器可以位于CODE区域,而程序代码也可以在外部随机访问存储器(RAM)区域中执行。

系统级的存储器区域包括中断控制器和调试部件,这些设备具有固定地址,详细信息可以参考第5章。由于这些外设具有固定地址,在Cortex-M3产品间移植应用程序也就更加容易了。

2.6 总线接口

Cortex-M3处理器具有多个总线接口,利用这些接口,Cortex-M3可以同时执行取指和数据访问。主要的总线接口包括:

  • 代码存储器总线;
  • 系统总线;
  • 私有外设总线。

代码存储器区域访问在代码存储器总线上执行,它在物理上分为两个总线,即I-Code和D-Code。它们已经为取指做了优化,以获得最佳的指令执行速度。

系统总线用于访问存储器和外设,它提供了访问多种外设的入口,如静态随机访问存储器(SRAM)、外设、外部RAM、外部设备以及部分系统级存储器区域。

有些系统级的存储器面向私有外设,如调试部件等,而私有外设总线则提供了访问这种存储器的途径。

2.7 MPU

Cortex-M3具有可选的MPU单元,其为特权访问和用户程序访问设定了访问规则。当违反访问规则时,错误异常就会产生,如果可能的话,该错误异常处理应该能分析问题并作出修正。

MPU具有多种用法,在通常情况下,OS可以设置MPU来对OS和其他特权进程使用的数据进行保护,以免它们被其他恶意用户程序访问。MPU还可以用于将存储器区域设置为只读,防止数据被意外擦除或者在多任务系统中隔离不同任务间的存储器区域。总体来说,MPU可以使嵌入式系统更加健壮可靠。

MPU特性为可选的,其使用情况由微控制器和SoC的设计决定。要了解MPU的更多信息,可以参考第13章的内容。

2.8 指令集

Cortex-M3支持Thumb-2指令集,这是Cortex-M3处理器最重要的特性之一,因为其允许同时使用32位指令和16位指令,以提高代码密度和效率。该指令集非常灵活、强大,且易于使用。

对于之前的ARM处理器,中央处理单元(CPU)具有两种操作状态:32位的ARM状态和16位的Thumb状态。在ARM状态中,指令为32位的,处理器可以执行所有支持的指令,且具有很高的性能;在Tumb状态中,指令为16位的,因此指令代码密度也就更高,不过Thumb状态不具有ARM指令的所有功能,要完成特定操作,它可能需要更多的指令。

要使两者达到最佳的效果,许多应用程序混合使用ARM和Thumb代码。不过,混合代码处理并不总是最优的,状态间切换会带来额外开销(根据执行时间和指令空间,见图2.7), ARM和Thub代码可能还需要位于不同文件中分开编译。这样就增加了软件开发的复杂度,无法发挥CPU内核的最佳效率。

image.png


随着Thumb-2指令集的引入,在一种操作模式下完成所有操作已经成为了可能,而无须在两种状态间切换。事实上,Cortex-M3不支持ARM代码,中断也要在Thumb状态中处理(之前ARM内核在ARM状态中进入中断处理)。由于没有必要进行状态间切换, Cortex-M3处理器同传统的ARM处理器相比具有诸多优势,例如:

  • 无状态切换开销,节省执行时间和指令空间:
  • 无须将ARM代码和Thumb代码分开,软件开发和维护更加容易;
  • 可以更容易地获得最佳效率和性能,由于无须为了获得最佳的密度和性能而在 ARM和Thumb间切换代码,编写软件也更加容易了。

2.9 中断和异常

Cortex-M3实现了一个新的异常模型,它是在ARMv7-M架构上引入的。该异常模型同传统的ARM处理器不同,其中断处理极具效率。它具有几个系统异常和一些外部中断请求(IRQ)(外部中断输入)。Cortex-M3上不存在快速中断(FIQ)(ARM7/ARM9 ARM10/ARM11中有快速中断),不过,目前的中断架构包括中断优先级处理和嵌套中断支持。因此,设置支持嵌套中断的系统非常简单(高优先级的中断可以覆盖或抢占低优先级的中断处理),而且它的效果同传统ARM处理器上的FIQ类似。

Cortex-M3的中断特性在NVIC里实现,除了支持外部中断外,Cortex-M3还支持多个内部异常源,如系统错误处理等。如表2.2所示,Cortex3具有多个预先定义的异常类型。

image.png


低功耗和高能耗效率
Cortex-M3处理器具有多种特性,这有助于设计者开发低功耗和高能效的产品。

首先,其具有休眠模式以及深度休眠模式,它们同多种系统设计策略一道,可以降低空闲时间的功耗。

其次,Cortex-M3的低门数量和设计技术降低了处理器中的电流,这样动态功耗也就降低了。另外,由于Cortex-M3具有高代码密度,它可以降低对程序大小的要求。同时, Cortex-M3能在较短时间内完成处理任务,所以处理器可以尽快返回休眠模式,这样也可以降低能耗。因此,Cortex-M3的能耗效率比许多8位或16位的微控制器还要好。

从Cortex-M3版本2开始,唤醒中断控制器(WIC)作为一种新的特性出现。该特性允许整个处理器内核的电源都被关闭,同时处理器的状态可以保持,并且当中断发生时处理器儿乎可以立即返回到活动状态。因此,之前许多使用8位和16位微控制器实现的超低功耗应用,也可以用Cortex-M3实现。

2.10 调试支持

Cortex-M3处理器具有多种调试特性,如包括暂停和单步的程序执行控制、指令断点、数据监视点、寄存器和存储器访问、概况和跟踪等。

Cortex-M3上的调试硬件基于CoreSight架构,和传统的ARM处理器不同,CPU内核自身不具备联合测试行动小组(JTAG)接口,取而代之的是,一个调试接口模块从内核中脱离出来,处理器在内核层级提供了名为调试访问端口(DAP)的总线接口。通过这个总线接口,外部调试器可以访问控制寄存器以调试硬件和系统存储器,而不管处理器是否正在运行。该总线接口的控制由调试端口(DP)设备执行,当前可用的DP为串行线JTAG调试端口(SWJ-DP)(支持传统的JTAG协议以及串行线协议)或SWDP(只支持串行线协议),也可以使用ARM CoreSight产品系列中的JTAG-DP模块,芯片生产商可以选择其中的一个 DP模块,以提供调试接口。

芯片生产商还可以使用嵌入式跟踪宏单元(ETM),实现指令跟踪。跟踪信息通过跟踪端口接口单元(TPU)输出,然后调试主机(通常是个人电脑)可以通过外部跟踪捕获硬件采集已执行的指令信息。

在Cortex-M3处理器中,多个事件都可以触发调试动作,调试事件可以是断点、监视点、错误条件或者外部调试请求输入信号。当调试事件发生时,Cortex-M3处理器可以进入暂停模式或执行调试监控异常处理。

对于Cortex-M3处理器,数据监视点功能由数据监视点和跟踪(DWT)单元提供,它可用于停止处理器(或者触发调试监控异常程序)或者产生数据跟踪信息。在使用数据跟踪时,跟踪到的数据可以通过TPIU输出(在CoreSight架构中,多个跟踪设备可以共用一个跟踪端口)。

除了这些基本的调试特性,Cortex-M3处理器还提供了Flash补丁与断点(FPB)单元,该单元可以提供简单的断点功能或将指令访问从Flsh重映射到SRAM的不同位置。

指令跟踪宏单元(ITM)为开发者提供了一种输出调试数据的新方法,通过写人ITM中的寄存器,调试器可以利用跟踪接口采集数据并且对它们加以显示或处理。这种方法易于使用,并且比JTAG输出的速度要快。

所有的这些部件都可以由Cortex-M3中的DAP接口总线控制,也可由处理器内核中运行的程序控制,并且所有的跟踪信息都可以通过TPU访问。

2.11 特点概括

Cortex-M3处理器为什么是一种革命性的产品?使用Cortex-M3的优势在哪?本节概括了Cortex-M3的特点和优势。

2.11.1 高性能

image.png

2.11.2 中断处理的高级特性

image.png

2.11.3 低功耗

image.png

2.11.4 系统特性

image.png

2.11.5 调试支持

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue进阶之Vue项目实战(一)

Vue项目实战 项目搭建初始化eslint版本约束版本约束eslint配置 stylelintcspellcz-githusky给拦截举个例子 zx 项目搭建 node版本:20.11.1 pnpm版本:9.0.4 初始化 vue3最新的脚手架 pnpm create vite byelide-demo --template vue-ts pnpm i pnpm dev…

压缩机的实际制冷量

制冷压缩机是制冷系统的“心脏”,吸收来自蒸发器的制冷剂蒸气,提高压力后排气到冷凝器,使制冷剂在系统中循环流动。 按温度范围可以分为高温,中温,低温制冷压缩机。按密封结构形式分类为开启式;半封闭式&a…

外网禅道配置

exportfs -avrf 修改代码,避免启动太慢:vi /opt/zbox/bin/zbox.php 启动和停止 /opt/zbox/zbox start /opt/zbox/zbox stop

[Power Automate] 关联Teams,发起通知并进行审批

1、 workflow 创建一条teams chat,定义teams members 和 chat title 2、添加通知内容到刚刚创建的chat 里 3、发起teams 审批流程(通过这个action,进行teams内部的审批) 4、审批结果判断,在这个基础上进行审批之后的操作&#xff…

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)即将召开!

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)将于2024年9月6-8日在日本东京举行。AMMM 2024将以国际材料,机械和制造为主题,吸引到来自多个领域的研究人员和学者相聚在一起分享知识,讨论想法,并了…

Flutter笔记:Widgets Easier组件库(10)快速处理承若型对话

Flutter笔记 使用Widgets Easier组件库快速处理承若型对话 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…

17 内核开发-内核内部内联汇编学习

​ 17 内核开发-内核内部内联汇编学习 课程简介: Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础,让他们能够理解和参与到Linux内核的开发过程中…

渲染 函数

DOM树 什么是渲染函数 在多数情况下,Vue推荐使用模板template来创建HTML。 然而在一些应用场景中,需要使用JavaScript创建HTML。 这时可以用渲染函数,它比模板更方便。 render函数的主要神秘地方就是Vue的h函数。 h()函数 h()函数是一个用于…

【HAL库 STM32】输入捕获并实现超声波测距

文章目录 HC-SR04 超声波模块简介HC-SR04 工作原理如何使用HC-SR04模块程序效果 一、工程配置代码如果您发现文章有错误请与我留言,感谢 HC-SR04 超声波模块简介 HC-SR04 工作原理 模块有2个超声波换能器(如图所示),一个发出声波…

小红书爬虫GUI软件 | API接口封装 | 根据笔记链接批量采集笔记详情,含笔记正文内容、发布时间、转评赞藏等

一、背景介绍 1.1 爬取目标 我用python开发的采集软件,可自动按笔记链接抓取笔记的详情数据。 为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用&#xff0…

ruoyi漏洞总结

若依识别 黑若依 :icon hash"-1231872293 绿若依 :icon hash"706913071” body" 请通过前端地址访 " body" 认证失败,无法访问系统资源 " 如果页面访问显示不正常,可添加默认访问路径尝试是否显示正常 /login?redi…

Redis---------分布式锁Redisson

概述 Redisson入门 第一步&#xff1a;引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version></dependency> 第二步&#xff1a;配置文件 import org.redisson…

STM32——WWDG(窗口看门狗)

技术笔记&#xff01; 1.WWDG&#xff08;窗口看门狗&#xff09;简介 本质&#xff1a;能产生系统复位信号和提前唤醒中断的计数器。 特性&#xff1a; 递减的计数器&#xff1b; 当递减计数器值从 0x40减到0x3F时复位&#xff08;即T6位跳变到0&#xff09;&#xff1b; …

Netty 网络编程深入学习【一】:ByteBuffer 源码解析

ByteBuffer源码阅读 ByteBuffer是一个用于处理字节数据的缓冲区类。它是Java NIO 包的一部分&#xff0c;提供了一种高效的方式来处理原始字节数据。 ByteBuffer 可以用来读取、写入、修改和操作字节数据&#xff0c;它是一种直接操作字节的方式&#xff0c;比起传统的 InputSt…

使用OpenCV绘制两幅图验证DSC和IoU以及BCELoss的计算程序

1.创作灵感 很多小伙伴在玩深度学习模型的时候,需要计算Groudtruth和predict图的dsc、IOU以及BCELoss。这两个关键的指标的程序有很多种写法,今天使用OpenCV绘制两张已知分布的图像,计算其dsc、IOU以及BCELoss。 2、图像如图所示 在一个100100的区域内,红色框范围为预测…

我的毕业实习经历

我的毕业实习经历 前言求职之路成为社畜重获自由结语 前言 这篇博客原本我想以实习生找工作踩坑指南&#xff1a;我的毕业实习经历为文章标题的&#xff0c;原因是跟我前面发布的一篇博客《实习生找工作踩坑指南&#xff1a;租房篇》做一个呼应收尾&#xff0c;奈何标题略显臃肿…

c3 笔记8 css排版技巧

相关内容&#xff1a;边界、边框、位置&#xff08;absolute、relative、static&#xff09;、overflow、z-index、超链接、鼠标光标特效、…… margin:上边界值 右边界值 下边界值 左边界值 笔记来源&#xff1a; ©《HTML5CSS3JavaScript网页设计》陈婉凌编&#xff…

固定资产管理系统

固定资产管理系统 摘 要 随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求&#xff0c;利用计算机实现设备及资产的信息化管理已经显得非常重要。 固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息&…

【大数据】学习笔记

文章目录 [toc]NAT配置IP配置SecureCRT配置PropertiesTerminal Java安装环境变量配置 Hadoop安装修改配置文件hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 环境变量配置 IP与主机名映射关系配置hostname配置映射关系配置 关闭防火墙…

[每日AI·0501]GitHub 版 Devin,Transformer的强力挑战者 Mamba,Sora 制作细节与踩坑,OpenAI 记忆功能

AI 资讯 国资委&#xff1a;加快人工智能等新技术与制造全过程、全要素深度融合GitHub版 Devin 上线&#xff0c;会打字就能开发应用&#xff0c;微软 CEO&#xff1a;重新定义 IDE在12个视频理解任务中&#xff0c;Mamba 先打败了 TransformerSora 会颠覆电影制作吗&#xff…