ARM Cortex-M3與Cortex-M4權威指南(第3版)

ARM Cortex-M3與Cortex-M4權威指南(第3版)

本書介紹了ARM Cortex-M3與Cortex-M相關知識的權威指南,目前基本上所有的CortexM設備驅動庫都用上了CMSISCore,而且CMSIS項目也擴展為DSP庫軟體等多個方面。

目錄

第1章ARMCortexM處理器簡介

1.1什麼是ARMCortexM處理器

1.1.1CortexM3和CortexM4處理器

1.1.2CortexM處理器家族

1.1.3處理器和微控制器的區別

1.1.4ARM和微控制器供應商

1.1.5選擇CortexM3和CortexM4微控制器

1.2CortexM處理器的優勢

1.2.1低功耗

1.2.2性能

1.2.3能耗效率

1.2.4代碼密度

1.2.5中斷

1.2.6易於使用

1.2.7可擴展性

1.2.8調試特性

1.2.9OS支持

1.2.10多種系統特性

1.2.11軟體可移植性和可重用性

1.2.12選擇(設備、工具和OS等)

1.3ARMCortexM處理器套用

1.4ARM處理器和ARM微控制器的資源

1.4.1ARM網站上有什麼

1.4.2微控制器供應商提供的文檔

1.4.3工具供應商提供的文檔

1.4.4其他資源

1.5背景和歷史

1.5.1ARM簡史

1.5.2ARM處理器的發展

1.5.3ThumbISA的架構版本

1.5.4處理器命名

1.5.5關於ARM生態系統

第2章嵌入式軟體開發簡介

2.1ARM微控制器是怎樣構成的

2.2開始時需要準備什麼

2.2.1開發組件

2.2.2開發板

2.2.3調試適配器

2.2.4軟體設備驅動

2.2.5例子

2.2.6文檔和其他資源

2.2.7其他設備

2.3軟體開發流程

2.4編譯應用程式

2.5軟體流程

2.5.1輪詢

2.5.2中斷驅動

2.5.3多任務系統

2.6C程式中的數據類型

2.7輸入、輸出和外設訪問

2.8微控制器接口

2.9Cortex微控制器軟體接口標準(CMSIS)

2.9.1CMSIS簡介

2.9.2CMSISCore所做的標準化

2.9.3CMSISCore的組織結構

2.9.4如何使用CMSISCore

2.9.5CMSIS的優勢

2.9.6CMSIS的多個版本

第3章技術綜述

3.1CortexM3和CortexM4處理器的一般信息

3.1.1處理器類型

3.1.2處理器架構

3.1.3指令集

3.1.4模組框圖

3.1.5存儲器系統

3.1.6中斷和異常支持

3.2CortexM3和CortexM4處理器的特性

3.2.1性能

3.2.2代碼密度

3.2.3低功耗

3.2.4存儲器系統

3.2.5存儲器保護單元

3.2.6中斷處理

3.2.7OS支持和系統級特性

3.2.8CortexM4的特殊特性

3.2.9易於使用

3.2.10調試支持

3.2.11可擴展性

3.2.12兼容性

第4章架構

4.1架構簡介

4.2編程模型

4.2.1操作模式和狀態

4.2.2暫存器

4.2.3特殊暫存器

4.2.4浮點暫存器

4.3應用程式狀態暫存器

4.3.1整數狀態標誌

4.3.2Q狀態標誌

4.3.3GE位

4.4存儲器系統

4.4.1存儲器系統特性

4.4.2存儲器映射

4.4.3棧存儲

4.4.4存儲器保護單元(MPU)

4.5異常和中斷

4.5.1什麼是異常

4.5.2嵌套向量中斷控制器(NVIC)

4.5.3向量表

4.5.4錯誤處理

4.6系統控制塊(SCB)

4.7調試

4.8復位和復位流程

第5章指令集

5.1ARMCortexM處理器指令集的背景簡介

5.2ARMCortexM處理器間的指令集比較

5.3理解彙編語言語法

5.4指令後綴的使用

5.5統一彙編語言(UAL)

5.6指令集

5.6.1處理器內傳送數據

