浅谈ARM Cortex-M0

一、引言

  ARM公司在2009年初发布了其嵌入式处理器系列中最小型、最低功耗的CortexM0处理器。CortexM0低功耗、高性能与极精简程序代码的特性,能应用于各种微控制器(MCU)中,并可让研发业者以8位的价位创造32位的效能,并进一步将传统的8位和16位的处理器推进至更高效能、更低功耗的32位处理器。

二、关于CortexM0

  ARM一改其传统的命名法则,以Cortex来为其全新的微处理器系列命名。在这个系列中,核心采用全新的ARMv7架构,引进了许多革命性的突破与创新,并首次由单一款式延伸成3种款式,并各自定义其相对应的架构,分别为CortexA(ARMv7A)、CortexR(ARMv7R)、CortexM(ARMv7M)。CortexA系列适于高性能的开放应用平台,CortexR系列适于实时信号处理控制系统,而CortexM系列则瞄准了对成本和功耗敏感却又有高性能需求的嵌入式应用领域,成为在微控制器、工业控制系统、汽车控制系统及无线网络等各种手持应用系统中的最佳解决方案。
CortexM0是CortexM家族中的微处理器核心,其拥有最低闸数、最低功耗以及强悍性能的优异表现。CortexM0为32位、3级流水线RISC处理器,其核心与ARM7同为冯·诺依曼(Von Neumann)架构,采指令和数据共享同一总线的设计。作为新一代的微处理器,CortexM0在整体的设计架构上进行了许多改革与创新,如折中效率和程序代码密度的全新指令集架构(ISA)、事先定义的系统存储器地址映像(system address map)、改善效率并增强确定性的嵌套向量中断系统(NVIC)与不可屏蔽中断(NMI)、全新的硬件除错单元等等,都带给了使用者全新的体验和更便利、更有效率的操作。

  CortexM0其核心架构为ARMv6M,为CortexM家族架构ARMv7M的一个子集,去除了许多复杂的支持,所以大幅降低基本核心之门数至12K,从而拥有极低之动态功耗85 μW/Hz。而在低成本、低功耗的前提下,由于采用了全新的指令集架构Thumb2 指令集,CortexM0并没有牺牲掉应有的效能,其运算能力可以达到0.9 DMIPS/MHz,而与其他的16位与8位处理器相比,由于CortexM0的运算性能大幅提高,所以在同样任务的执行上CortexM0只需较低的运行速度,而大幅降低了整体的动态功耗。

三、指令集Thumb2

  在传统的ARM7TDMI处理器系统中,系统重置后都是从ARM状态/指令集开始运行,处理器核心可以根据特定的应用需求切换到Thumb状态/指令集执行。ARM指令集为一32位长度之指令码,由于指令码长度较长,所以指令集都可以是有条件的执行,以获得较出色的效能。Thumb指令集为一16位长度之指令码,为ARM指令集之子集,程序代码密度提高了一倍,但可能需要更多的指令去执行相同的任务,所以造成了性能的下降。程序设计者可以根据不同的需求在两种状态下切换,以在程序代码效能和密度中取得平衡,但在状态切换中会有额外的程序执行,导致性能进一步的下降。另外ARM和Thumb指令集需要以不同方式编译,而增加的软件开发管理上的复杂度。Thumb2指令集则是一全新的技术,为一16位和32位指令码的结合,两种长度的指令码可共存于同一模式。所以全新的Thumb2技术结合了16位指令集高程序代码密度与32位指令集高效能的各自优点,并免去了状态切换之复杂度,而提升了整体的效能。

  CortexM0同时支持了Thumb和部分的Thumb2指令集,核心不论是在正常程序执行还是处理中断异常模式均保持在单一Thumb状态下执行,免去了不必要的状态切换,大幅地节省了执行时间和指令码大小。

四、系统存储器地址映像

  CortexM0核心采用一个系统存储器地址映像,为高达4 GB的可寻址存储空间提供简单和固定的映像机制。这个存储器映像机制为程序代码、SRAM、外部内存和外围设备提供了预先定义的专用地址。在传统的ARM微处理器架构中,并没有预先定义好存储器映像地址,而是由各家芯片制造商自行定义和设计,因此即使采用了相同的核心处理器,却有完全不同的存储器映像地址,给相互间程序代码移植带来了很大困难。CortexM0则是预先定义好了完整的存储器地址映像表,详细载明了每个区间地址内存储器的作用和特性,但也预留了某些区域给各家厂商自行设计。这种预先定义的映像关系,使得各家厂商可以对存取速度从事高度的优化,而且对于单芯片上的系统设计而言更易整合。

