《嵌入式ARM系統工程師實訓教程》是2014年由清華大學出版社出版的圖書,該書作者是莊嚴、周建明、廖煒。
基本介紹
- 書名:嵌入式ARM系統工程師實訓教程
- 作者:莊嚴、周建明、廖煒
- ISBN:9787302380788
- 定價:68元
- 出版社:清華大學出版社
圖書詳細信息,圖書簡介,目錄,
圖書詳細信息
ISBN:9787302380788
定價:68元
印次:1-1
裝幀:
印刷日期:2014-10-17
作者:莊嚴、周建明、廖煒
圖書簡介
基於ARM處理器的嵌入式系統是當前最流行的嵌入式系統。本書最大的特色是實踐性強,所有的案例都是完整的、可以得到驗證的。本書分為6篇:嵌入式ARM基礎、硬體系統設計、ARM體系結構與編程、硬體接口及驅動程式設計、嵌入式系統啟動套用分析與設計、綜合項目。
本書是作者長期從事嵌入式領域實踐及培訓積累的結果。讀者可以根據需要,對各章節按順序或者有選擇地進行閱讀和實踐。
本書結構清晰,內容深入淺出、循序漸進,逐步引領讀者進入嵌入式編程領域。本書可作為高校嵌入式系統的教材和嵌入式系統培訓的實踐教材或課程設計輔導讀物,也可以作為廣大嵌入式系統愛好者、在校大學生及單片機愛好者的自學用書。
目錄
第一篇嵌入式ARM基礎
第1章基礎知識 3
1.1嵌入式系統 4
1.1.1概念 4
1.1.2構成 5
1.1.3特點 5
1.2知識結構 7
1.2.1嵌入式基礎 7
1.2.2微處理器與接口 8
1.2.3嵌入式作業系統 8
1.2.4嵌入式程式設計 9
1.2.5開發與維護 9
1.2.6嵌入式系統設計 9
1.3項目流程 10
1.4本章小結 10
1.5本章習題 11
第2章開發環境 13
2.1硬體實驗環境 14
2.1.1ARM參考板 14
2.1.2硬體仿真器 14
2.2ADS集成開發環境 16
2.2.1ADS介紹 16
2.2.2命令行開發工具 17
2.2.3armcc用法詳解 18
2.2.4armlink用法詳解 20
2.2.5ARM運行時庫 26
2.2.6庫路徑的結構 27
2.2.7CodeWarrior 27
2.2.8ADS調試器 29
2.2.9實用程式 30
2.2.10支持的軟體 30
2.3ADS開發流程 30
2.3.1創建工程 30
2.3.2編譯與連線 34
2.3.3代碼調試 39
2.4RealView集成開發環境 42
2.4.1使用介紹 42
2.4.2實例分析 46
2.5嵌入式HelloARM實例入門 50
2.5.1實驗目的 50
2.5.2實驗設備 50
2.5.3實驗原理 50
2.5.4實驗步驟 55
2.6本章小結 59
2.7本章習題 59
第二篇硬體系統設計
第3章硬體設計基礎 63
3.1常用ARM處理器概述 64
3.1.1ARM套用系統設計概述 64
3.1.2S3C2410A功能簡介 65
3.1.3S3C2410ACPU核心概述 69
3.1.4S3C2410A特殊功能暫存器 70
3.1.5S3C2440概述 70
3.1.6S3C6410概述 71
3.1.7S5PV210概述 71
3.1.8Exynos4212概述 72
3.1.9性能對比 73
3.2硬體電路設計基礎 73
3.2.1需求分析 73
3.2.2方案確定 75
3.2.3原理圖繪製 76
3.2.4PCB板圖繪製 82
3.2.5制板與調試 83
3.3本章小結 84
3.4本章習題 84
第三篇ARM體系結構與編程
第4章微處理器概述 87
4.1常用微處理器概述 88
4.1.1ARM 88
4.1.2PowerPC 88
4.1.3MIPS 89
4.1.4DSP 89
4.1.5x86 89
4.1.6FPGA/CPLD 89
4.2ARM概述 90
4.2.1ARM微處理器的特點 91
4.2.2ARM微處理器的套用領域 91
4.3ARM版本與命名方法 92
4.3.1ARM版本介紹 92
4.3.2ARM體系的變種 93
4.3.3ARM體系版本的命名格式 94
4.4常用的ARM微處理器系列介紹 95
4.4.1經典系列ARM處理器 96
4.4.2Cortex-A系列 97
4.4.3Cortex-R系列 97
4.4.4Cortex-M系列 98
4.4.5ARM-SecurCore系列 98
4.4.6ARM-FPGACores系列 99
4.5ARM微處理器的結構 99
4.6ARM微處理器的套用選型 100
4.6.1ARM微處理器核心的選擇 101
4.6.2系統的工作頻率 101
4.6.3晶片記憶體儲器的容量 101
4.6.4內外圍電路的選擇 101
4.7新技術擴展 102
4.7.1ARMv8 102
4.7.2Thumb-2 102
4.7.3Thumb執行環境(ThumbEE) 102
4.7.4高級SIMD(NEON) 102
4.7.5VFP 103
4.7.6安全性擴充(TrustZone) 103
4.7.7Cortex-A50系列 103
4.8本章小結 104
4.9本章習題 104
第5章編程模型 105
5.1ARM微處理器的工作狀態 106
5.2ARM微處理器的工作模式 106
5.3暫存器組織 107
5.3.1ARM狀態下的暫存器組織 108
5.3.2Thumb狀態下的暫存器組織 110
5.3.3程式狀態暫存器 111
5.4ARM數據存儲格式 113
5.5指令長度及數據類型 114
5.6AMBA規範 115
5.6.1AMBA片上匯流排 115
5.6.2基於AMBA的片上系統 116
5.6.3AHB簡介 116
5.6.4APB簡介 116
5.7AAPCS規範 116
5.8異常(Exceptions) 117
5.8.1異常 117
5.8.2對異常的回響 118
5.8.3從異常返回 118
5.9本章小結 119
5.10本章習題 119
第6章指令系統 121
6.1ARM微處理器的指令集概述 122
6.1.1指令的分類與格式 122
6.1.2指令的條件域 122
6.2ARM指令的定址方式 123
6.2.1立即定址 123
6.2.2暫存器定址 124
6.2.3暫存器間接定址 124
6.2.4基址變址定址 124
6.2.5多暫存器定址 125
6.2.6相對定址 125
6.2.7堆疊定址 125
6.3ARM指令實驗指導 126
6.3.1彙編基本框架 126
6.3.2編譯連結調試 127
6.3.3編譯工程 129
6.3.4調試程式 130
6.4ARM指令集 131
6.4.1跳轉指令 132
6.4.2數據處理指令 134
6.4.3乘法指令與乘加指令 139
6.4.4程式狀態暫存器訪問指令 142
6.4.5載入/存儲指令 143
6.4.6批量數據載入/存儲指令 145
6.4.7數據交換指令 146
6.4.8移位指令 146
6.4.9協處理器指令 148
6.4.10異常產生指令 150
6.5Thumb指令及套用 151
6.6本章小結 152
6.7本章習題 152
第7章程式設計基礎 155
7.1程式設計概述 156
7.1.1符號定義(SymbolDefinition)偽指令 156
7.1.2數據定義(DataDefinition)偽指令 158
7.1.3彙編控制(AssemblyControl)偽指令 161
7.2彙編語言的程式結構 167
7.2.1彙編語言程式的基本結構 167
7.2.2彙編語言的子程式調用 168
7.2.3彙編語言程式示例 169
7.3本章小結 172
7.4本章習題 172
第8章混合編程 175
8.1ATPCS介紹 176
8.1.1暫存器的使用規則 176
8.1.2數據棧的使用規則 177
8.1.3參數的傳遞規則 178
8.1.4子程式結果返回規則 179
8.1.5其他特定規則 179
8.1.6AAPCS擴展 181
8.2內嵌彙編器的使用 182
8.2.1內嵌的彙編指令用法 182
8.2.2內嵌的彙編器和armasm的區別 183
8.2.3在C/C++程式中使用內嵌的彙編指令 184
8.2.4內嵌彙編指令的套用舉例 186
8.2.5從彙編程式中訪問C變數 188
8.3在彙編程式中調用C/C++程式 189
8.3.1在彙編程式中調用C程式 189
8.3.2在彙編程式中調用C++程式 189
8.3.3彙編程式完成初始化功能 190
8.3.4在C/C++程式中調用彙編程式 191
8.4本章小結 192
8.5本章習題 192
第9章異常處理 193
9.1ARM異常處理概述 194
9.1.1ARM體系中的異常種類 194
9.1.2中斷向量與異常優先權 195
9.1.3各種異常狀態下使用的暫存器 195
9.2進入和退出異常的過程 196
9.2.1ARM處理器對異常的回響過程 196
9.2.2在應用程式中安裝異常處理程式 197
9.2.3在系統復位時安裝異常處理程式 197
9.2.4在C程式中安裝異常處理程式 198
9.3各類異常的具體描述 200
9.3.1FIQ和IRQ中斷 200
9.3.2復位異常 205
9.3.3未定義指令異常 205
9.3.4指令預取中止異常 205
9.3.5數據訪問中止異常 206
9.3.6SWI異常 206
9.4本章小結 206
9.5本章習題 207
第10章基本的ATPCS規則及其實踐 209
10.1暫存器的使用規則 210
10.2數據棧的使用規則 210
10.3參數傳遞的規則 211
10.4子程式結果返回規則 211
10.5ARM彙編指令編程實驗 211
10.5.1實驗目的 211
10.5.2實驗設備 212
10.5.3實驗原理 212
10.5.4實驗步驟 214
10.6C語言調用彙編語言編程 217
10.6.1實驗目的 217
10.6.2實驗設備 217
10.6.3實驗原理 217
10.6.4實驗步驟 218
10.6.5實驗思考 221
10.7彙編語言調用C語言編程 221
10.7.1實驗目的 221
10.7.2實驗設備 221
10.7.3實驗原理 221
10.7.4實驗步驟 221
10.7.5實驗思考 224
第四篇硬體接口及驅動系統設計
第11章嵌入式軟體編程基礎 227
11.1學習目標 228
11.2本章要點 228
11.3整體設計 228
11.3.1開發背景 228
11.3.2整體設計 228
11.3.3硬體平台 228
11.3.4交叉環境 229
11.3.5硬體驅動 229
11.3.6任務管理 229
11.3.7面向對象 230
11.4記憶體管理 230
11.4.1數據指針 230
11.4.2函式指針 231
11.4.3記憶體申請 231
11.4.4關鍵字const 231
11.4.5關鍵字volatile 233
11.4.6字長與位寬 233
11.4.7位元組對齊 233
11.4.8位元組順序 236
11.5人機界面 238
11.5.1LED 238
11.5.2按鍵 238
11.5.3LCD 238
11.5.4通信接口 238
11.6性能最佳化 238
11.6.1死循環 238
11.6.2延時 239
11.6.3使用宏 239
11.6.4關鍵字register 240
11.6.5內嵌彙編 240
11.6.6位操作 240
11.6.7define/typedef 241
11.7實踐:LED驅動系統 242
11.7.1需求分析 242
11.7.2詳細設計 242
11.7.3編碼設計 244
11.7.4調試與測試 245
11.7.5部署 245
11.8本章小結 245
11.9本章習題 245
第12章嵌入式系統的常用接口 247
12.1學習目標 248
12.2本章要點 248
12.3嵌入式系統常用接口概述 248
12.3.1嵌入式系統的程式設計方法 248
12.3.2嵌入式測試測量 249
12.3.3通用I/O口的工作原理與編程示例 250
12.4串口工作原理與編程示例 256
12.4.1異步串列通信及其協定 256
12.4.2串列通信的物理層標準 257
12.4.3S3C2410內置的UART控制器 258
12.4.4UART編程舉例 260
12.5中斷控制器工作原理與編程示例 267
12.5.1中斷源狀態暫存器 267
12.5.2中斷模式暫存器 267
12.5.3中斷禁止暫存器 268
12.5.4優先權暫存器 268
12.5.5中斷狀態暫存器 268
12.5.6中斷偏移暫存器 268
12.6DMA的工作原理與編程示例 272
12.6.1DMA的工作原理 272
12.6.2I/O接口到存儲器 274
12.6.3存儲器到I/O接口 274
12.6.4存儲器到存儲器 274
12.6.5S3C2410A的DMA控制器 274
12.6.6編程舉例 276
12.7實時時鐘的工作原理與編程示例 282
12.7.1實時時鐘的工作原理 282
12.7.2S3C2410A實時時鐘暫存器介紹 283
12.7.3實時時鐘計數器 283
12.7.4告警控制暫存器 284
12.7.5告警時間暫存器 285
12.8RTC循環復位暫存器 285
12.8.1實時時鐘暫存器 285
12.8.2S3C2410A實時時鐘編程舉例 286
12.9看門狗的工作原理與編程示例 288
12.9.1看門狗的工作原理 288
12.9.2S3C2410A的看門狗定時器暫存器 289
12.9.3看門狗編程舉例 290
12.10I2C工作原理與編程示例 292
12.10.1I2C工作原理 292
12.10.2I2C匯流排的基本結構 292
12.10.3雙向傳輸的接口特性 292
12.10.4I2C匯流排上的時鐘信號 293
12.10.5數據的傳送 293
12.10.6匯流排競爭的仲裁 294
12.10.7I2C匯流排的一次典型工作流程 295
12.10.8S3C2410A的I2C暫存器 295
12.10.9I2C匯流排控制暫存器 296
12.10.10I2C匯流排控制/狀態暫存器 296
12.10.11I2C匯流排地址暫存器 297
12.10.12移位數據暫存器 297
12.10.13I2C編程舉例 298
12.11本章小結 302
12.12本章習題 302
第13章通用I/O口的套用:跑馬燈實驗 303
13.1實驗目的 304
13.2實驗設備 304
13.3實驗原理 304
13.3.1S3C2440A的多功能I/O口 304
13.3.2連線埠選擇 309
13.3.3連線埠控制暫存器 309
13.4實驗步驟 311
13.4.1設定暫存器 311
13.4.2跑馬燈的實現 311
13.4.3編譯工程 312
13.4.4建立實驗環境 312
13.4.5下載程式運行 312
13.5實驗思考 313
第14章中斷處理程式設計 315
14.1實驗目的 316
14.2實驗設備 316
14.3實驗原理 316
14.3.1概述 316
14.3.2中斷模式 316
14.3.3PSR的F位和I位 316
14.3.4Pending暫存器 317
14.3.5INTMSK中斷禁止暫存器 317
14.3.6中斷源 317
14.3.7中斷優先權產生模組 319
14.3.8控制中斷的暫存器 319
14.4實驗步驟 320
14.4.1設定I/O口 320
14.4.2中斷暫存器設定 321
14.4.3中斷服務程式的編寫 321
14.4.4編譯工程 322
14.4.5建立實驗環境 323
14.4.6下載程式運行 323
14.5實驗思考 323
第15章定時器的套用 325
15.1實驗目的 326
15.2實驗設備 326
15.3實驗原理 326
15.3.1概述 326
15.3.2定時器操作 327
15.3.3定時器暫存器 331
15.4實驗步驟 331
15.4.1打開定時器中斷 331
15.4.2設定定時器中斷服務程式的入口地址 332
15.4.3設定定時器暫存器並啟動定時器 332
15.4.4 定時器中斷服務子程式 332
15.4.5判斷定時器中斷情況 333
15.4.6編譯工程 334
15.4.7建立實驗環境 334
15.4.8下載程式並運行 334
15.5實驗思考 335
第16章ADC接口的套用 337
16.1實驗目的 338
16.2實驗設備 338
16.3實驗原理 338
16.3.1概述 338
16.3.2S3C2440A具備的ADC 338
16.3.3ADC轉換時間的計算 339
16.3.4ADC解析度的計算 339
16.3.5採樣保持器 339
16.3.6ADC的相關暫存器 340
16.4實驗步驟 340
16.4.1硬體連線 340
16.4.2得到預分頻值 340
16.4.3讀取A/D轉換數值子程式 340
16.4.4編譯工程 341
16.4.5建立實驗環境 341
16.4.6下載程式並運行 342
16.5實驗思考 342
第17章LCD接口的編程 343
17.1實驗目的 344
17.2實驗設備 344
17.3實驗原理 344
17.3.1概述 344
17.3.2S3C2440A的內部LCD控制器介紹 344
17.3.3LCD控制器的外部接口信號 345
17.3.4LCD控制器的操作 346
17.3.5LCD控制器專用暫存器 348
17.4實驗步驟 352
17.4.1I/O口LCD功能設定 352
17.4.2LCD初始化程式 352
17.4.3LCD測試程式 353
17.4.4編譯工程 354
17.4.5建立實驗環境 355
17.4.6下載程式並運行 355
17.5實驗思考 355
第18章觸控螢幕的套用 357
18.1實驗目的 358
18.2實驗設備 358
18.3實驗原理 358
18.3.1概述 358
18.3.2觸控螢幕的基本原理 358
18.3.3觸控螢幕的相關暫存器 359
18.4實驗步驟 361
18.4.1硬體連線 361
18.4.2暫存器的設定 362
18.4.3觸控螢幕中斷服務程式 362
18.4.4編譯工程 363
18.4.5建立實驗環境 363
18.4.6下載程式並運行 364
18.5實驗思考 364
第19章I2C接口的編程 365
19.1實驗目的 366
19.2實驗設備 366
19.3實驗原理 366
19.3.1概述 366
19.3.2I2C匯流排通用傳輸格式 366
19.3.3S3C2440A的I2C接口 368
19.4實驗步驟 371
19.4.1硬體連線 371
19.4.2I/O連線埠I2C功能設定 372
19.4.3中斷使能 372
19.4.4初始化I2C接口 372
19.4.5寫入數據子程式 372
19.4.6讀出數據子程式 373
19.4.7中斷處理子程式 374
19.4.8編譯工程 375
19.4.9建立實驗環境 375
19.4.10下載程式運行 375
19.5實驗思考 376
第20章UART異步串列接口的套用 377
20.1實驗目的 378
20.2實驗設備 378
20.3實驗原理 378
20.3.1概述 378
20.3.2UART操作 379
20.3.3UART暫存器 382
20.4實驗步驟 383
20.4.1電路連線和I/O口設定 383
20.4.2UART的初始化 384
20.4.3串口0傳送中斷測試 385
20.4.4串口0接收中斷測試 385
20.4.5編譯工程 386
20.4.6建立實驗環境 386
20.4.7下載程式運行 386
20.5實驗思考 387
第21章CAN匯流排通信實驗 389
21.1實驗目的 390
21.2實驗設備 390
21.3實驗原理 390
21.3.1概述 390
21.3.2CAN匯流排的技術特點 390
21.3.3CAN的分層結構 391
21.4實驗步驟 392
21.4.1電路連線 392
21.4.2初始化函式 392
21.4.3MCP2510寫函式 393
21.4.4MCP2510讀函式 393
21.4.5指定地址暫存器修改函式 394
21.4.6CAN通信主體函式 394
21.4.7編譯工程 395
21.4.8建立實驗環境 395
21.4.9下載程式並運行 395
21.5實驗思考 396
第五篇嵌入式系統啟動套用分析與設計
第22章ARM系統啟動套用分析與設計 399
22.1Cortex-M3-STM32啟動代碼分析 400
22.1.1STM32概述 400
22.1.2啟動代碼分析 400
22.2ARM9-S3C2440-U-Boot移植開發 408
22.2.1U-Boot工程簡介 408
22.2.2目錄結構 409
22.2.3Makefile分析 410
22.2.4流程分析 410
22.2.5配置編譯 411
22.2.6移植開發 414
22.2.7調試測試 418
22.2.8常用命令 418
22.2.9環境變數 420
22.3ARM-Cortex-A8-S5PV210-uboot分析 421
22.3.1源碼目錄結構 421
22.3.2啟動代碼start.s分析 423
22.3.3啟動代碼lowlevel.s分析 439
22.3.4啟動代碼彙編部分總結 453
22.3.5硬體啟動過程 454
22.3.6記憶體分配 455
22.4ARM-Cortex-A9-多核介紹 456
22.4.1SamsungExynos4412 456
22.4.2NvidiaTegra2介紹 457
22.4.3ARM-Cortex-A9多核啟動流程 457
22.4.4LinuxKernel對多核心的支持 457
22.4.5軟體識別目前所在的處理器 458
22.4.6多核心的開機 458
22.4.7BootRom 458
22.4.8多核U-Boot 459
22.5本章小結 471
22.6本章習題 471
第六篇綜合項目篇
第23章基於ARM的嵌入式工業控制系統設計 475
23.1總體需求 476
23.1.1部署結構 476
23.1.2主機業務需求 477
23.1.3終端業務需求 478
23.2主機設計 479
23.2.1主機工作流程 480
23.2.2設定終端模組 480
23.2.3打開連線埠模組 481
23.2.4相關業務模組 482
23.2.5主機相關任務描述 483
23.2.6相關定時器舉例 486
23.3通信協定分層 486
23.3.1物理層 486
23.3.2數據鏈路層 486
23.3.3套用層 488
23.4PDU集 490
23.4.1主機召喚終端狀態 491
23.4.2終端返回本機狀態 491
23.4.3主機設定終端狀態 492
23.4.4終端返回設定後的結果 492
23.4.5終端傳送自身狀態 492
23.4.6主機確認收到終端返回 493
23.4.7主機獲得終端的設定值 493
23.4.8終端返回設定後的結果 494
23.4.9確認網路狀態 494
23.4.10確認網路狀態返回 495
23.5套用層異常控制 495
23.6大小端控制 495
23.7數據字典 496
23.8項目總結 496
23.9本章小結 497
23.10本章習題 497