ARM Cortex-M3權威指南(第2版)

ARM Cortex-M3權威指南(第2版)

《ARM Cortex-M3權威指南(第2版)》是2014年清華大學出版社出版的圖書,作者是Joseph Yiu、吳常玉、程凱。

圖書簡介

從2008年開始,基於CortexM3的單片機以其高性能、低成本及易於使用等諸多優勢,已經取代ARM7,成長為32位微控制器的主流。而且由於其諸多特性,之前“ARM9+OS”(如“ARM9+Linux”等)的多種方案,目前也可以由“CortexM3+嵌入式OS”的方式取代。

支持Cortex M3的晶片廠家也在日益增多,包括ST、TI、Atmel等在內的晶片巨頭都有多款基於CortexM3的微控制器產品,而且具有Flash及記憶體大小、外設以及運行頻率等

圖書目錄

譯者序1

推薦序(一)3

推薦序(二)5

前言7

致謝9

本書約定11

術語和縮寫13

第1章介紹

1.1ARM CortexM3處理器是什麼

1.2ARM和ARM架構的背景

1.2.1歷史簡介

1.2.2架構版本

1.2.3處理器命名

1.3指令集開發

1.4Thumb2技術和指令集架構

1.5CortexM3處理器套用

1.6本書的組織結構

1.7深入閱讀

第2章CortexM3綜述

2.1基礎

2.2暫存器

2.2.1R0~R12: 通用目的暫存器

2.2.2R13: 棧指針

2.2.3R14: 連結暫存器

2.2.4R15: 程式計數器

2.2.5特殊暫存器

2.3操作模式

2.4內置的嵌套向量中斷控制器

2.4.1支持嵌套中斷

2.4.2支持向量中斷

2.4.3支持動態修改優先權

2.4.4中斷等待減小

2.4.5中斷禁止

2.5存儲器映射

2.6匯流排接口

2.7MPU

2.8指令集

2.9中斷和異常

2.10調試支持

2.11特點概括

2.11.1高性能

2.11.2中斷處理的高級特性

2.11.3低功耗

2.11.4系統特性

2.11.5調試支持

第3章CortexM3基礎

3.1暫存器

3.1.1通用目的暫存器R0~R7

3.1.2通用目的暫存器R8~R12

3.1.3棧指針R13

3.1.4連結暫存器R14

3.1.5程式計數器R15

3.2特殊暫存器

3.2.1程式狀態暫存器

3.2.2PRIMASK、FAULTMASK和BASEPRI暫存器

3.2.3控制暫存器

3.3操作模式

3.4異常和中斷

3.5向量表

3.6棧存儲操作

3.6.1棧的基本操作

3.6.2CortexM3棧的套用

3.6.3CortexM3的雙棧模型

3.7復位流程

第4章指令集

4.1彙編基礎

4.1.1彙編語言: 基本語法

4.1.2彙編語言: 後綴的使用

4.1.3彙編語言: 統一彙編語言

4.2指令列表

4.3指令描述

4.3.1彙編語言: 傳送數據

4.3.2LDR和ADR偽指令

4.3.3彙編語言: 處理數據

4.3.4彙編語言: 調用和無條件跳轉

4.3.5彙編語言: 決斷和條件跳轉

4.3.6彙編語言: 組合比較和條件跳轉

4.3.7彙編語言: 指令屏障和存儲器屏障指令

4.3.8彙編語言: 飽和運算

4.4CortexM3上一些有用的指令

4.4.1MSR和MRS

4.4.2進一步了解IFTHEN指令塊

4.4.3SDIV和UDIV

4.4.4REV、REVH和REVSH

4.4.5位反轉

4.4.6SXTB、SXTH、UXTB和UXTH

4.4.7位域清除和位域插入

4.4.8UBFX和SBFX

4.4.9LDRD和STRD

4.4.10表格跳轉位元組和表格跳轉半字

第5章存儲器系統

5.1存儲器系統特性概述

5.2存儲器映射

5.3存儲器訪問屬性

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

5.5位段操作

5.5.1位段操作的優勢

5.5.2不同數據寬度的位段操作

5.5.3C程式實現位段操作

5.6非對齊傳輸

5.7排他訪問

5.8端模式

第6章CortexM3設計綜述

6.1流水線

6.2詳細框圖

6.3CortexM3上的匯流排接口

6.3.1ICODE匯流排

6.3.2DCODE匯流排

6.3.3系統匯流排

6.3.4外部PPB

6.3.5DAP匯流排

6.4CortexM3上的其他接口

6.5外部PPB

6.6典型連線

6.7復位類型和復位信號

第7章異常

7.1異常類型

7.2優先權定義

7.3向量表

7.4中斷輸入和掛起行為