五、嵌套式向量中断系统

  嵌套式向量中断系统(NVIC)是CortexM0另一个令人注目的创新设计,它可以依据使用者不同的需求进行高度配置。CortexM0中的NVIC支持16个系统异常(exception,部分为系统保留)与最多32个外部中断(interrupt,外部中断支持数量由芯片设计商自行配置)供芯片设计商使用,搭配4级优先权的设置并借助NVIC与CortexM0核心紧密的结合为整个系统提供丰富且实时的中断处理能力。

  CortexM0采用一个事先定义的向量表,属于程序代码的一部分,向量表定义了堆栈的起始地址和各个异常/中断的入口地址。当某个中断被接受之后,CortexM0通过内部总线从向量表中获取其地址来执行。硬件支持的向量化中断功能大幅地缩短了进入中断的延迟,提高了程序效能,因为程序不再需要判断中断来源和进行必要的寄存器堆栈,完全由硬件自动完成。当异常发生时,程序状态寄存器(PSR)、程序计数器(PC)、链接寄存器(LR)和R0~R3、R12等通用寄存器将自动被存进堆栈;同时,处理器从中断向量表中读取出相对应的中断服务程序地址,并获取中断服务程序的第一条指令。一旦堆叠存储和取指完成后,中断服务或异常处理程序便开始执行,展现了极高且确切的效能。随后在中断服务程序结束前,相关寄存器将自动从堆栈中取出,原本中断了的正常程序也因此恢复执行,完全不需要软件的介入。由于可以在硬件中处理堆栈操作,CortexM0避免了传统的C语言中断服务程序中为了完成堆栈处理所要编写的汇编程序,这使应用程序的开发变得更加简单与便利。另外,值得一提的是,CortexM0还支持了所谓的TailChaining和LateArrival先进技术,大幅改善了传统ARM微处理器在相异的中断请求交互发生时的处理效率,缩短了中断延迟,进一步提升了CortexM0在实时系统的处理能力。

六、与ARM7TDMI 之比较

  基于ARM7核心的微处理器在过去几十年袭卷了32位MCU市场,在此将CortexM0和这位师出同门的老大哥加以比较,使大家清楚它们的差异。

七、新唐科技NuMicro家族

  微控制器(MCU)厂商新唐科技(Nuvoton Technology Inc.)前身为华邦电子逻辑事业群,近期推出以ARM CortexM0为核心的32位微控制器——NuMicro家族。该家族采用ARM公司最新发布的最小型、最低功耗、低门数、精简程序代码的CortexM0处理器,内建各种模拟与混合信号组件以及多种高速通信能力装置,执行效能约为传统8051的72倍。基于Keil开发环境下,客户很容易从8051升级至NuMicro来创造产品价值与竞争力。

  NuMicro家族的成员包括了四大系列,NUC100系列、NUC120系列、NUC130系列、NUC140系列。其核心CortexM0的执行频率为50 MHz,具有先进的嵌套向量中断控制(NVIC)、唤醒中断控制(WIC)、单周期32位乘法器与Serial Wire硬件除错单元支持等优异特性,并拥有Sleep与PowerDown不同的节能模式;并且配置了一个递减计数24位SysTick Timer,它可定时产生中断,提供理想的计时功能来驱动实时操作系统或其他预定的任务。此家族配备了多达128 KB的闪存和16 KB的SRAM,外围设备提供了高达12位、800 ksps的8 通道ADC、多组UART、SPI、I2C与USB2.0等高速总线等接口。其他外设则包括至多80个GPIO脚、4组通用计数器/定时器、RTC、看门狗定时器与PWM、CAN总线控制器丰富的外围装置可供客户依需求搭配使用,并提供多种封装样式供选择。

八、总结

  CortexM0核心的逻辑门数很少,非常适合低成本、低功耗要求的应用。由于支持全新的Thumb2指令集,免除了状态间的切换,增强了整体效能,提升了程序代码密度,简化了软件的开发与维护,缩短了产品的开发时间。CortexM0内建除错系统,在支持传统的JTAG基础上,开发了更新更好的Serial Wire除错接口,并配置了多达4个断点和2个观察点。CortexM0已获得ARM微控制器开发套Keil RealView MDK的支持,结合了ARM RealView编译工具以及强大完善的Keil uVision IDE与Debugger工具。CortexM0拥有许多实时操作系统与第三方工具的支持,包括IAR Systems、Mentor Graphics等。该处理器并向上兼容于其家族系列中的产品开发工具以及二进制程序代码,保证其程序代码未来的移植和发展性。相信在不久的未来,CortexM0将在整个微控制器市场和嵌入式应用系统中大放光彩。

