內容簡介
本書全面介紹了嵌入式系統的基本理論和知識,教學重點是基於
ARM處理器的嵌入式硬體平台。本書的主要內容包括:嵌入式系統的基本概念、嵌入式微處理器技術、ARM處理器體系結構、嵌入式調試技術、ARM處理器指令系統、嵌入式開發工具、嵌入式外設控制器、嵌入式存儲器和接口技術、
嵌入式作業系統等知識。
圖書目錄
前言
第1章 嵌入式系統概論1
1.1 概述1
1.1.1 嵌入式系統的定義1
1.1.2 後PC時代與無所不在的計算時代1
1.2 嵌入式系統發展簡史2
1.2.1 微處理器的發展2
1.2.2 嵌入式系統的發展階段3
1.3 嵌入式系統的特點4
1.4 嵌入式系統的基本分類5
1.5 嵌入式系統舉例5
1.5.1 低端嵌入式系統挨蒸獄5
1.5.2 中端嵌入式系統7
1.5.3 高端嵌入式系統9
1.6 嵌入式系統的基本組成11
1.6.1 嵌入式系統的硬體組成12
1.6.2 嵌入式系統的軟體組成13
1.7 嵌入式系統的現狀與發展趨勢14
1.7.1 嵌入式系統的現狀及主要制約因素14
1.7.2 嵌入式系統的發展方向15
1.8 嵌入式系統的相關研究領域熱市潤15
1.8.1 嵌入式系統的主幹學科領域15
1.8.2 與嵌入式系統密切關聯的科學技術領榆愉戒域15
1.9 本章小結18
1.10 習題和思考題19
第2章 嵌入式微處理器技術20
2.1 嵌入式處理器基本分類20
2.1.1 通用型嵌入式微處理器20
2.1.3 嵌入式DSP處理器23
2.1.5 嵌入式雙核/多核處理器24
2.1.6 可擴展處理平台26
2.2 嵌入式微處理器的典型技術27
2.2.2 哈佛結構29
2.2.3 桶型移位器31
2.2.4 正交指令集32
2.2.5 雙密度指令集33
2.2.7 邊界對準與端序35
2.2.8 地址重映射36
2.2.9 FIFO緩衝暫存器37
2.2.10 主存控制器38
2.3 主流嵌入式微處理器39
2.3.1 MIPS RISC嵌入式微處理器39
2.3.2 PowerPC系列嵌入式微處理器41
2.3.4 凌動系列嵌入式微處理器43
2.3.5 ARM系列嵌入式微處理器45
2.4 本章小結46
2.5 習題和思考題46
3.1 譽備霸擊概述47
3.1.2 ARM體系結放罪灶構版本的變種48
3.1.3 ARM體系結構版本的命名規則48
3.1.4 ARM處理器核系列49
3.2 ARM處理器的結構52
3.2.1 ARM處理器的RISC特徵52
3.2.2 流甩婆水線53
3.2.3 ARM的工作模式和工作狀態57
3.2.4 ARM暫存器的組織59
3.3 ARM Cortex處理器62
3.3.1 ARM Cortex-M3核心62
3.3.2 採用Cortex-M3核生產的
微控制器66
3.3.3 ARM Cortex-A8核心66
3.3.4 ARM Cortex-A9核心67
3.3.5 採用Cortex-A9核心生產的套用處理器69
3.4 ARM存儲器的組織70
3.4.1 ARM存儲器的數據類型和存儲格式70
3.4.2 ARM的存儲體系70
3.4.3 片記憶體儲器的用法71
3.4.4 協處理器CP1571
3.4.5 存儲管理單元72
3.4.6 保護單元78
3.4.7 ARM處理器的Cache80
3.4.8 快速上下文切換擴展82
3.4.9 寫快取區83
3.5 ARM處理器的片上匯流排規範AMBA84
3.5.1 AMBA 2.0片上匯流排的特點84
3.5.2 AMBA 2.0片上匯流排的主控單元和從動單元85
3.5.3 AMBA 2.0匯流排的時序85
3.5.4 AMBA 3.0——AXI協定86
3.6 ARM處理器核的典型範例:ARM7TDMI86
3.6.1 復位87
3.6.2 匯流排周期87
3.6.3 ARM7TDMI處理器的匯流排優先權90
3.7 ARM的異常中斷處理90
3.7.1 ARM的異常中斷回響過程90
3.7.2 從異常中斷處理程式返回92
3.8 本章小結94
3.9 習題和思考題罪戶放嘗94
第4章 嵌入式系統調試技術95
4.1 嵌入式硬體調試結構和調試技術95
4.1.1 與通用計算機調試結構的比較96
4.1.2 調試信道96
4.1.3 ROM仿真器97
4.1.4 實時線上仿真97
4.2 指令集模擬器97
4.2.1 ARMulator98
4.2.2 SkyEye98
4.3 片上調試技術99
4.3.1 背景調試模式99
4.3.3 ARM7TDMI核中的JTAG掃描鏈104
4.3.4 嵌入式ICE-RT模組105
4.3.5 JTAG的斷點設定原理106
4.3.6 Nexus調試標準107
4.4 嵌入追蹤宏單元ETM108
4.5 基於Angel的調試方案109
4.5.1 Angel調試系統的組成109
4.5.2 Angel的兩種版本109
4.5.3 Angel的調試處理流程和調試操作步驟110
4.6 半主機調試方式110
4.7 本章小結112
4.8 習題和思考題112
第5章 ARM處理器指令集113
5.1 ARM處理器的指令系統113
5.1.1 ARM處理器指令系統的主要特徵113
5.1.2 ARM與x86指令系統的比較114
5.2.1 ARM指令集的編碼格式114
5.2.2 ARM指令的一般語法格式114
5.2.3 ARM指令的執行條件114
5.2.4 第2運算元<Operand2>說明116
5.3 ARM處理器的定址方式117
5.4 ARM指令的分類說明121
5.4.1 分支指令122
5.4.2 Load/Store指令123
5.4.3 數據處理指令127
5.4.4 乘法指令128
5.4.5 前導零計數指令129
5.4.7 協處理器指令130
5.4.8 異常中斷指令131
5.4.9 ARM偽指令131
5.5 本章小結133
5.6 習題和思考題134
第6章 ARM彙編語言程式設計135
6.1 概述135
6.1.1 預定義暫存器名及內部變數名135
6.1.2 ARM彙編語言程式的語句格式136
6.1.3 ARM彙編語言程式編寫規範139
6.2 ARM彙編語言指示符139
6.2.1 AREA140
6.2.2 ENTRY141
6.2.3 CODE16、CODE32、THUMB和ARM141
6.2.4 EQU142
6.2.5 END142
6.2.6 ALIGN142
6.2.7 DCB143
6.2.8 MAP144
6.2.9 FIELD144
6.2.10 SPACE144
6.2.11 DCD和DCDU145
6.2.12 GBLA、GBLL及GBLS146
6.2.13 LCLA、LCLL及LCLS147
6.2.14 SETA、SETL及SETS147
6.2.15 其他指示符的簡單功能描述147
6.3 ARM彙編語言指示符的編程舉例149
6.3.1 條件分支指示符149
6.3.2 ASCII字元串比較149
6.3.3 宏定義指示符151
6.4 ARM過程調用標準ATPCS和AAPCS153
6.4.1 暫存器的使用規則153
6.4.2 堆疊使用規則153
6.4.3 參數傳遞規則154
6.5 典型ARM彙編語言程式舉例154
6.5.1 入門範例154
6.5.2 基本結構156
6.5.3 典型的ARM彙編程式範例159
6.5.4 5級流水線的互鎖問題165
6.6 ARM內嵌彙編166
6.6.1 內嵌彙編的指令用法167
6.6.2 內嵌彙編器與armasm彙編器的區別167
6.7 C/C++與彙編程式的相互調用168
6.7.1 C/C++程式調用彙編程式169
6.7.2 彙編程式調用C程式169
6.7.3 彙編程式調用C++程式170
6.7.4 C程式調用C++程式172
6.8 軟中斷和半主機方式ARM彙編程式設計173
6.9 GNU格式的ARM彙編語言程式設計177
6.9.1 GNU格式ARM彙編語言程式的設計要點177
6.9.2 GNU格式ARM彙編語言程式舉例178
6.10 本章小結179
6.11 習題和思考題179
7.1 概述181
7.1.2 開發工具的基本分類和主要品種181
7.1.3 集成開發環境183
7.1.4 CodeWarrior集成開發環境184
7.2 ARM開發工具概述185
7.3 ARM映像檔案格式186
7.3.1 ELF檔案格式186
7.3.2 ARM映像檔案的組成188
7.4 ADS的組成與使用196
7.4.1 命令行開發工具196
7.4.2 GUI開發工具200
7.4.3 ADS實用工具202
7.5 用ADS生成應用程式203
7.5.1 生成簡單應用程式hello203
7.5.3 生成一個在目標板上運行的定時器程式207
7.6 RVDS209
7.6.1 RVDS的組件210
7.6.2 RVDS使用概覽211
7.6.3 開中斷關中斷的內嵌ARM彙編函式212
7.8 本章小結214
7.9 習題和思考題214
第8章 嵌入式外設控制器216
8.1 嵌入式中斷控制器216
8.1.1 嵌入式中斷控制器工作原理216
8.1.2 ARM Cortex-M3嵌套向量
中斷控制器222
8.2 向量中斷與非向量中斷的入口程式編程示例225
8.3 嵌入式中斷應用程式舉例228
8.4.1 S3C44B0X的DMA控制器232
8.4.2 S3C44B0X的DMAC相關控制暫存器234
8.4.3 S3C44B0X的DMA應用程式舉例235
8.5 時鐘
電源管理器、實時時鐘和脈寬調製定時器237
8.5.1 S3C44B0X的時鐘電源管理器238
8.5.2 S3C2410X的實時時鐘240
8.5.3 實時時鐘應用程式概要設計案例241
8.5.4 S3C44B0X的脈寬調製定時器244
8.6 本章小結245
8.7 習題和思考題245
第9章 嵌入式存儲器和接口技術247
9.2 常用的嵌入式系統匯流排265
9.2.1 I2C匯流排266
9.2.2 SPI匯流排接口268
9.2.3 CAN匯流排269
9.3 常用的嵌入式系統接口271
9.3.1 UART接口271
9.3.2 通用輸入輸出接口277
9.3.3 乙太網接口278
9.4 嵌入式系統常用的外部設備285
9.4.1 鍵盤285
9.4.2 液晶顯示器288
9.4.3 觸控螢幕291
9.5 本章小結297
9.6 習題和思考題297
參考文獻298
2.4 本章小結46
2.5 習題和思考題46
3.1 概述47
3.1.2 ARM體系結構版本的變種48
3.1.3 ARM體系結構版本的命名規則48
3.1.4 ARM處理器核系列49
3.2 ARM處理器的結構52
3.2.1 ARM處理器的RISC特徵52
3.2.2 流水線53
3.2.3 ARM的工作模式和工作狀態57
3.2.4 ARM暫存器的組織59
3.3 ARM Cortex處理器62
3.3.1 ARM Cortex-M3核心62
3.3.2 採用Cortex-M3核生產的
微控制器66
3.3.3 ARM Cortex-A8核心66
3.3.4 ARM Cortex-A9核心67
3.3.5 採用Cortex-A9核心生產的套用處理器69
3.4 ARM存儲器的組織70
3.4.1 ARM存儲器的數據類型和存儲格式70
3.4.2 ARM的存儲體系70
3.4.3 片記憶體儲器的用法71
3.4.4 協處理器CP1571
3.4.5 存儲管理單元72
3.4.6 保護單元78
3.4.7 ARM處理器的Cache80
3.4.8 快速上下文切換擴展82
3.4.9 寫快取區83
3.5 ARM處理器的片上匯流排規範AMBA84
3.5.1 AMBA 2.0片上匯流排的特點84
3.5.2 AMBA 2.0片上匯流排的主控單元和從動單元85
3.5.3 AMBA 2.0匯流排的時序85
3.5.4 AMBA 3.0——AXI協定86
3.6 ARM處理器核的典型範例:ARM7TDMI86
3.6.1 復位87
3.6.2 匯流排周期87
3.6.3 ARM7TDMI處理器的匯流排優先權90
3.7 ARM的異常中斷處理90
3.7.1 ARM的異常中斷回響過程90
3.7.2 從異常中斷處理程式返回92
3.8 本章小結94
3.9 習題和思考題94
第4章 嵌入式系統調試技術95
4.1 嵌入式硬體調試結構和調試技術95
4.1.1 與通用計算機調試結構的比較96
4.1.2 調試信道96
4.1.3 ROM仿真器97
4.1.4 實時線上仿真97
4.2 指令集模擬器97
4.2.1 ARMulator98
4.2.2 SkyEye98
4.3 片上調試技術99
4.3.1 背景調試模式99
4.3.3 ARM7TDMI核中的JTAG掃描鏈104
4.3.4 嵌入式ICE-RT模組105
4.3.5 JTAG的斷點設定原理106
4.3.6 Nexus調試標準107
4.4 嵌入追蹤宏單元ETM108
4.5 基於Angel的調試方案109
4.5.1 Angel調試系統的組成109
4.5.2 Angel的兩種版本109
4.5.3 Angel的調試處理流程和調試操作步驟110
4.6 半主機調試方式110
4.7 本章小結112
4.8 習題和思考題112
第5章 ARM處理器指令集113
5.1 ARM處理器的指令系統113
5.1.1 ARM處理器指令系統的主要特徵113
5.1.2 ARM與x86指令系統的比較114
5.2.1 ARM指令集的編碼格式114
5.2.2 ARM指令的一般語法格式114
5.2.3 ARM指令的執行條件114
5.2.4 第2運算元<Operand2>說明116
5.3 ARM處理器的定址方式117
5.4 ARM指令的分類說明121
5.4.1 分支指令122
5.4.2 Load/Store指令123
5.4.3 數據處理指令127
5.4.4 乘法指令128
5.4.5 前導零計數指令129
5.4.7 協處理器指令130
5.4.8 異常中斷指令131
5.4.9 ARM偽指令131
5.5 本章小結133
5.6 習題和思考題134
第6章 ARM彙編語言程式設計135
6.1 概述135
6.1.1 預定義暫存器名及內部變數名135
6.1.2 ARM彙編語言程式的語句格式136
6.1.3 ARM彙編語言程式編寫規範139
6.2 ARM彙編語言指示符139
6.2.1 AREA140
6.2.2 ENTRY141
6.2.3 CODE16、CODE32、THUMB和ARM141
6.2.4 EQU142
6.2.5 END142
6.2.6 ALIGN142
6.2.7 DCB143
6.2.8 MAP144
6.2.9 FIELD144
6.2.10 SPACE144
6.2.11 DCD和DCDU145
6.2.12 GBLA、GBLL及GBLS146
6.2.13 LCLA、LCLL及LCLS147
6.2.14 SETA、SETL及SETS147
6.2.15 其他指示符的簡單功能描述147
6.3 ARM彙編語言指示符的編程舉例149
6.3.1 條件分支指示符149
6.3.2 ASCII字元串比較149
6.3.3 宏定義指示符151
6.4 ARM過程調用標準ATPCS和AAPCS153
6.4.1 暫存器的使用規則153
6.4.2 堆疊使用規則153
6.4.3 參數傳遞規則154
6.5 典型ARM彙編語言程式舉例154
6.5.1 入門範例154
6.5.2 基本結構156
6.5.3 典型的ARM彙編程式範例159
6.5.4 5級流水線的互鎖問題165
6.6 ARM內嵌彙編166
6.6.1 內嵌彙編的指令用法167
6.6.2 內嵌彙編器與armasm彙編器的區別167
6.7 C/C++與彙編程式的相互調用168
6.7.1 C/C++程式調用彙編程式169
6.7.2 彙編程式調用C程式169
6.7.3 彙編程式調用C++程式170
6.7.4 C程式調用C++程式172
6.8 軟中斷和半主機方式ARM彙編程式設計173
6.9 GNU格式的ARM彙編語言程式設計177
6.9.1 GNU格式ARM彙編語言程式的設計要點177
6.9.2 GNU格式ARM彙編語言程式舉例178
6.10 本章小結179
6.11 習題和思考題179
7.1 概述181
7.1.2 開發工具的基本分類和主要品種181
7.1.3 集成開發環境183
7.1.4 CodeWarrior集成開發環境184
7.2 ARM開發工具概述185
7.3 ARM映像檔案格式186
7.3.1 ELF檔案格式186
7.3.2 ARM映像檔案的組成188
7.4 ADS的組成與使用196
7.4.1 命令行開發工具196
7.4.2 GUI開發工具200
7.4.3 ADS實用工具202
7.5 用ADS生成應用程式203
7.5.1 生成簡單應用程式hello203
7.5.3 生成一個在目標板上運行的定時器程式207
7.6 RVDS209
7.6.1 RVDS的組件210
7.6.2 RVDS使用概覽211
7.6.3 開中斷關中斷的內嵌ARM彙編函式212
7.8 本章小結214
7.9 習題和思考題214
第8章 嵌入式外設控制器216
8.1 嵌入式中斷控制器216
8.1.1 嵌入式中斷控制器工作原理216
8.1.2 ARM Cortex-M3嵌套向量
中斷控制器222
8.2 向量中斷與非向量中斷的入口程式編程示例225
8.3 嵌入式中斷應用程式舉例228
8.4.1 S3C44B0X的DMA控制器232
8.4.2 S3C44B0X的DMAC相關控制暫存器234
8.4.3 S3C44B0X的DMA應用程式舉例235
8.5 時鐘
電源管理器、實時時鐘和脈寬調製定時器237
8.5.1 S3C44B0X的時鐘電源管理器238
8.5.2 S3C2410X的實時時鐘240
8.5.3 實時時鐘應用程式概要設計案例241
8.5.4 S3C44B0X的脈寬調製定時器244
8.6 本章小結245
8.7 習題和思考題245
第9章 嵌入式存儲器和接口技術247
9.2 常用的嵌入式系統匯流排265
9.2.1 I2C匯流排266
9.2.2 SPI匯流排接口268
9.2.3 CAN匯流排269
9.3 常用的嵌入式系統接口271
9.3.1 UART接口271
9.3.2 通用輸入輸出接口277
9.3.3 乙太網接口278
9.4 嵌入式系統常用的外部設備285
9.4.1 鍵盤285
9.4.2 液晶顯示器288
9.4.3 觸控螢幕291
9.5 本章小結297
9.6 習題和思考題297
參考文獻298