大家听说过Cortex-M3吗?在嵌入式处理器的世界,cortex-M3是一位人见人爱的后生。它的成本和功耗低,可配置性很高。如今,很多ARM的工程师加入了cortex-M3的学习与开发中,WIZnet一直都是行业的领先者,即将上市的新产品W7200正是加入了cortex-M3处理器的全硬件TCP/IP协议栈芯片,通过利用它的优势,相信会得到更多客户的青睐。下面,广大的嵌入式爱好者可以跟随我们一起来了解cortex-M3,加入到基于这一先进的32位处理器的嵌入式开发学习。

Cortex-M3 学习(一)

1.走进cortex-M3

ARM Cortex- M3 处理器是行业领先的 32 位处理器,适用于具有高确定性的实时应用,已专门开发为允许合作伙伴为范围广泛的设备(包括微控制器、汽车车体系统、工业控制系统以及无线网络和传感器)开发高性能低成本的平台。该处理器提供出色的计算性能和对事件的卓越系统响应,同时可以应对低动态和静态功率限制的挑战。该处理器是高度可配置的,可以支持范围广泛的实现(从那些需要内存保护和强大跟踪技术的实现到那些需要极小面积的对成本非常敏感的设备)。

(基于Cortex-M3的闪存MCU)

2.要使用低成本的32位处理器,开发人员面临两种选择,基于Cortex-M3内核或者ARM7TDMI内核的处理器。而ARM
Cortex-M3相比于ARM其他系列微控制器,具有以下优势或特点:

1). 三级流水线+分支预测

ARM Cortex-M3与ARM7内核一样,采用适合于微控制器应用的三级流水线,但增加了分支预测功能。

现代处理器大多采用指令预取和流水线技术,以提高处理器的指令执行速度。流水线处理器在正常执行指令时,如果碰到分支(跳转)指令,由于指令执行的顺序可能会发生变化,指令预取队列和流水线中的部分指令就可能作废,而需要从新的地址重新取指、执行,这样就会使流水线“断流”,处理器性能因此而受到影响。特别是现代C语言程序,经编译器优化生成的目标代码中,分支指令所占的比例可达10-20%,对流水线处理器的影响会的更大。为此,现代高性能流水线处理器中一般都加入了分支预测部件,就是在处理器从存储器预取指令时,当遇到分支(跳转)指令时,能自动预测跳转是否会发生,再从预测的方向进行取指,从而提供给流水线连续的指令流,流水线就可以不断地执行有效指令,保证了其性能的发挥。

ARM Cortex-M3内核的预取部件具有分支预测功能,可以预取分支目标地址的指令,使分支延迟减少到一个时钟周期。

2). 哈佛结构

从内核访问指令和数据的不同空间与总线结构,可以把处理器分为哈佛结构和普林斯顿结构(或冯.诺伊曼结构)。冯.诺伊曼结构的机器指令、数据和I/O共用一条总线,这样内核在取指时就不能进行数据读写,反之亦然。这在传统的非流水线处理器(如MCS51)上是没有什么问题的,它们取指、执行分时进行,不会发生冲突。但在现代流水线处理器上,由于取指、译码和执行是同时进行的(不是同一条指令),一条总线就会发生总线冲突,必须插入延迟等待,从而影响了系统性能。ARM7TDMI内核就是这种结构的。

而哈佛结构的处理器采用独立的指令总线和数据总线,可以同时进行取指和数据读写操作,从而提高了处理器的运行性能。ARM

Cortex-M3、ARM966E、ARM926EJ、ARM1136JF等内核都采用了哈佛结构。

3). 内置嵌套向量中断控制器(NVIC)

针对业界对ARM处理器中断响应的问题,Cortex-M3首次在内核上集成了嵌套向量中断控制器(NVIC)。Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);Cortex-M3还使用尾链技术,使得背靠背(back-to-back)中断的响应只需要6个时钟周期(ARM7需要大于30个周期)。以STM32运行在75MHz为例,中断延迟只有80ns-160ns。另外,Cortex-M3采用了基于栈的异常模式,使得芯片初始化的封装更为简单。

ARM7TDMI内核不带中断控制器,具体MCU的中断控制器是各芯片厂商自己加入的,这使得各厂商的ARM7

MCU中断控制部分都不一样,给用户使用及程序移植带来了很大麻烦。Cortex-M3内核集成NVIC,各厂商生产的基于Cortex-M3内核的MCU都具有统一的中断控制器,对用户使用各种Cortex-M3

MCU,特别是中断编程带来了很大的便利。

4). 支持位绑定操作

以前的ARM内核不支持位操作,当需要对一个变量或端口的某一位操作时,先要用逻辑与/或指令屏蔽其他的位,使位操作需要较多的指令和时钟周期。ARM