5.6.2存儲器訪問指令

5.6.3算術運算

5.6.4邏輯運算

5.6.5移位和循環移位指令

5.6.6數據轉換運算(展開和反序)

5.6.7位域處理指令

5.6.8比較和測試

5.6.9程式流控制

5.6.10飽和運算

5.6.11異常相關指令

5.6.12休眠模式相關指令

5.6.13存儲器屏障指令

5.6.14其他指令

5.6.15不支持的指令

5.7CortexM4特有的指令

5.7.1CortexM4的增強DSP擴展簡介

5.7.2SIMD和飽和指令

5.7.3乘法和MAC指令

5.7.4打包和解包

5.7.5浮點指令

5.8桶形移位器

5.9在編程中訪問特殊暫存器和特殊指令

5.9.1簡介

5.9.2內在函式

5.9.3內聯彙編和嵌入彙編

5.9.4使用其他的編譯器相關的特性

5.9.5訪問特殊暫存器

第6章存儲器系統

6.1存儲器系統特性簡介

6.2存儲器映射

6.3連線處理器到存儲器和外設

6.4存儲器需求

6.5存儲器的端

6.6數據對齊和非對齊數據訪問支持

6.7位段操作

6.7.1簡介

6.7.2位段操作的優勢

6.7.3不同數據大小的位段操作

6.7.4C程式實現的位段操作

6.8默認的存儲器訪問許可權

6.9存儲器訪問屬性

6.10排他訪問

6.11存儲器屏障

6.12微控制器中的存儲器系統

第7章異常和中斷

7.1異常和中斷簡介

7.2異常類型

7.3中斷管理簡介

7.4優先權定義

7.5向量表和向量表重定位

7.6中斷輸入和掛起行為

7.7異常流程簡介

7.7.1接受異常請求

7.7.2異常進入流程

7.7.3執行異常處理

7.7.4異常返回

7.8中斷控制用的NVIC暫存器細節

7.8.1簡介

7.8.2中斷使能暫存器

7.8.3設定中斷掛起和清除中斷掛起

7.8.4活躍狀態

7.8.5優先權

7.8.6軟體觸發中斷暫存器

7.8.7中斷控制器類型暫存器

7.9用於異常和中斷控制的SCB暫存器細節

7.9.1SCB暫存器簡介

7.9.2中斷控制和狀態暫存器(ICSR)

7.9.3向量表偏移暫存器(VTOR)

7.9.4套用中斷和復位控制暫存器(AIRCR)

7.9.5系統處理優先權暫存器(SCB>SHP[0~11])

7.9.6系統處理控制和狀態暫存器(SCB>SHCSR)

7.10用於異常或中斷禁止的特殊暫存器細節

7.10.1PRIMASK

7.10.2FAULTMASK

7.10.3BASEPRI

7.11設定中斷的步驟示例

7.11.1簡單情況

7.11.2向量表重定位時的情況

7.12軟體中斷

7.13要點和提示

第8章深入了解異常處理

8.1簡介

8.1.1關於本章

8.1.2C實現的異常處理

8.1.3棧幀

8.1.4EXC_RETURN

8.2異常流程

8.2.1異常進入和壓棧

8.2.2異常返回和出棧

8.3中斷等待和異常處理最佳化

8.3.1什麼是中斷等待

8.3.2多周期指令執行時的中斷

8.3.3末尾連鎖

8.3.4延遲到達

8.3.5出棧搶占

8.3.6惰性壓棧

第9章低功耗和系統控制特性

9.1低功耗設計

9.1.1低功耗對微控制器有什麼意義

9.1.2低功耗系統需求

9.1.3CortexM3和CortexM4處理器的低功耗特點

9.2低功耗特性

9.2.1休眠模式

9.2.2系統控制暫存器(SCR)

9.2.3進入休眠模式

9.2.4喚醒條件

9.2.5退出時休眠特性

9.2.6掛起傳送事件(SEVONPEND)

9.2.7休眠擴展/喚醒延遲

9.2.8喚醒中斷控制器(WIC)

9.2.9事件通信接口

9.3在編程中使用WFI和WFE