7.5錯誤異常

7.5.1匯流排錯誤

7.5.2存儲器管理錯誤

7.5.3使用錯誤

7.5.4硬體錯誤

7.5.5處理錯誤

7.6請求管理調用和可掛起的服務調用

第8章嵌套向量中斷控制器和中斷控制

8.1嵌套向量中斷控制器概述

8.2基本的中斷配置

8.2.1中斷使能和清除使能

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

8.2.3優先權

8.2.4活躍狀態

8.2.5PRIMASK和FAULTMASK特殊暫存器

8.2.6BASEPRI特殊暫存器

8.2.7其他異常的配置暫存器

8.3設定中斷的步驟實例

8.4軟體中斷

8.5SYSTICK定時器

第9章中斷行為

9.1中斷/異常流程

9.1.1壓棧

9.1.2取向量

9.1.3暫存器更新

9.2異常退出

9.3嵌套中斷

9.4末尾連鎖中斷

9.5延遲到達

9.6進一步了解異常返回值

9.7中斷等待

9.8中斷相關的錯誤

9.8.1壓棧

9.8.2出棧

9.8.3取向量

9.8.4非法返回

第10章CortexM3編程

10.1概述

10.2典型的開發流程

10.3使用C

10.3.1使用RealView開發組件的簡單C程式實例

10.3.2使用Keil MDKARM編譯相同的例程

10.3.3用C訪問存儲器映射的暫存器

10.3.4內在函式

10.3.5嵌入式彙編和內聯彙編

10.4CMSIS

10.4.1CMSIS背景

10.4.2標準化的問題

10.4.3CMSIS的組織結構

10.4.4使用CMSIS

10.4.5CMSIS的優勢

10.5使用彙編

10.5.1彙編和C的接口

10.5.2彙編編程的第一步

10.5.3生成輸出

10.5.4“Hello World”實例

10.5.5使用數據存儲器

10.6在信號量中使用排他訪問

10.7在信號量中使用位段

10.8使用位域提取和表格跳轉

第11章異常編程

11.1使用中斷

11.1.1設定棧

11.1.2設定向量表

11.1.3設定中斷優先權

11.1.4使能中斷

11.2異常/中斷處理

11.3軟體中斷

11.4向量表重定位實例

11.5使用SVC

11.6SVC實例:在文字訊息輸出函式中的套用

11.7用C實現SVC

第12章高級編程特性和系統行為

12.1運行具有兩個獨立棧的系統

12.2雙字棧對齊

12.3非基本執行緒使能

12.4性能考慮

12.5鎖定的情況

12.5.1鎖定期間發生了什麼

12.5.2避免鎖定

12.6FAULTMASK

第13章存儲器保護單元

13.1概述

13.2MPU暫存器

13.3設定MPU

13.4典型設定

第14章CortexM3的其他特性

14.1SYSTICK定時器

14.2電源管理

14.2.1休眠模式

14.2.2退出休眠特性

14.2.3喚醒中斷控制器

14.3多處理器通信

14.4自復位控制

第15章調試架構

15.1調試特性概述

15.2CoreSight概述

15.2.1處理器調試接口

15.2.2調試主機接口

15.2.3DP模組、AP模組和DAP

15.2.4跟蹤接口

15.2.5CoreSight特點

15.3調試模式

15.4調試事件

15.5CortexM3中的斷點

15.6調試時訪問暫存器內容

15.7其他的核心調試特性

第16章調試部件

16.1概述

16.2跟蹤部件:DWT

16.3跟蹤部件:ITM

16.3.1使用ITM的軟體跟蹤

16.3.2使用ITM和DWT的硬體跟蹤

16.3.3ITM時間戳

16.4跟蹤部件:ETM

16.5跟蹤部件:TPIU

16.6Flash補丁和斷點單元

16.6.1斷點特性

16.6.2Flash補丁特性

16.6.3比較器

16.7高級高性能匯流排訪問連線埠

16.8ROM表

第17章CortexM3處理器入門

17.1選擇一款CortexM3產品

17.2開發工具

17.2.1C編譯器和調試器

17.2.2嵌入式OS支持

17.3CortexM3版本0和版本1之間的區別

17.4CortexM3版本1和版本2之間的區別

17.4.1雙字棧對齊的默認配置

17.4.2輔助控制暫存器

17.4.3ID暫存器數值更新

17.4.4調試特性

17.4.5休眠特性

17.5版本2新特性的優勢和效果

17.6CortexM3和CortexM0之間的區別

17.6.1編程模型

17.6.2異常和NVIC

17.6.3指令集

17.6.4存儲器系統特性

17.6.5調試特性

17.6.6兼容性

第18章ARM7到CortexM3的應用程式移植

18.1概述