Cortex-M3采用了一种特殊的方法——位绑定:把一个地址单元的32位变量中的每一位,通过一个简单的地址转换算法,映射到另一个地址空间,每一位占用一个地址,对此地址空间的操作,只有数据的最低一位是有效的,其余高31位的值被忽略。相当于把一个“横”的32位字给“竖”起来。这样对新的映射空间操作时,就可以不用屏蔽操作,优化了RAM和I/O寄存器的读写,提高了位操作的速度。

这种方法粗看起来好像损失了很多地址空间,其实对于32位的ARM处理器而言,总共可以寻址4GB的空间,而对于一个MCU来说,一般只用到几百KB的空间。所以这种处理方法丝毫不会影响一个MCU的正常使用,又大大简化了处理器的设计,可以说是一种良策。

5). 支持串行调试(SWD)

ARM处理器一般都使用JTAG调试接口,使得仿真、调试工具统一而廉价,方便了用户开发。但JTAG调试接口至少要占用芯片的5-6个引脚,这对于一些引脚较少的MCU来说,有时会对仿真调试和I/O使用带来麻烦。

ARM

Cortex-M3在保持原来JTAG调试接口的基础上,还支持串行调试(SWD)。使用SWD时,只占用2个引脚,就可以进行所有的仿真和调试,节省了调试用引脚,用户就可以使用更多的引脚。

另外,Cortex-M3支持8个硬件断点(ARM7、ARM9只支持2个硬件断点),可以减少断点调试时对代码的影响,保证仿真、调试的时序准确性。

6). 内核支持低功耗模式

ARM内核已经是一个高性能、低功耗的内核,但ARM7、ARM9等内核本身只有运行/停止模式,没有其他模式。各芯片厂商只能在内核基础上,对各自加入的外设定义各种低功耗模式。Cortex-M3加入了类似于8位处理器的内核低功耗模式,支持3种功耗管理模式:通过一条指令立即睡眠;异常/中断退出时睡眠;深度睡眠。使整个芯片的功耗控制更为有效。以STM32为例,其RAM和寄存器状态保持的停机模式耗电仅为14uA,从此状态的启动时间仅为7us。

Cortex-M3的运行功耗(Active

Mode)也很低。以STM32系列微控制器为例,其典型功耗约为500uA/MHz,也只是目前业界超低功耗单片机MSP430系列(约为250uA/MHz)的2倍。但MSP430是16位处理器,而STM32是32位处理器。

Cortex-M3的更多相关文章

  1. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  2. ARM Cortex M3(V7-M架构)硬件启动程序 一

    Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...

  3. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)

    ARM架构:  由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7:       一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...

  4. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  5. Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors

    Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...

  6. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  7. 【freertos】002-posix模拟器设计与cortex m3异常处理

    目录 前言 posix 标准接口层设计 模拟器的系统心跳 模拟器的task底层实质 模拟器的任务切换原理 cortex M3/M4异常处理 双堆栈指针 双操作模式 栈帧 EXC_RETURN 前言 如 ...

  8. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

  9. stm32和cortex M3学习内核简单总结

    1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...

  10. CORTEX -M3 : Registers in depth

    http://www.zembedded.com/cortex-m3-registers-in-depth/ Thanks for the overwhelm response you show in ...

随机推荐

  1. Cypher查询语言--Neo4j-WHERE(三)

    目录 Where Boolean 操作类型 节点属性上的过滤 正则表达式 转义正则表达式 不分大小些正则表达式 关系类型上的过滤 属性存在性 如果缺失属性默认为true 如果缺失属性默认为false ...

  2. python3的zip函数

    zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象. 这个可迭代对象可以使用循环的方式列出其元素 若多个可迭代对象的长度不一致,则所返回的 ...

  3. xBIM 插入复制功能

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  4. BZOJ 2004: [Hnoi2010]Bus 公交线路 [DP 状压 矩阵乘法]

    传送门 题意: $n$个公交站点,$k$辆车,$1...k$是起始站,$n-k+1..n$是终点站 每个站只能被一辆车停靠一次 每辆车相邻两个停靠位置不能超过$p$ 求方案数 $n \le 10^9, ...

  5. Django搭建博客网站(一)

    Django搭建自己的博客网站(一) 简介 这个系列主要是通过使用Django这个python web框架实现一个简单的个人博客网站.对Django有疑问可以上Django官网查文档. 功能 后台管理 ...

  6. php 数组变成树状型结构

    <? php $stime = microtime(true); $nodes = [ ['id' = > 1, 'pid' = > 0, 'name' = > 'a'], [ ...

  7. nodejs http post 请求带参数

    // We need this to build our post string var querystring = require('querystring'); var http = requir ...

  8. Gitlab的安装与实践

    tucao 先让我来吐槽一下下,使用GitHub以及Bitbucket比较不太稳定,尤其是后者,可以说是极其不稳定,甚至无法克隆仓库到本地.因此,决定安装一款开源且免费的Git服务到自己的服务器主机上 ...

  9. Jenkins 不同角色不同视图及不同权限设置

    由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenki ...

  10. mac给文件批量添加后缀名

    for i in *;do mv "$i" "$i.mp4";done