圖書簡介
從2008年開始,基於CortexM3的單片機以其高性能、低成本及易於使用等諸多優勢,已經取代ARM7,成長為32位微控制器的主流。而且由於其諸多特性,之前“ARM9+OS”(如“ARM9+Linux”等)的多種方案,目前也可以由“CortexM3+嵌入式OS”的方式取代。
支持Cortex M3的晶片廠家也在日益增多,包括ST、TI、Atmel等在內的晶片巨頭都有多款基於CortexM3的微控制器產品,而且具有Flash及記憶體大小、外設以及運行頻率等
圖書目錄
譯者序1
推薦序(一)3
推薦序(二)5
前言7
致謝9
本書約定11
術語和縮寫13
第1章介紹
1.1ARM CortexM3處理器是什麼
1.2ARM和ARM架構的背景
1.2.1歷史簡介
1.2.2架構版本
1.2.3處理器命名
1.3指令集開發
1.4Thumb2技術和指令集架構
1.5CortexM3處理器套用
1.6本書的組織結構
1.7深入閱讀
第2章CortexM3綜述
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章CortexM3基礎
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.2CortexM3棧的套用
3.6.3CortexM3的雙棧模型
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.4CortexM3上一些有用的指令
4.4.1MSR和MRS
4.4.2進一步了解IFTHEN指令塊
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章CortexM3設計綜述
6.1流水線
6.2詳細框圖
6.3CortexM3上的匯流排接口
6.3.1ICODE匯流排
6.3.2DCODE匯流排
6.3.3系統匯流排
6.3.4外部PPB
6.3.5DAP匯流排
6.4CortexM3上的其他接口
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章CortexM3編程
10.1概述
10.2典型的開發流程
10.3使用C
10.3.1使用RealView開發組件的簡單C程式實例
10.3.2使用Keil MDKARM編譯相同的例程
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章CortexM3的其他特性
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.5CortexM3中的斷點
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章CortexM3處理器入門
17.1選擇一款CortexM3產品
17.2開發工具
17.2.1C編譯器和調試器
17.2.2嵌入式OS支持
17.3CortexM3版本0和版本1之間的區別
17.4CortexM3版本1和版本2之間的區別
17.4.1雙字棧對齊的默認配置
17.4.2輔助控制暫存器
17.4.3ID暫存器數值更新
17.4.4調試特性
17.4.5休眠特性
17.5版本2新特性的優勢和效果
17.6CortexM3和CortexM0之間的區別
17.6.1編程模型
17.6.2異常和NVIC
17.6.3指令集
17.6.4存儲器系統特性
17.6.5調試特性
17.6.6兼容性
第18章ARM7到CortexM3的應用程式移植
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工具鏈開發CortexM3
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編程CortexM3
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處理器
附錄ACortexM3指令集和參考資料
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指令和架構版本
附錄CCortexM3異常快速參考
附錄D嵌套向量中斷控制器和系統控制塊暫存器快速參考
附錄ECortexM3疑難解答
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接頭
參考文獻