嵌入式微處理器程序設(shè)計——從Arduino到ARM
本書以開源硬件平臺Arduino Due為教學實驗平臺,以ARM芯片SAM3X8E為對象,介紹了ARM微處理器編程的方法和流程。本書內(nèi)容包括ARM微處理器的發(fā)展歷史、應(yīng)用領(lǐng)域、分類以及ARM微處理器的軟件開發(fā)工具和硬件開發(fā)工具,涵蓋了ARM微處理器的兩種編程模式:Arduino編程和ARM編程。本書內(nèi)容由易到難,講解循序漸進,并且提供了大量翔實的應(yīng)用實例供讀者參考,所有實例都給出了完整的程序。
本書取材新穎、內(nèi)容豐富、重點突出、深入淺出、富有啟發(fā)性和可操作性,便于教學,可為初學者提供學習參考。本書既可以作為高等院校電子、通信、自動化以及計算機等相關(guān)專業(yè)的教材,也可以作為相關(guān)領(lǐng)域工程技術(shù)人員的培訓用書或參考手冊。
本書特色
(1)本書將 Arduino 編程與 ARM 編程有機地結(jié)合起來,有效發(fā)揮二者的優(yōu)勢,揚長避短。
(2)無論是 ARM 編程還是 Arduino 編程,本書都為讀者設(shè)計了大量的實例以供練習與實踐。
(3)本書中的 Arduino 實例與 ARM 實例是互通的,這有利于讀者對照學習,了解 Arduino 編程的實現(xiàn)過程。
(4)本書綜合了 ARM 微處理器的兩種編程模式,且過渡自然。
(5)本書提供PPT、教案、教學大綱、源代碼等教輔資源,助力高校教師高效教學。
特別說明
1. 嵌入式系統(tǒng)開發(fā)直接上來就講解ARM編程,難度過大,讀者很難接受,特別是二本、三本院校的學生。本書則是先介紹Arduino編程,然后介紹ARM編程,這樣有利于讀者逐步深入學習;而且本書將2種編程模式緊密結(jié)合,過渡自然。
2. 嵌入式系統(tǒng)開發(fā)課程具有較強的操作實踐性,為此,本書針對每章的知識點都設(shè)計了操作實例以服務(wù)案例教學。
3. 本書中的Arduino編程實例與ARM編程實例是互通的,有利于讀者對照學習,了解Arduino的實現(xiàn)過程并掌握ARM的實現(xiàn)原理。
唐光義:
男,副教授,任教于哈爾濱理工大學計算機科學與技術(shù)學院,主持并完成多個省級和校級的教學改革項目,主持并完成多個橫向科研項目,出版教材一部,公開發(fā)表學術(shù)論文20余篇;具有多年從事嵌入式系統(tǒng)開發(fā)、分布式系統(tǒng)開發(fā)的實戰(zhàn)經(jīng)驗,一直在一線教學崗位任教,對于當前學校的教學狀態(tài)、學生能力素質(zhì)培養(yǎng)和學生學習興趣激發(fā)有比較全面的了解。
【章名目錄】
01 初識ARM微處理器 1
02 Arduino Due簡介 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ù)器TC 182
11 UART 199
12 ADC 216
13 DAC 237
【詳細目錄】
01 初識ARM微處理器 1
1.1 ARM微處理器概述 1
1.1.1 ARM公司的發(fā)展歷史 2
1.1.2 ARM微處理器的架構(gòu) 3
1.1.3 ARM微處理器的特點 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ā)方法簡介 13
1.3.1 基于Arduino的應(yīng)用開發(fā) 13
1.3.2 基于CMSIS的應(yīng)用開發(fā) 14
思考與練習 16
02 Arduino Due簡介 17
2.1 Arduino Due概述 17
2.2 功能特點 18
2.3 參數(shù)規(guī)格 19
2.4 硬件平臺的結(jié)構(gòu) 20
2.4.1 元件布局 20
2.4.2 連接器 20
2.4.3 跳線器 21
2.5 硬件電路的設(shè)計原理 21
2.5.1 微處理器電路 21
2.5.2 電源電路 23
2.5.3 復(fù)位電路 25
2.5.4 時鐘源電路 25
2.5.5 LED顯示電路 25
2.5.6 JTAG接口電路 26
2.5.7 SWD接口電路 26
2.5.8 電源擴展接口電路 27
2.5.9 I/O擴展接口電路 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
思考與練習 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 語法符號 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入門項目——Blink 48
3.4.1 實驗材料 48
3.4.2 硬件電路 48
3.4.3 連接硬件電路并安裝驅(qū)動 48
3.4.4 編輯程序 50
3.4.5 設(shè)置開發(fā)板及串行通信接口 50
3.4.6 編譯程序 51
3.4.7 下載并運行程序 51
思考與練習 52
04 基于Arduino的應(yīng)用開發(fā) 53
4.1 數(shù)字量I/O 53
4.1.1 數(shù)字量I/O函數(shù) 53
4.1.2 編程實驗:鍵控流水燈 54
4.2 模擬量I/O 56
4.2.1 模擬量輸入函數(shù) 56
4.2.2 編程實驗:光強度自動報警系統(tǒng) 57
4.2.3 模擬量輸出函數(shù) 58
4.2.4 編程實驗:簡易調(diào)色LED燈 59
4.2.5 編程實驗:三角波發(fā)生器 61
4.3 串行通信 61
4.3.1 串行通信接口函數(shù) 62
4.3.2 編程實驗:回音壁 66
4.4 中斷處理 67
4.4.1 中斷處理函數(shù) 67
4.4.2 編程實驗:鍵控LED燈 68
4.4.3 編程實驗:中斷方式的回音壁 69
4.4.4 編程實驗:控制中斷 70
4.5 其他功能函數(shù) 72
4.5.1 時間函數(shù) 72
4.5.2 高級I/O操作函數(shù) 72
4.5.3 編程實驗:測量程序的執(zhí)行時間 73
4.5.4 編程實驗:74HC595芯片驅(qū)動多路LED燈 74
思考與練習 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)境簡介 81
5.3.2 簡單工程示例 86
思考與練習 95
06 Cortex-M3微處理器 96
6.1 Cortex-M3微處理器內(nèi)核 96
6.1.1 Cortex-M3微處理器內(nèi)核簡介 98
6.1.2 三級流水線 99
6.1.3 總線系統(tǒng) 100
6.2 Cortex-M3微處理器工作模式和訪問級別 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 存儲器系統(tǒng) 109
6.4.1 存儲器映射 109
6.4.2 位帶操作 110
6.4.3 非對齊數(shù)據(jù)傳送 113
思考與練習 113
07 Thumb-2指令集 114
7.1 Thumb-2指令集概述 114
7.2 尋址方式 116
7.3 Thumb-2指令集分類 121
7.4 Thumb-2常用指令詳細介紹 122
7.4.1 數(shù)據(jù)傳送指令 122
7.4.2 存儲器訪問指令 123
7.4.3 算術(shù)運算指令 126
7.4.4 邏輯運算指令 130
7.4.5 比較和測試指令 131
7.4.6 子程序調(diào)用與無條件轉(zhuǎn)移指令 132
7.4.7 移位指令 134
7.4.8 符號擴展指令 134
7.4.9 字節(jié)調(diào)序指令 135
7.4.10 位操作指令 136
7.4.11 飽和運算指令 137
7.4.12 隔離指令 139
7.4.13 If-Then指令 140
思考與練習 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 編程實驗:鍵控燈 154
思考與練習 156
09 異常處理 157
9.1 異常類型 158
9.2 異常優(yōu)先級 164
9.2.1 優(yōu)先級的定義 164
9.2.2 優(yōu)先級分組 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 編程實驗:定時閃爍燈 179
思考與練習 181
10 定時/計數(shù)器TC 182
10.1 定時/計數(shù)器概述 182
10.2 定時/計數(shù)器的工作原理 184
10.2.1 定時/計數(shù)器工作模式 184
10.2.2 時鐘的選擇和控制 185
10.2.3 觸發(fā)器 187
10.2.4 捕獲模式 187
10.2.5 波形模式 188
10.3 定時/計數(shù)器的寄存器描述 194
10.4 定時/計數(shù)器的基本操作 195
10.4.1 定時/計數(shù)器的數(shù)據(jù)結(jié)構(gòu) 195
10.4.2 定時/計數(shù)器的操作步驟 196
10.4.3 編程實驗:呼吸燈 196
思考與練習 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 編程實驗:回音壁 213
思考與練習 215
12 ADC 216
12.1 ADC概述 216
12.1.1 ADC的工作原理 216
12.1.2 ADC的分類和特點 217
12.1.3 ADC的主要技術(shù)指標 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 基本信號描述 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 編程實驗:電壓表 233
思考與練習 236
13 DAC 237
13.1 DAC概述 237
13.1.1 DAC的工作原理 237
13.1.2 DAC的分類 238
13.1.3 DAC的主要技術(shù)指標 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 基本信號描述 240
13.3 DAC的基本功能 241
13.3.1 數(shù)模轉(zhuǎn)換過程 241
13.3.2 工作時序 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 編程實驗:方波發(fā)生器 251
思考與練習 252