跳转到主要内容

Cortex-M0

ARM Cortex-M0 存储器系统

kelly /

作者:Founder_U

<strong>1. Cortex-M0 的两种总线协议:</strong>

1)AHB_Lite 系统总线协议:32位地址线,高速高性能访问(Flash, SRAM,总线桥,外部存储器接口)

2)APB 外设总线协议: 32位, 外设等较慢设备通讯(I/O,Timer, UART, Watch Dog。)

系统总线和外设总线是相互分离的,两种总线通过总线桥连接通讯,时钟频率控制不同,可能有多个外设总线段,并且每个段运行在不同的时钟频率下。有些高速外设是直接连接在AHB_Lite系统总线上的。

<strong>2. 存储器映射(4GB地址空间) </strong>

Cortex-M0(+)处理器的4G存储空间从架构上被分为多个区域。总的被分成8个大部分,每个部分512M。

<center><img src="" alt=""></center>

Cortex-M0处理器架构定义的存储器映射

虽然映射已经被架构预先定义,但是实际分配却是很灵活的。

Cortex-M0中断控制和系统控制

kelly /

作者:Founder_U

<strong>一、 NVIC和系统控制块特性</strong>

1. 灵活的中断管理:使能/禁止中断,优先级配置

2. 硬件嵌套中断支持

3. 向量化的异常入口

4. 中断屏蔽

5. NVIC寄存器的起始地址:0xE000E100, 对其访问必须是每次32bit

6. SCB的起始地址: 0xE000E010,也是每次32bit访问。

<strong>二. 中断使能和清除使能</strong>

1. 中断寄存器是可编程的,用于控制中断请求(异常编号16以上)的使能(SETENA)和禁止(CLRENA), 如下所示:

ARM Cortex-M0的异常与中断

kelly /

作者:Founder_U

<strong>1、异常类型及编号 </strong>

Cortex-M0的每个异常源都有一个单独的编号:

1~15内部系统异常:Reset(1), NMI(2), H/W Error(3), SVC(11), PndSV(14), SysTick(15)其他编号未用;

16~47外部中断:IRQ#0~IRQ#31。

<strong>2、异常优先级 (Cortex-M0 支持7个)</strong>

1). Cortex-M0 支持3个固定的最高优先级(Reset(-3), NMI(-2), H/W Error(-1))和4个可编程优先级;

2). 可编程寄存器有8bit宽,但只有Bit7和Bit6可配置,其余Bits为0. (优先级由高到低:0x00,0x40,0x80,0xC0);

