ARM_Cortex-M0+

**ARM Cortex-M** 是 ARM 架構處理器核心中，低階系列的統稱，由安謀控股所授權。這組核心的特點為低成本以及高能源效率的微處理器而優化設計，已有上千萬個消費性裝置中有此系列的微處理器。此系列核心包括 Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33、Cortex-M35P 和 Cortex-M55。其中 Cortex-M4 / M7 / M33 / M35P / M55 核心有浮點運算器的選項，若有浮點運算器的選項，會在型號後面說明，例如 Cortex-Mx with FPU 或 Cortex-MxF，其中 x 是核心編號。

## 簡介

ARM Cortex-M 系列是為了單晶片、特殊應用積體電路（ASIC）、應用專門標準產品（ASSP）、現場可程式化邏輯閘陣列（FPGA）及單片系統（SoC）設計的 ARM 微處理器核心。Cortex-M 核心常用在
專用微控制器晶片中，但也會藏在 SoC 晶片中，例如電源管理制器、輸入／輸出控制器、系統控制器、觸碰螢幕控制器、智慧型電池控制器以及感測器控制器。

以往 8 位元的微控制器相當流行，但低階的 Cortex-M 晶片已經降價，佔據了一些 8 位元微控制器的市場。在取代 8 位元微控制器時，Cortex-M 是常出現的選項，因為有 32 位元數學運算上的優勢，也會用來替換一些較舊的 ARM 核心 ，例如 ARM7 及 ARM9。

### 授權

安謀控股不會以其自身的技術生產 CPU 或販售 CPU，而是其將處理器的架構授權給其他有意願開發的公司。安謀有許多不同的授權條款，差異在成本以及可交付成果。對於所有的授權，安謀都會提出一份可整合的 ARM 核心硬體描述，也包括完整的軟體開發工具組，以及販售包括 ARM CPU 在內的積體電路的權利。

### 矽客製化

整合元件製造廠（IDM）收到的 ARM 處理器智慧財產權，是可邏輯綜合的暫存器傳輸級（用 Verilog 所寫）。以此型式，整合元件製造商可以進行架構層級的最佳化以及延伸，可以讓製造商達成其客戶的設計目的，例如高時脈速度、非常低的能耗、指令集延伸（包括浮點數）、針對大小的最佳化、除錯器的支援等。若要確認特定的 ARM CPU 晶片中已有那些功能，則需確認製造商的資料表以及相關檔案。

Cortex-M 核心的部份選配機能如下：

* SysTick 計時器：24 位元的系統計時器，延伸了處理器以及巢狀向量中斷控制器（Nested Vectored Interrupt Controller、NVIC）的機能。若有此計時器，也可以提供額外的 SysTick 中斷，可以組態其優先權。雖然 SysTick 計時器不是必備的，不過幾乎沒有不支援 SysTick 的 Cortex-M 微處理器。若 Cortex-M33 控制器有安全擴展（Security Extension）選項，會有二個 SysTicks，一個是安全的，另一個是一般的。
* 位元帶（Bit-Band）：位元帶區域內記憶體中的每一個位元，可以個別對映到一個字元組。例如，寫入特定的假名字元組，就代表設定或是清除位元帶區域內特定的位元。因此位元帶區域內的每一個位元都可以透過字元組對齊的位址來直接讀寫。而且，每一個位元都可以用 C/C++ 進行設定、清除、反相等功能，不需要透過一連串畗讀取 - 修改 - 寫入的指令順序。位元帶也不是 Cortex-M 一定會有的功能，不過不支援位元帶的 Cortex-M3 或 Cortex-M4 微處理器較不常見。有些 Cortex-M0 及 Cortex-M0 + 微處理器也會有位元帶。
* 記憶體保護單元（MPU）：透過強制的權限以及存取規則，可以保護特定區域的記憶體。最多可以支援八個不同的記憶體區域，每個還可以分成八個等大小的子區域。
* 緊密耦合記憶體（Tightly-Coupled Memory、TCM）：是低延遲的 RAM，可以儲存關鍵性的程式、資料及堆疊。緊密耦合記憶體一般會是微處理器中最快的 RAM，僅次於快取記憶體。
* 註：大部份 Cortex-M3 及 M4 的微處理器有位元帶及記憶體保護單元。M0/M0 + 可以用 Cortex-M 系統開發工具加入位元帶選項
* 註：軟體在試圖使用特定機能時，需要先確認該機能是否有效
* 註：Cortex-M35P 的公開資料不多，一直到其技術參考手冊發行後才有改善。

