arm cortex-m 架构简述

这篇具有很好参考价值的文章主要介绍了arm cortex-m 架构简述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. cortex-m 处理器的体系架构与指令集

本文仅讨论 cortex-m0/m0+/m3/m4/m7 armv8架构暂不讨论

  • cortex-m0/m0+/m1 基于ARMv6-M架构
  • cortex-m3基于ARMv7-M架构(ARMv7-Mcortex-m3处理器一起发布)
  • cortex-m4/m7基于ARMv7E-M架构(ARMv7-Mcortex-m4处理器一起发布)
    arm cortex-m 架构简述,arm开发,架构
  • corte-m处理器都支持Thumb-2指令集(既支持16位指令,也支持32位指令)。
  • 上图是ARMv6-M,ARMv7-M,ARMv7E-M所有指令,上图也能看出所支持指令的长度。
  • cortex-m1处理器一般用于FPGA,针对FPGA进行了优化

2. cortex-m内核寄存器

2.1 cortex-m0, cortex-m0+寄存器

arm cortex-m 架构简述,arm开发,架构

2.2 cortex-m3, cortex-m4, cortex-m7 寄存器

arm cortex-m 架构简述,arm开发,架构

2.3 PRIMASK、FAULTMASK和BASEPRI寄存器

  • PRIMASK寄存器有1个bit生效,可屏蔽所有 可配置优先级的异常 ,即屏蔽除 Reset(-3), NMI(-2), HardFault(-2) 外的所有中断。
  • FAULTMASK寄存器有1个bit生效,屏蔽除 Reset(-3), NMI(-2) 外的所有中断。
  • BASEPRI:可屏蔽优先级 小于或等于 BASEPRI配置值的中断或异常。BASEPRI位宽是可配置的(微控制器设计厂商可配置,非软件可配置),一般是3bit4bit
    arm cortex-m 架构简述,arm开发,架构

2.4 SP寄存器

SP寄存器在物理实现上有两个,分别是MSPPSP,通过SP这个名字访问的可能是不同的物理存储,当然也可以直接在汇编中使用MSPPSP

  • MSP:Main Stack Pointer(主栈指针),Handler mode(处理异常或中断)使用MSP,Thread mode可以选择使用MSPPSP(通过CONTROL寄存器选择)
  • PSP:Process Stack Pointer(线程栈指针),在Thread mode下可由CONTROL寄存器配置使用PSP.

3. PSR 寄存器

因为支持的指令不同,所以不同处理器的PSR寄存器会略有不同

3.1 cortex-m0, cortex-m0+(ARMv6-M)

arm cortex-m 架构简述,arm开发,架构

3.2 cortex-m3(ARMv7-M)

arm cortex-m 架构简述,arm开发,架构

3.3 cortex-m4,cortex-m7(ARMv7E-M)

arm cortex-m 架构简述,arm开发,架构

  • GE[3:0]:大于或等于标志
  • ICI:Interruptible-continuable instruction(中断继续指令),如LDM指令,STM指令均需要多个时钟周期,且是可被中断的, ICI只要作用是记录中断位置。
  • IT:用于If-Then指令(IT指令,在此处暂不展开讨论IT指令)。
  • T:指示处于ARM状态还是Thumb状态,cortex-m处理器只支持Thumb状态,所以此位一直为1。

3.4 ISR_NUMBER

  • cortex-m0/m0+的ISR_NUMBER
    arm cortex-m 架构简述,arm开发,架构

  • cortex-m3/m4/m7的ISR_NUMBER
    arm cortex-m 架构简述,arm开发,架构

  • 总结

    • cortex-m3/m4/m7相比cortex-m0/m0+ 增加了如下异常
      • MemManage
      • BusFault
      • UsageFault
      • Reserved for Debug
    • cortex-m3/m4/m7相比cortex-m0/m0+ IRQ中断数量由32个扩展到了240个
    • systickcortex-m0/m0+ 中是可选实现的,systickcortex-m3/m4/m7中是必须实现的。

4. cortex-m处理器模式与特权级

4.1 cortex-m处理器特权级