3). 如果两个同时发生的异常的优先级相同,则先执行异常编号小的。(IRQ#0,IRQ#1 则先执行IRQ#0)

<strong>3、向量表(异常处理所需的起始地址信息)</strong>

Cortex-M0处理器的故障处理和功耗管理

kelly /

<strong>一、故障处理</strong>

故障是异常的一个子集,见第2-19页的异常处理模型。在NMI或HardFault异常处理时发生的故障将会引起HardFault异常或导致锁定(Lockup)。故障包含:•执行一条SVC指令,该指令的优先级高于或等于SVCall。•缺少调试器连接时,执行BKPT指令。

• 在加载或存储数据时,系统产生总线错误。

• 执行XN存储区的指令。

• 执行来自系统已产生总线故障的地址位置的指令。

• 取向量时系统产生总线错误。

• 执行一条未定义的指令。

• T位已清为0,处理器不在Thumb状态时执行指令。

• 试图读取或保存数据到未对齐的地址。

注意:只有Reset和NMI能抢占具有固定优先级的HardFault异常。而HardFault异常则能抢占除Reset、NMI或另一个HardFault异常之外的所有异常。

<strong>1、锁定(Lock up)</strong>

Cortex-M0处理器的异常处理模型

kelly /

本节主要介绍Cortex-M0的异常处理模型。

<strong>1、异常的状态</strong>

每个异常都处于以下状态之一:

<strong>未激活(Inactive) </strong>

异常没有被激活也没有被挂起。

<strong>挂起(Pending) </strong>

异常正等待被处理器服务。

来自外设或软件的中断请求,能让相应中断变为挂起状态。

<strong>激活(Active)</strong>

异常正在被处理器服务,并且服务尚未结束。

注意:一个异常处理能中断另一个异常处理,在这种情况下,两个异常都处于激活态。

<strong>激活且挂起(Active and pending) </strong>

异常正在被处理器服务时,又出现了来自同一异常源的异常。

<strong>2、异常类型</strong>

异常的类型有:

<strong>Reset</strong>

Cortex-M0处理器的存储模型

kelly /

本文将描述Cortex-M0设备的内存映射和内存访问行为。该处理器有一个固定的存储映射,它可以提供高达4GB的可寻址内存。存储映射图如下:

<center><img src="http://mm32.eetrend.com/files/2016-08/wen_zhang_/100002417-7659-1.jpg&q…; alt=""></center>

该处理器为处理器核外设寄存器保留了PPB地址范围,关于Cortex-M0处理器以及核外设的内容见<a href="http://mm32.eetrend.com/content/2016/100002388.html"&gt;《Cortex-M0处理器及其特性》</a>

Cortex-M0处理器的编程模型

kelly /

本节描述Cortex-M0编程模型。除了内核的各个寄存器之外,还包含处理器操作模式和堆栈的介绍。

<strong>1、处理器工作模式</strong>

处理器工作模式有:

<strong>Thrread模式</strong>

用于执行应用程序,在处理器复位时,进入Thread模式。

<strong>Handler模式</strong>

用于异常处理,处理器执行完所有异常程序后,返回到Thread模式。

<strong>2、堆栈</strong>

处理器使用满递减堆栈,也就是说栈顶指针指向最后入栈的数据。处理器的压栈操作为:栈顶指针自动递减,再存入新的数据。处理器的堆栈有主堆栈(mainstack)和进程堆栈(processstack),它们的栈顶指针相互独立,见下文介绍的堆栈指针SP。

在Thread模式中,由CONTROL寄存器来决定使用主堆栈还是进程堆栈。而在Handler模式通常使用主堆栈。处理器工作模式与栈选择之间的关系如下表1所示:

Cortex-M0处理器及其特性

kelly /

本文将简要地介绍Cortex-M0处理器及其特性:

<strong>Cortex-M0处理器及其核外设</strong>

Cortex™-M0处理器是用于嵌入式应用设计的入门级ARM Cortex 32位的处理器。它为开发者提供以下好处:

• 简单易用的编程模型;

• 高效的低功耗操作模式;

• 高代码密度;

• 可确定的、高效的中断处理;

• 向上兼容Cortex-M 处理器系列其他处理器。

<center><img src="http://mm32.eetrend.com/files/2016-08/wen_zhang_/100002388-7545-1.jpg&q…; alt=""></center>

<center><i>图1-1 Cortex-M0 处理器的实现</i></center>

Cortex系列M0-4简单对比

Lee_ /

最近在关注Cortex-M处理器,针对目前进入大众视野的M0、M3、M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,

Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。.

<strong>一、比较 Cortex-M 处理器</strong>

<center><img src="http://mm32.eetrend.com/files/2016-08/wen_zhang_/100002258-7019-1.jpg&q…; alt="1" width="600"></center>

Cortex-M 系列处理器都是二进制向上兼容的,这使得软件重用以及从一个

【下载】Cortex-M0 用户指南

editor /

ARM公司的Cortex-M0应用于各种微控制器(MCU)中,并可让研发工程师以8位的价位创造32位的的效能,并将传统的8位和16位的处理器升级到更高效、更低功耗的32位处理器。

Cortex-M0是Cortex-M家族中的M0系列。最大特点是低功耗的设计。Cortex-M0为32位、3级流水线RISC处理器,其核心仍为冯·诺依曼结构,是指令和数据共享同一总线的架构。作为新一代的处理器,Cortex-M0的设计进行了许多的改革与创新,如系统存储器地址映像(system address map)、改善效率并增强确定性的嵌套向量中断系统(NVIC)与不可屏蔽中断(NMI)、全新的硬件除错单元等等,都带给了使用者全新的体验和更便利、 更有效率的操作。

CortexM0其核心架构为ARMv6M,其运算能力可以达到0.9 DMIPS/MHz,而与其他的16位与8位处理器相比,由于CortexM0的运算性能大幅提高,所以在同样任务的执行上CortexM0只需较低的运行速度,而大幅降低了整体的动态功耗。