**額外的_矽智財_選項**：

* 位元組序：小端序（Little-endian）或大端序（big-endian）。Cortex-M 和其他早期的 ARM 核心不同，在製作晶片時就要選用小端序或大端序。
* 中斷：1 至 32 個（M0/M0+/M1）、1 至 240 個（M3/M4/M7/M23）、1 至 480 個（M33/M35P）
* 喚醒中斷控制器：選配
* 向量表位移暫存器：選配（M0 沒有此選項）
* 指令存取寬度：只有 16 位元，或幾乎是 32 位元
* 支援使用者／特取模式：選配
* 重設所有的暫存器：選配
* 單一週期的 I/O 埠：選配（M0+/M23）
* 除錯存取埠（DAP）：無、SWD、JTAG 及 SWD（所有 Cortex-M 核心都有此選項）
* 支援 Halting 除錯：選配
* 監視點比較器數量：0 至 2 個（M0/M0+/M1），0 至 4 個（M3/M4/M7/M23/M33/M35P）
* 中斷點比較器數量：0 至 4 個 (M0/M0+/M1/M23)，0 至 8 個（M3/M4/M7/M33/M35P）

### 指令集

Cortex-M0 / M0+ / M1 實現的是 **ARMv6-M** 架構，Cortex-M3 實現的是 **ARMv7-M** 架構，Cortex-M4 / Cortex-M7 實現的是 **ARMv7E-M** 架構。Cortex-M23 / M33 / M35P 實現的是 **ARMv8-M** 架構，Cortex-M55 實現的是 **ARMv8.1-M** 架構。這些架構是二進制的指令碼，可以和 ARMv6-M、 ARMv7-M、ARMv7E-M 向上相容。Cortex-M0 / Cortex-M0+ / Cortex-M1 的指令碼不用修改就可以在 Cortex-M3 / Cortex-M4 / Cortex-M7 上執行。Cortex-M3 上可以執行的二進制程式碼不需修改就可以在 Cortex-M4 / Cortex-M7 / Cortex-M33 / Cortex-M35P 上執行。Cortex-M 架構中支援 Thumb-1 和 Thumb-2 的指令集，不支援早期的 32-bit ARM 指令集。

所有 Cortex-M 的核心都有一個共通的指令子集，包括大部份 Thumb-1 指令、一些 Thumb-2 指令，以及結果為 32 位元的乘法。Cortex-M0 / Cortex-M0+ / Cortex-M1 / Cortex-M23 設計目的就是希望讓矽晶面積最小，因此其指令集也是 Cortex-M 家族中最少的。

Cortex-M0 / M0+ / M1 中有 Thumb-1 指令，不過沒有 ARMv7-M 架構才加入的指令（CBZ, CBNZ, IT）。Cortex-M0 / M0+ / M1 包括一小部份的 Thumb-2 指令（BL, DMB, DSB, ISB, MRS, MSR）。Cortex-M3 / M4 / M7 / M33 / M35P 有所有基本的 Thumb-1 和 Thumb-2 指令。Cortex-M3 加上了三個 Thumb-1 指令、所有的 Thumb-2 指令、硬體的整體除法、以及飽和運算指令。Cortex-M4 加上了數位訊號處理（DSP）指令，以及可選的單精度浮點運算器（VFPv4-SP）。Cortex-M7 加上了可選的雙精度浮點運算器（VFPv5）。Cortex-M23 / M33 加上了 TrustZone 指令。