9.3.1何時使用WFI

9.3.2使用WFE

9.4開發低功耗套用

9.4.1降低動態功耗

9.4.2降低活躍周期

9.4.3減小休眠模式電流

9.5SysTick定時器

9.5.1為什麼要有SysTick定時器

9.5.2SysTick定時器操作

9.5.3使用SysTick定時器

9.5.4其他考慮

9.6自復位

9.7CPUID基本暫存器

9.8配置控制暫存器

9.8.1CCR簡介

9.8.2STKALIGN位

9.8.3BFHFNMIGN位

9.8.4DIV_O_TRP位

9.8.5UNALIGN_TRP位

9.8.6USERSETMPEND位

9.8.7NONBASETHRDENA位

9.9輔助控制暫存器

9.10協處理器訪問控制暫存器

第10章OS支持特性

10.1OS支持特性簡介

10.2影子棧指針

10.3SVC異常

10.4PendSV異常

10.5實際的上下文切換

10.6排他訪問和嵌入式OS

第11章存儲器保護單元

11.1MPU簡介

11.1.1關於MPU

11.1.2使用MPU

11.2MPU暫存器

11.2.1MPU類型暫存器

11.2.2MPU控制暫存器

11.2.3MPU區域編號暫存

11.2.4MPU基地址暫存器

11.2.5MPU區域基本屬性和大小暫存器

11.2.6MPU別名暫存器

11.3設定MPU

11.4存儲器屏障和MPU配置

11.5使用子區域禁止

11.5.1允許高效的存儲器劃分

11.5.2減少所需的區域總數

11.6使用MPU時的注意事項

11.6.1程式代碼

11.6.2數據存儲器

11.6.3外設

11.7MPU的其他用法

11.8與CortexM0+處理器中的MPU間的差異

第12章錯誤異常和錯誤處理

12.1錯誤異常簡介

12.2錯誤的原因

12.2.1存儲器管理(MemManage)錯誤

12.2.2匯流排錯誤

12.2.3使用錯誤

12.2.4HardFault

12.3使能錯誤處理

12.3.1MemManage錯誤

12.3.2匯流排錯誤

12.3.3使用錯誤

12.3.4HardFault

12.4錯誤狀態暫存器和錯誤地址暫存器

12.4.1簡介

12.4.2MemManage錯誤信息

12.4.3匯流排錯誤信息

12.4.4使用錯誤信息

12.4.5HardFault狀態暫存器

12.4.6調試錯誤狀態暫存器(DFSR)

12.4.7錯誤地址暫存器MMFAR和BFAR

12.4.8輔助錯誤狀態暫存器

12.5分析錯誤

12.6異常處理相關的錯誤

12.6.1壓棧

12.6.2出棧

12.6.3惰性壓棧

12.6.4取向量

12.6.5非法返回

12.6.6優先權和壓棧或出棧錯誤

12.7鎖定

12.7.1什麼是鎖定

12.7.2避免鎖定

12.8錯誤處理

12.8.1用於調試的HardFault

12.8.2錯誤禁止

12.9其他信息

12.9.1運行具有兩個棧的系統

12.9.2檢測棧溢出

第13章浮點運算

13.1關於浮點數

13.1.1簡介

13.1.2單精度浮點數

13.1.3半精度浮點數

13.1.4雙精度浮點數

13.1.5CortexM處理器中的浮點支持

13.2CortexM4浮點單元(FPU)

13.2.1浮點單元簡介

13.2.2浮點暫存器簡介

13.2.3CPACR暫存器

13.2.4浮點暫存器組

13.2.5浮點狀態和控制暫存器(FPSCR)

13.2.6浮點上下文控制暫存器(FPU>FPCCR)

13.2.7浮點上下文地址暫存器(FPU>FPCAR)

13.2.8浮點默認狀態控制暫存器(FPU>FPDSCR)

13.2.9介質和浮點特性暫存器(FPU>MVFR0、FPU>MVFR1)

13.3惰性壓棧詳解

13.3.1惰性壓棧特性的關鍵點

13.3.2第1種情況:被打斷的任務中沒有浮點上下文