cortex-m处理器分为两个特权级:

  • Unprivileged(非特权级)

    • 不能使用MRS,MSR,CPS(开关中断) 指令。
    • 不能访问systick、NVIC、SCB等
    • 对MPU保护的资源访问受限

    注:cortex-m0不支持非特权模式(CONTROL没有对应的配置位)。cortex-m0+ 可选的支持非特权模式。cortex-m3/m4/m7强制支持非特权模式。

  • Privileged(特权):

    • 所有指令,所有资源均可访问。

4.2 cortex-m0/m0+处理器寄存器访问的特权级

  • cortex-m0只支持特权级(不支持非特权级),所有的寄存器都只能在特权级下访问。
  • cortex-m0+可已选择支持特权级,也可以选择不支持特权级。
    arm cortex-m 架构简述,arm开发,架构

    <<DUI0662B_cortex_m0p_r0p1_dgug>> 文档中并没有对各个寄存器中访问的特权级进行描述,欢迎大家补充,或后续我找一下其他资料或实测一下再补充。

4.3 cortex-m3/m4/m7处理器寄存器访问的特权级

  • cortex-m3/m4 存器访问的特权级
    arm cortex-m 架构简述,arm开发,架构
  • cortex-m7 存器访问的特权级
    arm cortex-m 架构简述,arm开发,架构
  • 由上面两个表可以看出cortex-m7cortext-m3/m4 仅在 MSP的访问权限上存在区别。

4.4 cortex-m处理器模式

  • Thread mode:线程模式(没有进行中断处理)

    • 可配置特权模式或者非特权模式CONTROL寄存器配置,。
    • 可配置使用MSP或者PSP,CONTROL寄存器配置。

    注:在Thread mode下,cortex-m0只支持特权模式(CONTROL寄存器没有相关的配置位),cortex-m0+可选支持非特权模式,cortex-m3/m4/m7既支持特权模式,也支持非特权模式。

  • Handler mode:处理模式

    • 一定处于特权模式
    • 使用MSP

4.5 cortex-m处理器模式和特权级切换简析

  • 下表是寄存器的初始值,通过寄存器的初始值我们可以得出很多结论
    arm cortex-m 架构简述,arm开发,架构

4.5.1 CONTROL寄存器的初始值

CONTROL寄存器的初始值为全0,我们可以得出如下结论:

  • 针对cortex-m0cortex-m0+(不支持非特权级) ,表征在初始状态下使用MSP
  • 针对cortex-m0+(支持非特权级)/m4/m7,表征在初始状态下使用MSP且处于特权模式

    cortex-m4/m7在 CONTROL寄存器中增加了FPCA位用于指示中断发生时上下文中有没有浮点运算,用于指示中断发生时的硬件压栈,这与cortex-m的异常处理有关,在此暂不展开,后续会专门写一篇文章来分析cortex-m的异常处理

4.5.2 PSR寄存器的初始值

  • PSR寄存器的初始为0x01000000, 即T位为1表示处于thumb状态(cortex-m只支持Thumb状态),ISR_NUMBER 为零表示处于Thread mode

4.5.3 PRIMASK,FAULTMASK,BASEPRI寄存器的初始值

PRIMASK,FAULTMASK,BASEPRI寄存器的初始值都为0,便是不屏蔽任何中断。

4.5.4 MSP PSP PC寄存器的初始值

初始状态下栈指针使用MSP , 不关心PSP的初始值,MSP PC寄存器的初始值比较特殊,上电或复位后,硬件会将向量表中的第一个字放入MSP中,将向量表中的第二个字放入PC中,又因为复位状态下VTOR 寄存器的初始值为0,所以硬件会到0地址处找向量表,软件要保证0地址出有向量表。

4.5.5 LR寄存器的初始值

LR寄存器的初始值是0xFFFFFFFF,这是一个非法值,函数调用不会在这里返回。

4.5.6 总结

结合通过上述描述,我画了一张图描述状态和特权级的切换,比较好理解,便不过多赘述。
arm cortex-m 架构简述,arm开发,架构文章来源地址https://www.toymoban.com/news/detail-794330.html