* 註：Cortex-M0／M0+／M1 不包括以下 16 位元的 Thumb-1 指令：CBZ, CBNZ, IT。
* 註：Cortex-M0／M0+／M1 隻包括以下 32 位元的 Thumb-2 指令：BL, DMB, DSB, ISB, MRS, MSR.
* 註：Cortex-M0／M0+／M1／M23 隻有乘積結果為 32 位元的乘法指令（32bit × 32bit = lower 32bit），而 Cortex-M3／M4／M7／M33／M35P 有 32 位元相乘，結果為 32 位元的乘法指令（32bit × 32bit = 64bit）。Cortex-M4／M7（M33／M35P 可選）包括 DSP 乘法指令 (16bit × 16bit = 32bit）、（32bit × 16bit = upper 32bi）、（32bit × 32bit = upper 32bit）ref name="ARMv6-M-Manual"/>
* 註：要計算完乘法及除法的週期數依 ARM Cortex-M 的核心設計而不同。有些核心有較快速度或是較小尺寸的矽智財選項，因此核心可能用較少的矽面積，但需要的週期數較長。在執行除法指令或慢速迭代乘法指令時發生的中斷會讓處理器放棄其指令，在中斷結束後再繼續。
  * Cortex-M0/M0+/M23 中，結果為 32 位元的乘法可以選擇是 1 個週期或是 32 個週期。Cortex-M1 可以選擇是 3 個週期或是 33 個週期。Cortex-M3/M4/M7/M33/M35P 都是一個週期。.
  * Cortex-M3 中，結果為 32 位元的乘法指令，可能是 3–5 個週期（視數值而定）。Cortex-M4/M7/M33/M35P 是一個週期。
  * Cortex-M3/M4 的除法指令是 2–12 個週期（視數值而定）。Cortex-M7 是 3–20 個週期（視數值而定）。Cortex-M23 有 17 個週期或 34 個週期的選項。Cortex-M33 是 2–11 個週期（視數值而定）。Cortex-M35P 的資料還不確定。
* 註：Cortex-M4 / M7 / M33 / M35P 有不含 FPU 的矽智財選項，或是單精度（SP）的 FPU，Cortex-M7 加上第三個矽智財選項，可以支援單精度以及雙精度（DP）的 FPU。若 Cortex-M4 / M7 / M33 / M35P 有 FPU，其型號會是 Cortex-M4**F** / Cortex-M7**F** / Cortex-M33**F** / Cortex-M35P**F**.。
* 註：Cortex-M 系列包括三個新的 16 位元睡眠模式 Thumb-1 指令：SEV, WFE, WFI。
* 註：中斷延遲週期計數假設
  * 1. 堆疊放在零等待狀態 RAM
  * 2. 沒有在執行其他的中斷
  * 3. 沒有安全延伸機能選項（因為會增加週期）
* 註：哈佛架構的 Cortex-M，其中斷延遲週期計數會比較短。
* 註：針對 Cortex-M4 / M7 / M33 / M35P，單精度（SP）浮點運算器指令只有在矽智財中有 SP FPU 選項時才有效。
* 註：針對 Cortex-M7，雙精度（DP）浮點運算器指令只有在矽智財中有 DP FPU 選項時才有效。

### 停用機能

ARM Cortex-M 系列的 ARM 架構，已停用一些早期核心的穖能：

* Cortex-M 核心中沒有 32 位元的 ARM 指令集。
* 位元組序在矽智財實現時就需要決定。早期的核心允許依 MCU 資料位元組序模式設定而調整。
* Cortex-M 核心不支援輔助處理器，一直到 ARM Cortex-M33/M35P 核心的 ARMv8-M Mainline 才重新支援此一選項。

32 位元 ARM 指令的能力和 Thumb-1 和 Thumb-2 指令集有很多地方重疊了，不過有些 ARM 的特徵找不到類似的特性。

* SWP 和 SWPB（swap）ARM 架構在 Cortex-M 中沒有類似的架構。

16 位元 Thumb-1 指令集最早是出現在早期 ARMv4T 架構的 ARM7T 核心，隨著時代而演進。在 ARMv5 / ARMv6 / ARMv6T2　架構問世時，Thumb-1 指令集也有擴充。不過也有移除一些 Thumb-1 指令。

* 不存在 BLX <immediate> 指令，此指令是用來從 Thumb-1 切換到 ARM 的指令集。BLX <register> 指令在 Cortex-M 系列仍然支援。
* 不存在 SETEND 指令，因為不允許在執行時切換位元組序。
* 不支援輔助處理器指令，一直到 ARM Cortex-M33/M35P 核心的 ARMv8-M Mainline 才重新支援此些指令。
* SWI 指令更名為 SVC，雖二進位碼相同。不過 SVC 的處理程式和 SWI 的處理程式在例外模式的處理上差很多。

## Cortex-M0

Cortex-M0 核心是依小矽晶元面積以及最低價晶片進行最佳化的核心。

Cortex-M0 核心的主要特點有：

* ARMv6-M 架構
* 三層管線
* 指令集：
  * Thumb-1（大部份），但沒有 CBZ, CBNZ, IT
  * Thumb-2（少部份），只有 BL, DMB, DSB, ISB, MRS, MSR
  * 32-bit 硬體整數乘法，結果也是 32-bit
* 1 到 32 個中斷，以及不可遮罩中斷

**矽智財選項**：

* 硬體整數乘法速度：1 週期或 32 週期。

## Cortex-M0+

Cortex-M0 + 是以 Cortex-M0 再進行優化的版本。Cortex-M0 + 支援所有 Cortex-M0 的指令，因此可以用相同的編譯器以及除錯工具。Cortex-M0 + 的管線由三層變成二層，因此耗能較少。除了 Cortex-M0 已有的除錯功能外，Cortex-M0 + 增加了稱為微追蹤緩衝區（Micro Trace Buffer、MTB）的選項，有簡易的指令追蹤緩衝區。Cortex-M0 + 也有加入 Cortex-M3 和 Cortex-M4 的一些特點，是以矽智財選項的方式加入，例如記憶體保護單元（MPU），以及中斷向量表重新定位。

Cortex-M0 + 核心的主要特點有：

* ARMv6-M 架構
* 二層管線（比 Cortex-M0 少一層）
* 指令集（和 Cortex-M0）相同
  * Thumb-1（大部份），但沒有 CBZ, CBNZ, IT
  * Thumb-2（少部份），只有 BL, DMB, DSB, ISB, MRS, MSR
  * 32-bit 硬體整數乘法，結果也是 32-bit
* 1 到 32 個中斷，以及不可遮罩中斷

**矽智財選項**：

* 硬體整數乘法速度：1 週期或 32 週期。
* 八個區塊的記憶體保護單元（MPU）（和 M3、M4 相同）
* 中斷向量表重新定位（和 M3、M4 相同）
* 單一週期的 I/O 埠（在 M0+/M23 上有此機能）
* 微追蹤緩衝區（Micro Trace Buffer、MTB）（在 M0+/M23/M33/M35P 上有此機能）

## Cortex-M1

The Cortex-M1 是特別設計可以放入 FPGA 晶片的核心。

Cortex-M1 核心的主要特點有：

* ARMv6-M 架構
* 二層管線
* 指令集
  * Thumb-1（大部份），但沒有 CBZ, CBNZ, IT.
  * Thumb-2（少部份），只有 BL, DMB, DSB, ISB, MRS, MSR.
  * 32-bit 硬體整數乘法，結果也是 32-bit
* 1 到 32 個中斷，以及不可遮罩中斷

**矽智財選項**：

* 硬體整數乘法速度：3 或 33 週期。
* 選配的緊密耦合記憶體（TCM）0 to 1 MB 指令 TCM，0 to 1 MB 資料 TCM，都可以選擇要不要 ECC.
* 外部中斷：0, 1, 8, 16, 32.
* 除錯模式：無，簡易功能，完整
* 位元組序：little-endian 或 BE-8 big-endian.
* 作業系統延伸：可以選擇

## Cortex-M3

Cortex-M3 核心的主要特點有

* ARMv7-M 架構：
* 三層管線以及分支預測
* 指令集：
  * Thumb-1（完整）
  * Thumb-2（完整）
  * 32-bit 硬體整數乘法，結果可以是 32-bit 或 64-bit，有號或無號，在乘法後允許加法或減法。32-bit 乘法是一個週期，64-bit 乘法和乘積累加（MAC）需要的週期較多
  * 32-bit 硬體整數除法（2–12 週期）
  * 支援飽和運算
* 12 個週期的中斷延遲
* 整合休眠模式

**矽智財選項**：

* 可選的記憶體保護單元（MPU）：0 個區或 8 個區

## Cortex-M4

在概念上，Cortex-M4 是 Cortex-M3 加上數位訊號處理（DSP）指令、可選的浮點運算器。若有浮點運算器，會稱為 Cortex-M4F。

Cortex-M4 核心的主要特點有：

* ARMv7E-M 架構
* 三層管線以及分支預測
* 指令集：
  * Thumb-1（完整）
  * Thumb-2（完整）
  * 32-bit 硬體整數乘法，結果可以是 32-bit 或 64-bit，有號或無號，在乘法後允許加法或減法。32-bit 乘法及乘積累加（MAC）是一個週期
  * 32-bit 硬體整數除法（2–12 週期）
  * 支援飽和運算
  * DSP 延伸：單一週期 16/32-bit MAC，單一週期雙 16-bit MAC，8/16-bit SIMD 運算
* 12 個週期的中斷延遲
* 整合休眠模式

**矽智財選項**：

* 可選的浮點運算器（FPU）：只有單精度 IEEE-754 的，稱為 FPv4-SP 延伸
* 可選的記憶體保護單元（MPU）：0 個區或 8 個區

## Cortex-M7

Cortex-M7 是高效能的核心，其運算效能是 Cortex-M4 的二倍。其中包括六層的超純量管線有分支預測，有可選的單精度浮點運算器或雙精度浮點運算器。指令集以及資料匯流排已由 32-bit 寬度增加到 64-bit 寬度。若核心中有 FPU，會稱為 Cortex-M7F，不然會稱為 Cortex-M7。

Cortex-M7 核心的主要特點有：

* ARMv7E-M 架構
* 6 階管線以及分支預測。在 ARM Cortex-M 核心中是最多的。
* 指令集：
  * Thumb-1（完整）
  * Thumb-2（完整）
  * 32-bit 硬體整數乘法，結果可以是 32-bit 或 64-bit，有號或無號，在乘法後允許加法或減法。32-bit 乘法及乘積累加（MAC）是一個週期
  * 32-bit 硬體整數除法（2–12 週期）
  * 支援飽和運算
  * DSP 延伸：單一週期 16/32-bit MAC，單一週期雙 16-bit MAC，8/16-bit SIMD 運算
* 1 至 240 個中斷，以及不可遮罩中斷
* 12 個週期的中斷延遲
* 整合休眠模式

**矽智財選項**：

* 可選的浮點運算器（FPU）：單精度或雙精度，都和 IEEE-754-2008 相容，稱為 FPv5 延伸
* 可選的 CPU 快取：0 至 64 KB 的指令快取，0 至 64 KB 的資料快取，都有可選的糾錯記憶體
* 可選的緊密耦合記憶體（TCM）：0 至 16 MB 指令 TCM，0 至 16 MB 資料 TCM，都可以選擇要不要 ECC.
* 可選的記憶體保護單元（MPU）：8 區或 16 區。
* 可選的嵌入式追蹤巨集電路元（ETM）：可以只針對指令，或針對指令及資料。
* 可選的休眠模式保留模式（配合 Arm 功率管理元件）。

## Cortex-M23

Cortex-M23 核心在 2016 年 10 月上市，以 2015 年 11 月發佈的 ARMv8-M 架構為基礎。在概念上 Cortex-M23 類似 Cortex-M0+，加上整數除法指令、TrustZone 安全特性、也是二層管線。

Cortex-M23 核心的主要特點有：

* ARMv8-M 基線架構
* 二層管線（類似 Cortex-M0+）
* TrustZone 安全指令（只有在 M23/M33/M35P）
* 32-bit 硬體整數除法（17 或 34 週期）（M0/M0+/M1 沒有）
* 堆疊邊界限制（只有在 SAU 選項開啟時才有）（M23/M33/M35P 才有）

**矽智財選項**：

* 硬體整數乘法速度：1 週期或 32 週期。
* 硬體整數除法速度：最長 17 週期或 34 週期，依除數而定，指令有可能會提早完成。
* 可選的記憶體保護單元（MPU）：0, 4, 8, 12, 16 個區塊
* 可選的安全屬性單元（SAU）：0, 4, 8 個區塊
* 單一週期的 I/O 埠（在 M0+/M23 上有此機能）
* 微追蹤緩衝區（Micro Trace Buffer、MTB）（在 M0+/M23/M33/M35P 上有此機能）

## Cortex-M33

Cortex-M33 核心是在 2016 年 10 月發佈，是以 2015 年 11 月發佈的 ARMv8-M 架構為基礎。概念上類似 Cortex-M4 和 Cortex-M23 的交集，也有三階的指令管道。

Cortex-M33 核心的主要特點有

* ARMv8-M 架構：
* 三階管道
* TrustZone 安全指令（只有在 M23/M33/M35P 才有）
* 32-bit 硬體整數除法（最長 11 個週期）（M0/M0+/M1 無此選項）
* 堆疊邊界限制（只有在 SAU 選項開啟時才有）（M23/M33/M35P 才有）

**矽智財選項**：

* 可選的浮點運算器（FPU）：只有單精度 IEEE-754 的，稱為 FPv5 延伸
* 可選的記憶體保護單元（MPU）：0, 4, 8, 12, 16 個區塊
* 可選的安全屬性單元（SAU）：0, 4, 8 個區塊
* 微追蹤緩衝區（Micro Trace Buffer、MTB）（在 M0+/M23/M33/M35P 上有此機能）

## Cortex-M35P

Cortex-M35P 核心是在 2018 年 5 月發佈的，在概念上是 Cortex-M33 核心加上新的指令集，以及來自 ARM SecurCore 系列，新的防篡改硬體、可選的同位元以及 ECC 功能。

目前此晶片的公開資料不多，只有技術參考手冊。到 2020 年 2 月為止，尚未看到各廠商推出此系列的微處理器。

## Cortex-M55

Cortex-M55 是在 2020 年 2 月發佈，是以 2019 年 2 月發佈的 Armv8.1-M 架構為基礎，有四階指令管道。

Cortex-M55 核心的主要特點有：

* ARMv8.1-M Mainline/Helium 核心
* 四階管道
* 堆疊邊界限制（只有在 SAU 選項開啟時才有）

**矽智財選項**：

* Helium (M-Profile Vector Extension, MVE)
* 單精度和雙精度的浮點運算器
* 可選的 DSP 延伸
* 可選的 TrustZone 安全延伸
* 支援 RAS（Safety and reliability）功能
* 支援協處理器
* 區分安全區和非安全區的 MPU，可以分為 0, 4, 8, 12 或 16 個區
* 安全屬性單元可以分為 0, 4 或 8 個區
* 指令快取，大小可以設定為 4KB, 8KB, 16KB, 32KB, 64KB
* 資料快取，大小可以設定為 4KB, 8KB, 16KB, 32KB, 64KB
* 快取及 TCM 支援 ECC
* 1–480 個中斷
* 3–8 個例外優先位元
* 內部和外部的喚醒中斷控制器（WIC）選項，可選的 CTI, ITM 及 DWT
* ARM 客製指令（未來發佈的版本中會支援）

## 檔案

ARM 晶片的檔案很多。 過去八位元的微處理器只有一份檔案，不過隨著微處理器的進步，許多功能都需要支援。ARM 晶片的檔案包一般會包括 IC 製造商以及 CPU 核心供應商（Arm）的檔案。

典型的檔案結構如下：

**檔案樹（從上到下）**

1. IC 製造商網頁
2. IC 製造商宣傳投影片
3. IC 製造商實際晶片的數據表
4. IC 製造商該晶片家族的參考手冊，其中有常用週邊以及特點
5. ARM 核心網站
6. ARM 核心通用使用手冊
7. ARM 核心技術參考手冊
8. ARM 架構參考手冊

IC 製造商可能會有其他資料，例如開發板使用手冊、應用指南、快速手冊、軟體函式庫檔案、已知問題等。

## 參考資料

## 延伸閱讀

* _Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C_; 3rd Ed; Yifeng Zhu; 738 pages; 2017; ISBN 978-0982692660.
* _Designer's Guide to the Cortex-M Processor Family_; 2nd Ed; Trevor Martin; 490 pages; 2016; ISBN 978-0081006290.
* _ARM Assembly for Embedded Applications_; 3rd Ed; Daniel Lewis; 318 pages; 2017; ISBN 978-1543908046.
* _Definitive Guide to the ARM Cortex-M0 and Cortex-M0+ Processors_; 2nd Ed; Joseph Yiu; 784 pages; 2015; ISBN 978-0128032770.
* _Definitive Guide to the ARM Cortex-M3 and Cortex-M4 Processors_; 3rd Ed; Joseph Yiu; 600 pages; 2013; ISBN 978-0124080829.
* _Digital Signal Processing and Applications Using the ARM Cortex-M4_; 1st Ed; Donald Reay; 250 pages; 2014; ISBN 978-1118859049.
* _Embedded Systems: Introduction to ARM Cortex-M Microcontrollers_; 5th Ed; Jonathan Valvano; 506 pages; 2012; ISBN 978-1477508992.
* _Assembly Language Programming: ARM Cortex-M3_; 1st Ed; Vincent Mahout; 256 pages; 2012; ISBN 978-1848213296.

## 外部連結