13.3.3第2種情況:被打斷的任務中有浮點上下文,ISR中沒有

13.3.4第3種情況:被打斷的任務和ISR中都有浮點上下文

13.3.5第4種情況:中斷嵌套,且第2箇中斷處理中存在浮點上

下文

13.3.6第5種情況:中斷嵌套,且兩個中斷處理中都存在浮點上

下文

13.3.7惰性壓棧的中斷

13.3.8浮點指令的中斷

13.4使用浮點單元

13.4.1CMSISCore中的浮點支持

13.4.2用C語言實現浮點編程

13.4.3編譯器命令行選項

13.4.4ABI選項:Hardvfp和Softvfp

13.4.5特殊的FPU模式

13.5浮點異常

13.6要點和提示

13.6.1微控制器的運行時庫

13.6.2調試操作

第14章調試和跟蹤特性

14.1調試和跟蹤特性簡介

14.1.1什麼是調試特性

14.1.2什麼是跟蹤特性

14.1.3調試和跟蹤特性總結

14.2調試架構

14.2.1CoreSight調試架構

14.2.2處理器調試接口

14.2.3調試連線埠(DP)、訪問連線埠(AP)和調試訪問連線埠(DAP)

14.2.4跟蹤接口

14.2.5CoreSight的特點

14.3調試模式

14.4調試事件

14.5斷點特性

14.6調試部件簡介

14.6.1處理器調試支持

14.6.2Flash補丁和斷點(FPB)單元

14.6.3數據監視點和跟蹤(DWT)單元

14.6.4指令跟蹤宏單元

14.6.5嵌入式跟蹤宏單元(ETM)

14.6.6跟蹤連線埠接口單元(TPIU)

14.6.7ROM表

14.6.8AHB訪問連線埠(AHBAP)

14.7調試操作

14.7.1調試連線

14.7.2Flash編程

14.7.3斷點

第15章KeilARM微控制器開發套件入門

15.1簡介

15.2典型的程式編譯流程

15.3μVision入門

15.4工程選項

15.4.1Device選項

15.4.2Target選項

15.4.3Output選項

15.4.4Listing選項

15.4.5User選項

15.4.6C/C++選項

15.4.7Asm選項

15.4.8Linker選項

15.4.9Debug選項

15.4.10Utilities選項

15.5使用IDE和調試器

15.6使用指令集模擬器

15.7在SRAM中運行程式

15.8最佳化選項

15.9其他信息和要點

15.9.1棧和堆存儲大小配置

15.9.2其他信息

第16章IAREmbeddedWorkbenchforARM入門

16.1IAREmbeddedWorkbenchforARM簡介

16.2典型的程式編譯流程

16.3創建簡單的blinky工程

16.4工程選項

16.5提示和要點

第17章GCC入門

17.1GCC工具鏈

17.2典型開發流程

17.3創建簡單的blinky工程

17.4命令行選項簡介

17.5Flash編程

17.5.1使用KeilMDKARM

17.5.2使用第三方Flash編程工具

17.6KeilMDKARM和ARM嵌入式處理器GNU工具一起使用

17.7CoIDE和ARM嵌入式處理器GNU工具一起使用

17.8基於gcc的商業版開發組件

17.8.AtollicTrueSTUDIOforARM

17.8.2RedSuite

17.8.3CrossWorksforARM

第18章輸入和輸出軟體實例

18.1產生輸出

18.2重定向到指令跟蹤宏單元(ITM)

18.2.1簡介

18.2.2KeilMDKARM

18.2.3IAREmbeddedWorkbench

18.2.4GCC

18.3半主機

18.4重定向到外設

第19章使用嵌入式作業系統

19.1嵌入式OS簡介

19.1.1什麼是嵌入式OS

19.1.2何時使用嵌入式OS

19.1.3CMSISRTOS的作用

19.2KeilRTXRealTimeKernel

19.2.1關於RTX

19.2.2特性簡介

19.2.3RTX和CMSISRTOS

19.2.4執行緒

19.3CMSISRTOS實例

19.3.1具有兩個執行緒的簡單CMSISRTOS

19.3.2執行緒間通信簡介