18.2系統特性

18.2.1存儲器映射

18.2.2中斷

18.2.3MPU

18.2.4系統控制

18.2.5操作模式

18.3彙編語言檔案

18.3.1Thumb狀態

18.3.2ARM狀態

18.4C程式檔案

18.5重編譯的目標檔案

18.6最佳化

第19章使用GNU工具鏈開發CortexM3

19.1背景

19.2獲得GNU工具鏈

19.3開發流程

19.4程式實例

19.4.1實例1: 第一個程式

19.4.2實例2: 連結多個檔案

19.4.3實例3: 簡單的“Hello World”程式

19.4.4實例4: RAM中的數據

19.4.5實例5: C程式

19.4.6實例6: C實現的重定向

19.4.7實例7: 編寫自己的向量表

19.5訪問特殊暫存器

19.6使用不支持的指令

19.7GNU C編譯器中的內聯彙編

第20章Keil RealView微控制器開發套件入門

20.1概述

20.2μVision入門

20.3通過UART輸出“Hello World”訊息

20.4軟體測試

20.5使用調試器

20.6指令集模擬器

20.7修改向量表

20.8使用CMSIS的秒表中斷實例

20.9移植現有程式使用CMSIS

第21章用NI LabVIEW編程CortexM3

21.1概述

21.2什麼是LabVIEW

21.2.1典型套用領域

21.2.2如何使用LabVIEW和ARM

21.3開發流程

21.4LabVIEW工程實例

21.4.1創建工程

21.4.2定義輸入和輸出

21.4.3創建程式

21.4.4構建設計並測試應用程式

21.5LabVIEW如何工作

21.6LabVIEW的其他特性

21.7移植到另外一個ARM處理器

附錄ACortexM3指令集和參考資料

A.1指令集總結

A.2關於指令集介紹

A.2.1運算元

A.2.2使用PC或SP的限制

A.2.3靈活的第二個運算元

A.2.4移位操作

A.2.5地址對齊

A.2.6PC相關語句

A.2.7條件執行

A.2.8指令寬度選擇

A.3存儲器訪問指令

A.3.1ADR

A.3.2LDR和STR,立即數偏移

A.3.3LDR和STR,暫存器偏移

A.3.4LDR和STR,非特權

A.3.5LDR,PC相關

A.3.6LDM和STM

A.3.7PUSH和POP

A.3.8LDREX和STREX

A.3.9CLREX

A.4普通數據處理指令

A.4.1ADD、ADC、SUB、SBC和RSB

A.4.2AND、ORR、EOR、BIC和ORN

A.4.3ASR、LSL、LSR、ROR和RRX

A.4.4CLZ

A.4.5CMP和CMN

A.4.6MOV和MOVN

A.4.7MOVT

A.4.8REV、REV16、REVSH和RBIT

A.4.9TST和TEQ

A.5乘法和除法指令

A.5.1MUL、MLA和MLS

A.5.2UMULL、UMLAL、SMULL和SMLAL

A.5.3SDIV和UDIV

A.6飽和指令

A.7位域指令

A.7.1BFC和BFI

A.7.2SBFX和UBFX

A.7.3SXT和UXT

A.8跳轉和控制指令

A.8.1B、BL、BX和BLX

A.8.2CBZ和CBNZ

A.8.3IT

A.8.4TBB和TBH

A.9其他指令

A.9.1BKPT

A.9.2CPS

A.9.3DMB

A.9.4DSB

A.9.5ISB

A.9.6MRS

A.9.7MSR

A.9.8NOP

A.9.9SEV

A.9.10SVC

A.9.11WFE

A.9.12WFI

附錄B16位Thumb指令和架構版本

附錄CCortexM3異常快速參考

附錄D嵌套向量中斷控制器和系統控制塊暫存器快速參考

附錄ECortexM3疑難解答

E.1概述

E.2開發錯誤處理

E.2.1報告錯誤狀態暫存器

E.2.2報告壓棧PC和其他壓棧暫存器

E.2.3讀取錯誤地址暫存器

E.2.4清除錯誤狀態位

E.2.5其他問題

E.3了解錯誤的原因

E.4其他可能的問題

附錄FCodeSourcery G++連結器腳本實例

附錄GCMSIS核心訪問函式參考

G.1異常和中斷編號

G.2NVIC訪問函式

G.3系統和SYSTICK函式

G.4核心暫存器訪問函式

G.5CMSIS內在函式

G.6調試訊息輸出函式

附錄H調試和跟蹤接頭

H.1概述

H.220針Cortex調試+ETM接頭

H.310針Cortex調試接頭

H.4老式的20針IDC接頭

H.5老式的38針Mictor接頭

參考文獻

相關詞條

熱門詞條

聯絡我們