Cortex M0 和M0+ 的简单说明 - 《Cortex M0/M0+ 权威指南》 英文版PDF 资料

The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors, 2nd Edition - 2015”,《Cortex M0/M0+ 权威指南》:链接: https://pan.baidu.com/s/18CWsb-WeNS5hVl3a1jyw8A?pwd=rn1v


技术概述

2.1 Cortex®-M0 和 Cortex-M0+ 处理器是什么?

ARM® Cortex-M0 处理器和 Cortex-M0+ 处理器都是 32 位处理器。它们的寄存器组内部寄存器、数据路径和总线接口都是 32 位。它们都有一个主系统总线接口,因此被认为是冯·诺依曼总线架构。

Cortex-M0+ 处理器具有可选的单周期 I/O 接口,主要用于更快地访问外设 I/O 寄存器。因此,可以说 Cortex-M0+ 处理器具有有限的哈佛总线架构能力,因为指令访问和 I/O 寄存器访问可以同时进行,但重要的是要理解,尽管可以有两个总线接口,但内存空间是共享(统一)的,因此额外的总线接口并不会带来额外的可寻址内存空间。

Cortex-M0 和 Cortex-M0+ 处理器的主要特征如下:

处理器流水线:

  • Cortex-M0 处理器具有三级流水线(取指、解码和执行)
  • Cortex-M0+ 处理器具有两级流水线(取指 + 预解码、解码 + 执行)

指令集:

  • 指令集基于 Thumb® 指令集架构 (ISA)。只使用了 Thumb ISA 的一个子集(56 个)。大多数指令大小为 16 位,只有少数为 32 位。
  • 一般来说,Cortex-M 处理器被归类为精简指令集计算机,尽管它们具有不同大小的指令。
  • 支持可选单周期 32 位 x 32 位乘法,或者对于需要小硅片面积的设计,支持更小的多周期乘法器。

内存寻址:

  • 32位寻址支持高达4GB的内存空间
  • 系统总线接口基于片上总线协议AHB-Lite,支持8位、16位和32位数据传输
  • AHB-Lite协议是流水线的,支持系统高操作频率。外设可以通过AHB到APB总线桥接到基于APB协议(高级外设总线)的更简单的总线。

中断处理:

  • 处理器包括一个内置的中断控制器,称为嵌套向量中断控制器(NVIC)。该单元处理中断优先级和屏蔽功能。它支持来自各种外设(芯片设计相关)的最多32个中断请求,一个额外的不可屏蔽中断(NMI)输入,并且还支持许多系统异常。
  • 每个中断都可以设置为四个可编程优先级之一。NMI具有固定的优先级。

操作系统(OS)支持:

  • 包括两种系统异常类型(SVCall和PendSV)以支持OS操作。
  • 还包括一个可选的24位硬件定时器SysTick(系统滴答定时器),用于定期进行OS时间记录。
  • Cortex-M0+处理器支持特权和非特权执行级别(对芯片设计师可选)。这允许OS以非特权执行级别运行某些应用程序任务,并对这些任务施加内存访问限制。
  • Cortex-M0+处理器具有可选的内存保护单元(MPU),允许OS在运行时为应用程序任务定义内存访问权限。

低功耗支持:

  • 架构上定义了两种睡眠模式,即正常睡眠和深度睡眠。这些睡眠模式的确切行为是设备特定的(取决于您使用的芯片)。芯片设计师还可以添加设备特定的省电模式控制寄存器,以扩展睡眠模式数量或允许为芯片的每个部分定义睡眠模式行为。
  • 可以使用WFI(等待中断)或WFE(等待事件)指令进入睡眠模式,或使用称为Sleep-on-Exit的功能自动使处理器进入睡眠。
  • 额外的硬件级支持,使芯片设计师能够基于睡眠模式功能创建更好的功耗降低,例如唤醒中断控制器(WIC)。

调试:

  • 调试系统基于ARM CoreSight™调试架构。它是一种可扩展的调试架构,可以支持从简单的单处理器设计到复杂的多处理器设计。
  • 调试接口可以基于JTAG协议(4或5个引脚),也可以基于串行线调试协议(2个引脚)。调试接口允许软件开发人员访问处理器的调试功能。
  • 支持最多四个硬件断点,两个数据监视点和无限制的软件断点,使用BKPT(断点)指令。
  • 使用称为程序计数器(PC)采样的功能通过调试连接支持基本程序执行分析。
  • Cortex-M0+处理器具有一个可选功能,称为微跟踪缓冲区(MTB),它提供指令跟踪。

Cortex-M处理器是可配置设计。它们以Verilog源代码文件的形式交付给芯片设计师,并附带一些芯片设计师可以选择的参数。这样,芯片设计师可以省略对其项目不必要的一些功能,以节省功耗并减小硅片面积。因此,您可以找到基于Cortex-M0和Cortex-M0+处理器的微控制器,支持不同数量的中断,Cortex-M0+处理器还有可选的MPU 支持。

在设计过程中(图2.1),处理器与系统其余部分集成,并使用芯片设计工具转换为由逻辑门和晶体管布局组成的设计。最大时钟频率等时序特性在这些阶段根据项目选择的半导体工艺和各种设计约束进行定义。此外,不同产品上Cortex-M0或Cortex-M0+处理器的确切最大速度和功耗也可能彼此不同。

在这里插入图片描述

内存保护单元

12.1 什么是MPU?

内存保护单元(MPU)是处理器内部的一个可编程模块,用于定义内存属性(例如,可缓存,可缓冲,参见第7.8节)和内存访问权限。它是Cortex-M0+、Cortex-M3、Cortex-M4和Cortex-M7处理器的可选功能,但Cortex-M0处理器上不可用。由于它是可选的,因此一些Cortex-M0+微控制器具有MPU功能(例如,STM32L0 Discovery板上使用的STM32L053微控制器),而有些则没有(以减小硅片面积和功耗)。

与大多数其他功能不同,MPU并不为嵌入式应用程序带来性能提升。MPU用于检测系统中的问题(例如,当应用程序任务试图访问无效或不允许的内存位置时出现错误)。如果检测到问题,则触发HardFault异常。如果应用程序运行完美,则MPU永远不应触发任何故障异常。事实上,许多微控制器应用程序并不需要MPU。

然而,我们知道,事情有时会出错。在这些情况下,MPU可以用来使嵌入式系统更加稳健,在某些情况下通过以下方式使系统更加安全:

  • 防止应用程序任务破坏其他任务和OS内核使用的堆栈或数据内存,
  • 防止非特权任务访问对系统的可靠性或安全性至关重要的某些外设,
  • 将SRAM或RAM空间定义为不可执行(永不执行,XN),以防止代码注入攻击。

您还可以使用MPU定义其他内存属性,例如“可缓存”,这些属性可以导出到系统级缓存单元或内存控制器。这些系统级组件然后可以利用内存属性信息来决定如何处理内存访问。默认情况下,MPU被禁用,并且内存访问权限和内存属性由第7章概述的默认内存映射定义。对于没有MPU的Cortex-M处理器也是如此。在这种情况下,将使用默认的内存属性。

MPU包含多个配置寄存器,必须对这些寄存器进行编程以定义内存区域,并且在使用前必须启用MPU。如果未启用MPU,则处理器的行为与没有MPU存在时相同。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值