跳转到主要内容

Cortex-M3

【下载】Cortex-M3 的异常处理

editor /

Cortex-M3的一些特性(一)

<li>处理器状态的自动保存和恢复;</li>

<li>中断向量表读取与处理器状态保存并行处理;</li>

<li>支持尾链技术,当处理背靠背的中断时,不需在两个中断服务子程序之间进行入栈和出栈操作;</li>

<li>可动态重设中断优先级;</li>

<li>NVIC 和 Cortex-M3 处理器核紧密耦合,可尽早处理中断,尤其是晚到的高优先级中断;</li>

Cortex-M3的一些特性(二)

<li>中断的数目可以配置,从 1 到 240;</li>

<li>为 Handler 和 Thread 模式分别提供独立的栈和访问特权等级;</li>

<li>ISR 调用采用 C/C++标准ARM 体系结构过程调用标准(AAPCS);</li>

<li>可屏蔽优先级以支持临界区。</li>

【下载】Cortex-M3的低层编程

editor /

<strong>概览</strong>

在CM3 上编程,既可以使用C 也可以使用汇编。可能还有其它语言的编译器,但是大多数人还是会在C 与汇编的世界里游弋。C 与汇编都有尺短寸长,不能互相取代。使用C 能开发大型程序,而汇编则用于执行特种任务。

在使用不同的工具链和芯片时,有大量的用法和用量都随之不同。因此,本书不会深入讲解怎样精通一个具体的工具链,也不会大谈如何把程序烧到板子上。在后面的章节会提到一些入门知识,具体内容还需查阅相关的文献和在线帮助文档。

<strong>使用汇编</strong>

在使用不同的工具链和芯片时,有大量的用法和用量都随之不同。因此,本书不会深入讲解怎样精通一个具体的工具链,也不会大谈如何把程序烧到板子上。在第19 章和第20章会提到一些入门知识,具体内容还需查阅相关的文献和在线帮助文档。

不论如何,时间宝贵。我们应该以C 来实现程序的大框架,而本着好钢用在刀刃上的原则来使用汇编,因为只有在不多的特殊场合是非使用汇编语言不可的,它们是:

ARM cortex-M3 异常处理分析

editor /

作者:dogsun88

<strong>一、进入异常之前处理器可能的状态有:</strong>

1、 handler

2、 线程,MSP

3、 线程,PSP

<strong>二、产生异常时:</strong>

1、 有一个压栈的过程,产生异常时使用PSP,就压入到PSP中,产生异常时使用MSP,就压入到MSP中

2、 会根据处理器的模式和使用的堆栈,设置LR的值(当然设置完的LR的值再压栈)

<strong>三、异常返回时:</strong>

根据LR的值,判读使用那个堆栈,然后再从相应的堆栈中POP数据到寄存器。

<strong>举例说明:</strong>

关于Cortex-M3的中断优先级描述

editor /

关于Cortex-M3的中断优先级的描述 

1、和之前的ARM7不同,Cortex-M3使用NVIC(嵌套向量中断管理器)来管理系统的中断。
 
2、每一个中断源的优先级由3个位来决定,这3个位就是中断优先级寄存器器里(PRIx)的INTn,这里的n 一般是A、B、C、D。 

3、每个中断源的优先级由2部分组成,一部分表示中断组别,一部分表示同组的优先级编号。组别优先级高的中断源,可以打断组别优先级低的中断处理,同一个组的中断源不能打断正在处理的中断,只能在进入中断处理时,同时发生的两个中断源进行判别优先级。 

4、我们把中断源的优先级组别和同组内的中断编号分别用抢占式优先级别和子优先级别来表示。他们的具体表现形式就是第2条提到的INTn。 

5、由于这INTn的3个位只能表示0-7 总共8个数字,所以在这3个位之外,系统安排了另一个寄存器来说明这3个位时如何使用的,这个寄存器就是APINT。APINT中的PRIGROUP位域就是对中断优先级的这3个位如何分配使用进行说明的,它是针对整个系统而言的,而不是针对某一个中断源而言的。 

【下载】Cortex-M3开发环境搭建(MDK)

editor /

<strong>一、Cortex-M3环境介绍</strong>

