系列文章目录
前言
单片机市场的规模可以用“巨无霸”来形容,预计到2010时每年能有20G片的出货量。世界各地的器件供应商纷纷亮出自己的得意之作,他们提供的器件和架构也是各具特色。
在这个大环境下,ARM Cortex‐M3处理器,作为Cortex系列的处女作,为了让32位处理器入主作庄单片机市场,轰轰烈烈地诞生了!由于采用了最新的设计技术,它的门数更低,性能却更强。
Cortex‐M3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。
ARMv7架构和CM3特点
ARMv7架构
从ARMv6设计开始有一个重大的决定:这个架构要能上能下,从最低端的MCU到最高端的“应用处理器”都通吃,但不能因此就这也会,那也会,但就是都不精。仍须定位准确,使处理器的架构能胜任每个应用领域。
基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,成果就是ARMv7架构的闪亮登场。在这个版本中,内核架构首次从单一款式变成3种款式。
-
款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了
-
款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。
-
款式M:用于深度嵌入的,单片机风格的系统中——本书的主角。
CM3特点
Cortex‐M3是ARMv7架构的掌上明珠。和曾经红透整个业界的老一辈ARM7相比,Cortex‐M3则是新生代的偶像,处处闪耀着青春的光芒活力。
高性能:
- 许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex‐M3 比得过绝大多数其它的架构。
- Thumb‐2 的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32 位 ARM 状态和16 位 Thumb 状态之间了。这简化了软件开发和代码维护,使产品面市更快。
先进的中断处理功能:
- 内建的嵌套向量中断控制器支持多达 240 条外部中断输入。向量化的中断功能剧烈地缩短了中断延迟,因为不再需要软件去判断中断源。
- NVIC 支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8 级优先级,而且还能动态地被修改。
低功耗:
- 在内核水平上支持节能模式(SLEEPING 和 SLEEPDEEP 位)。通过使用“等待中断指令(WFI)”和“等待事件指令(WFE)”,内核可以进入睡眠模式,并且以不同的方式唤醒。
调试支持:
- 在支持传统的 JTAG 基础上,还支持更新更好的串行线调试接口。
- 基于 CoreSight 调试解决方案,使得处理器哪怕是在运行时,也能访问处理器状态和存储器内容。
CM3硬件组成
CM3 处理器其实是个大礼包,里面除了处理核心外,还有了好多其它组件,以用于系统管理和调试支持。
寄存器组及操作模式
Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。
Cortex‐M3 处理器支持两种处理器的操作模式,还支持两级特权操作。两种操作模式分别为:处理者模式(handler mode,以后不再把 handler 中译——译注)和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。
Cortex‐M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
异常和中断
Cortex‐M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested VectoredInterrupt Controller)。它与内核有很深的“私交”——与内核是紧耦合的。NVIC 提供如下的功能:
- 可嵌套中断支持
- 向量中断支持
- 动态优先级调整支持
- 中断延迟大大缩短
- 中断可屏蔽
调试系统架构
Cortex‐M3 在内核水平上搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机(halting)、单步执行(stepping)、指令断点、数据观察点、寄存器和存储器访问、性能速写(profiling)以及各种跟踪机制。
Cortex‐M3 的调试系统基于 ARM 最新的 CoreSight 架构。不同于以往的 ARM 处理器,内核本身不再含有 JTAG 接口。取而代之的,是 CPU 提供称为“调试访问接口(DAP)”的总线接口。
CM3存储器映射和指令集
存储器映射
CM3 的存储器系统与从传统 ARM 架构的相比,已经脱胎换骨了:
- 它的存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。
- CM3 的存储器系统支持所谓的“位带”(bit‐band)操作。通过它,实现了对单一比特的原子操作。位带操作仅适用于一些特殊的存储器区域中,见本章论述。
- CM3 的存储器系统支持非对齐访问和互斥访问。这两个特性是直到了 v7M 时才出来的。
最后,CM3 的存储器系统支持 both 小端配置和大端配置。
存储保护单元MPU
Cortex‐M3 有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由 fault异常的服务例程来分析该错误,并且在可能时改正它。
MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。
Thumb-2指令集
Cortex‐M3 不支持ARM指令集,只使用 Thumb‐2 指令集。这是个了不起的突破,因为它允许 32 位指令和 16 位指令水乳交融,代码密度与处理性能两手抓,两手都硬。而且虽然它很强大,却依然易于使用。