嵌入式微處理器程序設(shè)計(jì)——從Arduino到ARM
本書以開源硬件平臺(tái)Arduino Due為教學(xué)實(shí)驗(yàn)平臺(tái),以ARM芯片SAM3X8E為對(duì)象,介紹了ARM微處理器編程的方法和流程。本書內(nèi)容包括ARM微處理器的發(fā)展歷史、應(yīng)用領(lǐng)域、分類以及ARM微處理器的軟件開發(fā)工具和硬件開發(fā)工具,涵蓋了ARM微處理器的兩種編程模式:Arduino編程和ARM編程。本書內(nèi)容由易到難,講解循序漸進(jìn),并且提供了大量翔實(shí)的應(yīng)用實(shí)例供讀者參考,所有實(shí)例都給出了完整的程序。
本書取材新穎、內(nèi)容豐富、重點(diǎn)突出、深入淺出、富有啟發(fā)性和可操作性,便于教學(xué),可為初學(xué)者提供學(xué)習(xí)參考。本書既可以作為高等院校電子、通信、自動(dòng)化以及計(jì)算機(jī)等相關(guān)專業(yè)的教材,也可以作為相關(guān)領(lǐng)域工程技術(shù)人員的培訓(xùn)用書或參考手冊(cè)。
本書特色
(1)本書將 Arduino 編程與 ARM 編程有機(jī)地結(jié)合起來,有效發(fā)揮二者的優(yōu)勢(shì),揚(yáng)長(zhǎng)避短。
(2)無論是 ARM 編程還是 Arduino 編程,本書都為讀者設(shè)計(jì)了大量的實(shí)例以供練習(xí)與實(shí)踐。
(3)本書中的 Arduino 實(shí)例與 ARM 實(shí)例是互通的,這有利于讀者對(duì)照學(xué)習(xí),了解 Arduino 編程的實(shí)現(xiàn)過程。
(4)本書綜合了 ARM 微處理器的兩種編程模式,且過渡自然。
(5)本書提供PPT、教案、教學(xué)大綱、源代碼等教輔資源,助力高校教師高效教學(xué)。
特別說明
1. 嵌入式系統(tǒng)開發(fā)直接上來就講解ARM編程,難度過大,讀者很難接受,特別是二本、三本院校的學(xué)生。本書則是先介紹Arduino編程,然后介紹ARM編程,這樣有利于讀者逐步深入學(xué)習(xí);而且本書將2種編程模式緊密結(jié)合,過渡自然。
2. 嵌入式系統(tǒng)開發(fā)課程具有較強(qiáng)的操作實(shí)踐性,為此,本書針對(duì)每章的知識(shí)點(diǎn)都設(shè)計(jì)了操作實(shí)例以服務(wù)案例教學(xué)。
3. 本書中的Arduino編程實(shí)例與ARM編程實(shí)例是互通的,有利于讀者對(duì)照學(xué)習(xí),了解Arduino的實(shí)現(xiàn)過程并掌握ARM的實(shí)現(xiàn)原理。
唐光義:
男,副教授,任教于哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,主持并完成多個(gè)省級(jí)和校級(jí)的教學(xué)改革項(xiàng)目,主持并完成多個(gè)橫向科研項(xiàng)目,出版教材一部,公開發(fā)表學(xué)術(shù)論文20余篇;具有多年從事嵌入式系統(tǒng)開發(fā)、分布式系統(tǒng)開發(fā)的實(shí)戰(zhàn)經(jīng)驗(yàn),一直在一線教學(xué)崗位任教,對(duì)于當(dāng)前學(xué)校的教學(xué)狀態(tài)、學(xué)生能力素質(zhì)培養(yǎng)和學(xué)生學(xué)習(xí)興趣激發(fā)有比較全面的了解。
【章名目錄】
01 初識(shí)ARM微處理器 1
02 Arduino Due簡(jiǎn)介 17
03 Arduino編程基礎(chǔ) 32
04 基于Arduino的應(yīng)用開發(fā) 53
05 ARM編程基礎(chǔ) 76
06 Cortex-M3微處理器 96
07 Thumb-2指令集 114
08 PIO接口 141
09 異常處理 157
10 定時(shí)/計(jì)數(shù)器TC 182
11 UART 199
12 ADC 216
13 DAC 237
【詳細(xì)目錄】
01 初識(shí)ARM微處理器 1
1.1 ARM微處理器概述 1
1.1.1 ARM公司的發(fā)展歷史 2
1.1.2 ARM微處理器的架構(gòu) 3
1.1.3 ARM微處理器的特點(diǎn) 6
1.1.4 ARM微處理器的應(yīng)用領(lǐng)域 6
1.2 ARM微處理器的開發(fā)工具 8
1.2.1 交叉編譯環(huán)境 8
1.2.2 軟件開發(fā)工具 9
1.2.3 硬件開發(fā)工具 12
1.3 ARM微處理器的開發(fā)方法簡(jiǎn)介 13
1.3.1 基于Arduino的應(yīng)用開發(fā) 13
1.3.2 基于CMSIS的應(yīng)用開發(fā) 14
思考與練習(xí) 16
02 Arduino Due簡(jiǎn)介 17
2.1 Arduino Due概述 17
2.2 功能特點(diǎn) 18
2.3 參數(shù)規(guī)格 19
2.4 硬件平臺(tái)的結(jié)構(gòu) 20
2.4.1 元件布局 20
2.4.2 連接器 20
2.4.3 跳線器 21
2.5 硬件電路的設(shè)計(jì)原理 21
2.5.1 微處理器電路 21
2.5.2 電源電路 23
2.5.3 復(fù)位電路 25
2.5.4 時(shí)鐘源電路 25
2.5.5 LED顯示電路 25
2.5.6 JTAG接口電路 26
2.5.7 SWD接口電路 26
2.5.8 電源擴(kuò)展接口電路 27
2.5.9 I/O擴(kuò)展接口電路 27
2.5.10 USB接口電路 28
2.5.11 USB轉(zhuǎn)串口電路 29
2.5.12 擦除按鍵接口電路 30
2.5.13 TWI電路 30
2.5.14 SPI電路 30
思考與練習(xí) 31
03 Arduino編程基礎(chǔ) 32
3.1 搭建Arduino開發(fā)環(huán)境 32
3.1.1 安裝Arduino IDE 32
3.1.2 Arduino IDE結(jié)構(gòu) 34
3.1.3 Arduino IDE的主界面 35
3.2 Arduino編程語言基礎(chǔ) 39
3.2.1 語法符號(hào) 40
3.2.2 數(shù)據(jù)類型 41
3.2.3 常量與變量 42
3.2.4 控制結(jié)構(gòu) 44
3.3 Arduino程序的結(jié)構(gòu) 47
3.4 Arduino入門項(xiàng)目——Blink 48
3.4.1 實(shí)驗(yàn)材料 48
3.4.2 硬件電路 48
3.4.3 連接硬件電路并安裝驅(qū)動(dòng) 48
3.4.4 編輯程序 50
3.4.5 設(shè)置開發(fā)板及串行通信接口 50
3.4.6 編譯程序 51
3.4.7 下載并運(yùn)行程序 51
思考與練習(xí) 52
04 基于Arduino的應(yīng)用開發(fā) 53
4.1 數(shù)字量I/O 53
4.1.1 數(shù)字量I/O函數(shù) 53
4.1.2 編程實(shí)驗(yàn):鍵控流水燈 54
4.2 模擬量I/O 56
4.2.1 模擬量輸入函數(shù) 56
4.2.2 編程實(shí)驗(yàn):光強(qiáng)度自動(dòng)報(bào)警系統(tǒng) 57
4.2.3 模擬量輸出函數(shù) 58
4.2.4 編程實(shí)驗(yàn):簡(jiǎn)易調(diào)色LED燈 59
4.2.5 編程實(shí)驗(yàn):三角波發(fā)生器 61
4.3 串行通信 61
4.3.1 串行通信接口函數(shù) 62
4.3.2 編程實(shí)驗(yàn):回音壁 66
4.4 中斷處理 67
4.4.1 中斷處理函數(shù) 67
4.4.2 編程實(shí)驗(yàn):鍵控LED燈 68
4.4.3 編程實(shí)驗(yàn):中斷方式的回音壁 69
4.4.4 編程實(shí)驗(yàn):控制中斷 70
4.5 其他功能函數(shù) 72
4.5.1 時(shí)間函數(shù) 72
4.5.2 高級(jí)I/O操作函數(shù) 72
4.5.3 編程實(shí)驗(yàn):測(cè)量程序的執(zhí)行時(shí)間 73
4.5.4 編程實(shí)驗(yàn):74HC595芯片驅(qū)動(dòng)多路LED燈 74
思考與練習(xí) 75
05 ARM編程基礎(chǔ) 76
5.1 ARM編程與Arduino編程的比較 76
5.1.1 Arduino編程的局限性 76
5.1.2 Arduino引腳 77
5.2 ARM開發(fā)工具概述 78
5.2.1 MDK概述 78
5.2.2 ULINK 2概述 81
5.3 ARM編程入門向?qū)А?1
5.3.1 MDK環(huán)境簡(jiǎn)介 81
5.3.2 簡(jiǎn)單工程示例 86
思考與練習(xí) 95
06 Cortex-M3微處理器 96
6.1 Cortex-M3微處理器內(nèi)核 96
6.1.1 Cortex-M3微處理器內(nèi)核簡(jiǎn)介 98
6.1.2 三級(jí)流水線 99
6.1.3 總線系統(tǒng) 100
6.2 Cortex-M3微處理器工作模式和訪問級(jí)別 101
6.3 Cortex-M3寄存器組成 103
6.3.1 通用寄存器R0~R12 103
6.3.2 通用寄存器R13 104
6.3.3 通用寄存器R14 104
6.3.4 通用寄存器R15 105
6.3.5 特殊功能寄存器 105
6.4 存儲(chǔ)器系統(tǒng) 109
6.4.1 存儲(chǔ)器映射 109
6.4.2 位帶操作 110
6.4.3 非對(duì)齊數(shù)據(jù)傳送 113
思考與練習(xí) 113
07 Thumb-2指令集 114
7.1 Thumb-2指令集概述 114
7.2 尋址方式 116
7.3 Thumb-2指令集分類 121
7.4 Thumb-2常用指令詳細(xì)介紹 122
7.4.1 數(shù)據(jù)傳送指令 122
7.4.2 存儲(chǔ)器訪問指令 123
7.4.3 算術(shù)運(yùn)算指令 126
7.4.4 邏輯運(yùn)算指令 130
7.4.5 比較和測(cè)試指令 131
7.4.6 子程序調(diào)用與無條件轉(zhuǎn)移指令 132
7.4.7 移位指令 134
7.4.8 符號(hào)擴(kuò)展指令 134
7.4.9 字節(jié)調(diào)序指令 135
7.4.10 位操作指令 136
7.4.11 飽和運(yùn)算指令 137
7.4.12 隔離指令 139
7.4.13 If-Then指令 140
思考與練習(xí) 140
08 PIO接口 141
8.1 PIO接口概述 141
8.2 PIO接口結(jié)構(gòu) 143
8.3 PIO接口的基本功能 144
8.3.1 輸出控制 145
8.3.2 輸入控制 146
8.4 PIO接口的寄存器描述 147
8.5 PIO接口的輸入/輸出操作 152
8.5.1 PIO接口的數(shù)據(jù)結(jié)構(gòu) 152
8.5.2 PIO接口的操作步驟 154
8.5.3 編程實(shí)驗(yàn):鍵控?zé)簟?54
思考與練習(xí) 156
09 異常處理 157
9.1 異常類型 158
9.2 異常優(yōu)先級(jí) 164
9.2.1 優(yōu)先級(jí)的定義 164
9.2.2 優(yōu)先級(jí)分組 165
9.3 異常向量表 166
9.4 異常處理過程 167
9.4.1 異常響應(yīng)過程 167
9.4.2 異常處理返回過程 169
9.4.3 特殊情況的處理 169
9.5 NVIC 171
9.6 異常處理的基本操作 178
9.6.1 異常處理的數(shù)據(jù)結(jié)構(gòu) 178
9.6.2 異常處理的操作步驟 179
9.6.3 編程實(shí)驗(yàn):定時(shí)閃爍燈 179
思考與練習(xí) 181
10 定時(shí)/計(jì)數(shù)器TC 182
10.1 定時(shí)/計(jì)數(shù)器概述 182
10.2 定時(shí)/計(jì)數(shù)器的工作原理 184
10.2.1 定時(shí)/計(jì)數(shù)器工作模式 184
10.2.2 時(shí)鐘的選擇和控制 185
10.2.3 觸發(fā)器 187
10.2.4 捕獲模式 187
10.2.5 波形模式 188
10.3 定時(shí)/計(jì)數(shù)器的寄存器描述 194
10.4 定時(shí)/計(jì)數(shù)器的基本操作 195
10.4.1 定時(shí)/計(jì)數(shù)器的數(shù)據(jù)結(jié)構(gòu) 195
10.4.2 定時(shí)/計(jì)數(shù)器的操作步驟 196
10.4.3 編程實(shí)驗(yàn):呼吸燈 196
思考與練習(xí) 198
11 UART 199
11.1 UART概述 199
11.2 UART的基本功能 200
11.3 UART的寄存器描述 206
11.4 UART通信的基本操作 212
11.4.1 UART的數(shù)據(jù)結(jié)構(gòu) 212
11.4.2 UART的操作步驟 212
11.4.3 編程實(shí)驗(yàn):回音壁 213
思考與練習(xí) 215
12 ADC 216
12.1 ADC概述 216
12.1.1 ADC的工作原理 216
12.1.2 ADC的分類和特點(diǎn) 217
12.1.3 ADC的主要技術(shù)指標(biāo) 218
12.2 ADC的結(jié)構(gòu) 219
12.2.1 內(nèi)部結(jié)構(gòu)圖 219
12.2.2 ADC的主要特性 220
12.2.3 基本信號(hào)描述 220
12.3 ADC的基本功能 221
12.3.1 模數(shù)轉(zhuǎn)換過程 221
12.3.2 分辨率設(shè)置 222
12.3.3 轉(zhuǎn)換結(jié)果 222
12.3.4 觸發(fā)轉(zhuǎn)換的類型 222
12.3.5 睡眠模式和序列轉(zhuǎn)換器 222
12.4 ADC的寄存器描述 223
12.5 ADC的基本操作 231
12.5.1 ADC的數(shù)據(jù)結(jié)構(gòu) 231
12.5.2 ADC的操作步驟 232
12.5.3 編程實(shí)驗(yàn):電壓表 233
思考與練習(xí) 236
13 DAC 237
13.1 DAC概述 237
13.1.1 DAC的工作原理 237
13.1.2 DAC的分類 238
13.1.3 DAC的主要技術(shù)指標(biāo) 239
13.2 DAC的結(jié)構(gòu) 239
13.2.1 內(nèi)部結(jié)構(gòu)圖 239
13.2.2 DAC的主要特性 240
13.2.3 基本信號(hào)描述 240
13.3 DAC的基本功能 241
13.3.1 數(shù)模轉(zhuǎn)換過程 241
13.3.2 工作時(shí)序 242
13.4 DAC的寄存器描述 243
13.5 DAC的基本操作 250
13.5.1 DAC的數(shù)據(jù)結(jié)構(gòu) 250
13.5.2 DAC的操作步驟 250
13.5.3 編程實(shí)驗(yàn):方波發(fā)生器 251
思考與練習(xí) 252