ADK AMBA 设计套件
AHB 先进高性能总线
AHB - AP AHB 访问端口
AMBA 先进单片机总线架构
APB 先进外设总线
ARM ARM ARM 架构参考手册
ASIC 行业领域专用集成电路
ATB 先进跟踪总线
BE8 字节不变式大端模式
CPI 每条指令的周期数
CPU 中央处理单元
DAP 调试访问端口
DSP 数字信号处理器/数字信号处理
DWT 数据观察点及跟踪
ETM 嵌入式跟踪宏单元
FPB 闪存 地址重载 及断点
FSR Fault 状态寄存器
HTM CoreSight AHB 跟踪宏单元
ICE 在线仿真器
IDE 集成开发环境
IRQ 中断请求(通常是指外部中断的请求)
ISA 指令系统架构
ISR 中断服务例程
ITM 仪器化 跟踪宏单元
JTAG 连结点测试行动组(一个关于测试和调试接口的标准)
JTAG - DP JTAG 调试端口
LR 连接寄存器
LSB 最低有效位
LSU 加载 / 存储单元
MCU 微控制器单元(俗称单片机)
MMU 存储器管理单元
MPU 存储器保护单元
MSB 最高有效位
MSP 主堆栈指针
NMI 不可屏蔽中断
NVIC 嵌套向量中断控制器
OS 操作系统
PC 程序计数器
PSP 进程堆栈指针
PPB 私有外设总线
处理器必须在不怎么增加主频和功耗的条件下干更多的活儿。另一方面,处理器之间的互连也在加深,看这- ~串串熟悉的字眼:串口, USB,以太网,无线数传....处理器如欲支持这些数据通道,就必须在片上塞进更多的外设。在这个大环境下,ARM Cortex-M3(简称CM3)处理器,作为Cortex系列的处女作,诞生了。
CM3的招牌功夫包括:
- 实时性好。能够极速地响应中断,而且响应中断所需的周期数是确定的。
- 使用更方便。32位处理器、更简单的编程模型和更加透彻的调试系统。
- 移植很方便。
值得一提的是,CM3并不是第一个被拿去做万金油型处理器的内核。那廉颇虽老却依然骁勇的ARM7/ARM9处理器,在通用嵌入式处理器市场中德高望重,至今拥有无数铁杆粉丝。半导体业界的群英们,像NXP(philips)、Tl、Atmel、OKI、ST等,都以ARM为内核,做出了各自身怀绝技的32位MCU(微控制器单元<俗称单片机>)。
(也就是说,CM3是内核,不同的处理器可以使用同一种内核)
在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。本书主讲处理器内核本身。如果想要了解某个具体型号的处理器,还需查阅相关厂家提供的文档。
也就是说,同一种内核的不同型号的CPU,差别在于存储器、IO等。
ARM在1990年成立,当初的名字是“Advanced RISC Machines Ltd",当时它是三家公司的合资。
ARM从不制造和销售具体的处理器芯片。取而代之的,是ARM把处理器的设计授权给相关的商务合作伙伴,让他们去根据自己的强项设计具体的芯片,这些伙伴可都是巨头啊。
ARM+几年如一日地开发新的处理器内核和系统功能块。
由于历史原因(从ARM7TDMI幵始) ,ARM处理器一直支持两种形式上相对独立的指令集,它们分別是:
- 32位的ARM指令集。对应处理器状态:ARM状态
- 16位的Thumb指令集。对应处理器状态:Thumb状态。
可见,这两种指令集也对应了两种处理器执行状态。在程序的执行过程中,处理器可以动态地在两种执行状态之中切换。实际上,Thumb指令集在功能上是ARM指令集的一个子集,但它能带来更高的代码密度,给目标代码减肥。这对于要勒紧裤腰带的应用还是很经济的。
Thumb-2时16位Thumb指令集的一个超集,在Thumb-2种,16位指令首次与32位指令并存,结果在Thumb状态下可以做的事情一下子丰富了许多,同样工作需要的指令周期数也明显下降了。
从图中可见,Cortex-M3勇敢地拒绝了32位ARM指令集,却把自己的处理能力以身相许般地全托给Thumb-2指令集。这可能有些令人意外,但事实.上这却见证了Cortex-M3的用情专一:在内核水平上,就已经为适应单片机和小内存器件而抉择、取舍过了。但她没有嫁错郎,因为Thumb-2完全胜任在这个领域挑大梁。不过,这也意味着Cortex-M3作为新生代处理器,不是向后兼容的。因此,为ARM7写的ARM汇编语言程序不能直接移植到CM3上来。不过,CM3支持绝大多数传统的Thumb指令,因此用Thumb指令写的汇编程序就从善如流了。
CM3的出现,还在ARM处理器中破天荒地支持了“非对齐数据访问支持”。
Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。
Cortex -M3处理器拥有R0 -R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked” 寄存器。
RO-R12都是32位通用寄存器,用于数据操作。但是注意:绝大多数16位Thumb指令只能访问RO-R7,而32位Thumb-2指令可以访问所有寄存器。
Cortex -M3押有丙个堆栈指针,然而它们是banked, 因此任一时刻只能使用其中的一个。
- 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)
- 进程堆栈指针(PSP):由用户的应用程序代码使用。
堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐。
在ARM编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception)。除了外部中断外,当有指令执行了“非法操作”,或者访问被禁的内存区间,因各种错误产生的fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。在不严格的上下文中,异常与中断也可以混用。另外,程序代码也可以主动请求进入异常状态的(常用于系统调用)。