19.3.3信號事件通信

19.3.4互斥體(MUTEX)

19.3.5信號量

19.3.6訊息佇列

19.3.7郵件佇列

19.3.8記憶體池管理特性

19.3.9通用等待函式和逾時數值

19.3.10定時器特性

19.3.11訪問非特權設備

19.4OS感知調試

19.5疑難解答

19.5.1棧大小和棧對齊

19.5.2特權等級

19.5.3其他問題

第20章彙編和混合語言工程

20.1彙編代碼在工程中的使用

20.2C和彙編間的互動

20.3彙編函式的結構

20.4例子

20.4.1ARM工具鏈的簡單例子(KeilMDKARM、DS5)

20.4.2ARM嵌入式處理器GNU工具的簡單例子

20.4.3訪問特殊暫存器

20.4.4數據存儲器

20.4.5Helloworld

20.4.6顯示十六進制和十進制的數據

20.4.7NVIC中斷控制

20.4.8無符號整數平方根

20.5混合語言工程

20.5.1從彙編中調用C函式

20.5.2從C中調用彙編函式

20.5.3嵌入彙編(KeilMDKARM/ARMDS5professional)

20.5.4內聯彙編

20.6內在函式

20.7習語識別

第21章ARMCortexM4和DSP套用

21.1微控制器上的DSP

21.2點積實例

21.3傳統DSP處理器的架構

21.4CortexM4的DSP指令

21.4.1暫存器和數據類型

21.4.2小數運算

21.4.3SIMD數據

21.4.4載入和存儲指令

21.4.5算術指令

21.4.6CortexM4的一般最佳化策略

21.4.7指令限制

21.5為CortexM4編寫最佳化的DSP代碼

21.5.1Biquad濾波器

21.5.2快速傅立葉變換

21.5.3FIR濾波器

第22章使用ARMCMSISDSP庫

22.1DSP庫簡介

22.2預構建的二進制代碼

22.3函式命令規則

22.4獲得幫助

22.5例1:DTMF解調

22.5.1產生正弦波

22.5.2使用FIR濾波器進行解析

22.5.3使用FFT進行解析

22.5.4使用Biquad濾波器進行解析

22.5.5DTMF示例代碼

22.6例2:最小二乘法運動跟蹤

第23章高級話題

23.1決斷和跳轉

23.1.1條件跳轉

23.1.2複雜的判決樹

23.2性能考慮

23.3雙字棧對齊

23.4信號量設計的各種方法

23.4.1用SVC服務實現信號量

23.4.2使用位段實現信號量

23.5非基本執行緒使能

23.6中斷服務的重入

23.7C語言實現的位數據處理

23.8啟動代碼

23.9棧溢出檢測

23.9.1工具鏈的棧分析

23.9.2棧的測試分析

23.9.3根據棧布局檢測棧溢出

23.9.4使用MPU

23.9.5使用DWT和調試監控異常

23.9.6OS上下文切換中的棧檢查

23.10Flash補丁特性

23.11CortexM3和CortexM4處理器的版本

23.11.1簡介

23.11.2CortexM3r0p0到r1p0/r1p1的變動

23.11.3CortexM3r1p1到r2p0的變動

23.11.4CortexM3r2p0到r2p1的變動

23.11.5CortexM4r0p0到r0p1的變動

第24章軟體移植

24.1簡介

24.2從8位/16位MCU移植到CortexMMCU

24.2.1架構差異

24.2.2一般調整

24.2.3存儲器大小需求

24.2.48位或16位微控制器不再適用的最佳化

24.2.5例子:從8051移植到ARMCortexM

24.3從ARM7TDMI到CortexM3/M4的軟體移植

24.3.1硬體差異簡介

24.3.2彙編語言檔案

24.3.3C語言檔案

24.3.4預編譯的目標檔案和庫

24.3.5最佳化

24.4不同CortexM處理器間的軟體移植

24.4.1不同CortexM處理器間的差異

24.4.2所需的軟體變動

24.4.3嵌入式OS

24.4.4創建CortexM處理器的可移植程式代碼

相關詞條

熱門詞條

聯絡我們