ARM Cortex-M0(1)---浅谈ARM Cortex-M0相关推荐

  1. 浅谈ARM Cortex-M系列架构——架构篇

    浅谈ARM Cortex-M系列架构文章 浅谈ARM Cortex-M系列架构--指令集 目录 前言 1.操作状态 2.操作模式 二.寄存器 1.通用目的寄存器 2.R13,栈指针(SP) 3.R14 ...

  2. intel 指令集_苹果首款ARM Mac来了,浅谈ARM和Intel处理器

    点击蓝字 关注我们 苹果发布会 在11月11日凌晨,苹果的新品发布会中 ,推出了基于首款ARM框架的Mac. 苹果的Mac将不再使用 Intel的芯片,而且ARM 版 Mac 会采用自研 GPU.这意 ...

  3. 苹果首款ARM Mac来了,浅谈ARM和Intel处理器!

    在2020年11月11日凌晨,苹果的新品发布会中 ,推出了基于首款ARM框架的Mac.苹果的Mac将不再使用 Intel的芯片,而且ARM版Mac会采用自研GPU.这意味着苹果Mac从Intel到了A ...

  4. arm中断保护和恢复_浅谈ARM处理器的七种异常处理

    昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq ...

  5. 浅谈arm嵌入式产品及相关应用

    嵌入式系统从上世纪70年代出现到现在已经有几十年的发展历史,如今已经发展到一定成熟技术,并广泛用于于人们的生活和工作当中.嵌入式系统结构紧凑.占用体积小,可以以部件的形式安装在所控制的装置内部,并为用 ...

  6. 浅谈AM5728裸板调试

    一.浅谈ARM裸板调试 1. 连接仿真器,读写寄存器 将硬件仿真器插到ARM板的JTAG口上,然后连接PC,现在的ARM仿真器好像都是通过USB和PC相连了.连接好后,就给板子上电,然后打开PC端的调 ...

  7. Arm公布Arm Safety Ready计划,并推出Cortex A76AE自动驾驶计算架构

    雷锋网(公众号:雷锋网)消息,汽车市场正在发生变化.现代汽车使用的电子设备比以往任何时候都多,所有主要的汽车制造商都在研发自动驾驶汽车,这意味着未来的汽车将需要更复杂的SoC.而随着自动驾驶汽车的需求 ...

  8. ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?

    浅谈为什么很多蓝牙模块厂家选择nRF52832? 现在蓝牙低功耗(BLE)SOC作为新一代蓝牙,以其低功耗的优势,正凸显出强大的市场竞争力,而其中Nordic公司的nRF52832这一款低功耗蓝牙芯片 ...

  9. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

最新文章

  1. iPad mini时隔四年更新,搭载A12芯片,起售价2999
  2. package extends 解析
  3. urllib.parse包学习
  4. 塔防游戏的路径寻找算法分析
  5. 2017/Province_Java_C/2、兴趣小组
  6. java中springdi_java中spring入门
  7. 二、Java 面向对象高级——Collection、泛型
  8. getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...
  9. 几种在shell命令行中过滤adb logcat输出的方法
  10. Python 16进制与字符串的转换、二进制 to 十进制、十六进制 to 十进制、十进制 to 二进制
  11. 【WXS数据类型】Boolean
  12. 表达式求值(from leetcode 241)
  13. java调用cmd关闭excel,java 调用 windows 的 cmd 命令
  14. python电脑下载-python
  15. IntelliJ IDEA 12.0中文字符显示不正常解决方案
  16. SQLite: 关于日期的标准化问题
  17. tcping要安装什么工具linux,Linux下的TCP测试工具——TCPING安装简明教程
  18. Linux串口通信编程
  19. Linux系统配置静态IP地址步骤
  20. IE11 兼容 ES6

热门文章

  1. python编程计算器_Python编程之计算器/字符及界面
  2. RTMP流媒体播放过程
  3. Nginx基本数据结构之ngx_array_t
  4. 使用异步 I/O 大大提高应用程序的性能(来自IBM)
  5. jy61 树莓派_用Linux树莓派来读取JY61的串口数据
  6. bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法
  7. Android 百度地图开发问题----解决地图有时候加载不出来问题
  8. c#与api类型对照表
  9. 使用JS实现将GridView中的TextBox列的值博给GridView外的一个文本筐
  10. Python与开源GIS:GDAL简介转载