到了这里,关于arm cortex-m 架构简述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【ARM Cortex-M 系列 3 番外篇 -- ARMv6, ARMv7, ARMv8, ARMv9 架构差异及精简指令集 与 复杂指令集 介绍】

    上篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 ARM架构是一种处理器架构,全称为高级精简指令集计算机(Advanced RISC Machine)。它是英国ARM公司设计的一种精简指令集( RISC )处理器架构,和复杂指令集( CISC )处理器架构相对。 CISC 与 RISC 差异

    2024年02月08日
    浏览(14)
  • 【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

    【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 Cortex-Mx 专栏】 在移植 RT-Thread 到 瑞萨RA4M2(Cortex-M33)上时,遇到了hardfault 问题,最后使用了Cortex-M4中的调度相关的函数后,OS 可以正常调度了。所以这里做下 M33与 M4的关系梳理。 ARM Cortex-M33 和 Cortex-M4 都是 ARM 公司设计的32位RISC微处理

    2024年01月21日
    浏览(13)
  • ARM Cortex-M3内核

    目录 ARM Cortex-M3内核 存储器系统 外设接口 时钟和电源管理 中断控制器 DMA控制器 STM32F1系列微控制器是一款基于ARM Cortex-M3内核的嵌入式芯片,其架构组成主要包括以下几个方面:  ARM Cortex-M3内核:STM32F1系列微控制器采用了ARM Cortex-M3内核,该内核是一种高性能、低功耗的32位

    2024年02月07日
    浏览(10)
  • ARM Cortex-M 的 SP

    ARM Cortex-M 的 SP

    在嵌入式开发中,堆栈是一个很基础,同时也是非常重要的名词,堆栈可分为堆 (Heap) 和栈 (Stack) 。 栈(Stack): 一种顺序数据结构,满足后进先出(Last-In / First-Out)的原则,由编译器自动分配和释放。 堆(Heap):类似于链表结构,可对任意位置进行操作,通常由程序员手动分配

    2024年02月10日
    浏览(8)
  • ARM Cortex-M 内核调试相关

    ARM Cortex-M 内核调试相关

    推荐博文1: SWD协议通信的简单总结 根据《ARM Technical Reference Manual cortex_m3_r1p1_trm》和《Arm® Debug Interface Architecture Specification ADI v6.0.pdf》进行梳理。 Cortex-M3 处理器实现了ARM v7-M架构。这包括整个 16 位的Thumb指令集和基本的 Thumb-2 32位指令集架构。处理器无法执行ARM指令。 Thumb

    2024年02月03日
    浏览(12)
  • ARM及Cortex-M4介绍

    ARM及Cortex-M4介绍

    ARM的含义有三种。1.ARM是一个公司但是其本身并不生产芯片,而是制定芯片设计标准以及相关芯片体系结构技术,以技术出售和标准制定盈利。2.ARM是一种技术的名称,是一种高级RISC处理器的体系结构。3.ARM是一类微处理器芯片或产品的统称,是采用ARM技术开发的RISC处理器的

    2024年02月12日
    浏览(11)
  • ARM Cortex-M3内核理解

    ARM Cortex-M3内核理解

    做一个对社会有用的人!不抱怨,不气馁! 目录 前言 1 ARM处理器家族 2 什么是ARM Cortex-M处理器 2.1 Cortex-M3 2.2 M3处理器到微控制器 2.3 ARM处理器的发展 2.4 Thumb ISA的架构版本 2.4.1 指令集的概念 2.5 软件开发流程  2.5.1 轮询 3、技术综述 3.1、Cortex-M3简介 3.1.1 处理器类型 3.1.2 指令

    2024年02月08日
    浏览(11)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

    【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月17日
    浏览(12)
  • 【ARM CPU 之 Cortex-M7 介绍】

    【ARM CPU 之 Cortex-M7 介绍】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 上篇文章:ARM Cortex-M 系列 1 番外篇-- Cortex-M0, M3, M4, M7, M33 , M35P 差异 下篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 Cortex-M7是基于ARMv7架构,ARMv7 架构主要分为以下三类: 其中 Cortex-M 系列应用

    2024年02月16日
    浏览(8)
  • ARM Cortex-M3权威指南-概览和基础

    ARM Cortex-M3权威指南-概览和基础

    1.1.1 高性能  许多指令都是单周期的——包括乘法相关指令。并且从整体性能上, Cortex-M3 比得过绝大多数其它的架构。  指令总线和数据总线被分开,取值和访内可以并行不悖  Thumb-2 的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32 位 ARM 状态和16 位 T

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包