Cortex-M3程序开发使用Keiluvision4软件,该软件是由KEIL(anARMcompany)公司开发的一个IDE开发环境,包括工程管理,链接设置等等。 Keiluvision4开发环境界面优美、功能强大、芯片种类多、仿真能力强,是众多工程师首选开发环境之一。

Keiluvision4开发环境中比较常用的菜单如下所示:

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002202-6804-buhuo.j…; alt="" width="600"></center>

<strong>二、Cortex-M3 工程创建</strong>

1 创建一个工程模板 创建一个工程模板 创建一个工程模板 创建一个工程模板

ARM Cortex-M3 MCU 的 I2C DMA操作和中断

editor /

在项目开发的过程中,发现程序总是死在判断DMA一次传输是否完成这个标志位上。进一步回退分析,发现是在I2C读的过程中,有使用到DMA去取外部I2C设备的data。

但是data并没有读完,Data为32bits,DMA在读到18bits时,就出现读不到data bit了。导致I2C硬件模块不能进一步动作,SCK一直被拉低,没有clock输出,SDA也是如此。

下面是通过示波器抓到的波形:

<center><img src="http://mm32.eetrend.com/files/2016-07/wen_zhang_/100002186-6714-111.png…; alt="" width="600"></center>

ARM Cortex-M3/M4微控制器最大效率设计三秘诀

editor /

大部分采用Cortex-M3/M4 MCU的目标应用是便携式的,并且供电电源来自电池或能源收集系统,因此我们所探讨的大部分概念涉及如何减少系统整体能耗的技术。然而,在许多情况下,这些节能技术也是处理器应用设计的有力工具,可提供:

●更符合成本效益的解决方案

●更大的升级和采用新特性的设计冗余

●有助于产品在激烈竞争市场上脱颖而出的性能和特性

<strong><font size="5">小知识:Cortex-M3对比Cortex-M4</font></strong>

Cortex-M3架构背后的指导思路是设计一种既要满足应用的成本效益又要提供高性能计算和控制1的处理器。类似的应用包括汽车车身系统、工业控制系统和无线网络/传感器产品等。M3系列为32位的ARM处理器架构引进了多项重要特性,包括:

●不可屏蔽式中断

●高度确定性、嵌套、向量式中断

●原子位操作

●可选的存储保护(MPU)

除了绝佳的计算性能,Cortex-M3处理器先进的中断结构还能确保系统迅速响应真实世界的事件,同时仍然提供极低的动态与静态功耗。

Cortex-M3的异常和中断

editor /

作者:sunheshan

<strong><font size="5">1、 异常</font></strong>

M3支持15个系统异常,240个外部异常IRQ,其中NMI,复位,hardfault三个异常的优先级固定不可更改且是负数,其余的都可编程。

M3的异常分为抢占优先级和子优先级。

<strong><font size="5">2 、关于中断优先级</font></strong>

M3中,除了复位,NMI以及硬fault有固定的优先级,其他优先级都是可编程的。原则上,CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精简设计,以致实际上支持的优先级数会更少,如8级,16级,32级等。它们在设计时会裁掉表达优先级的几个低端有效位。

如使用3个位表示优先级则配置寄存器的结构如图所示:

Cortex-M3与Cortex-M4对比

selina /

本文主要从M3和M4的MPU、DSP能力、debug调试和电源管理4个方面说明两者的区别。

<strong><font size="5">1、内存保护单元MPU </font></strong>

与Cortex - M3的相同,MPU是一个Cortex - M4中用于内存保护的可选组件。处理器支持标准ARMv7内存保护系统结构模型。您可以使用在MPU执行 特权/访问 规则,或者独立的进程。这个MPU提供全面支持:

<li>保护区</li>

<li>重叠保护区域,提升区域优先级(7 =最高优先级,0 =最低优先级)</li>

<li>访问权限</li>

<li>将存储器属性输出至系统</li>

<strong><font size="5">2、DSP能力</font></strong>

【下载】Cortex-M3技术参考指南

selina /

Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。

比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。另外在CM3中,Both小端模式和大端模式都是支持的。

CM3内部还附赠了好多调试组件,用于在硬件水平上支持调试操作,如指令断点,数据观察点等。另外,为支持更高级的调试,还有其它可选组件,包括指令跟踪和多种类型的调试接口。