RISC-V 架構(gòu)誕生于2010年,由美國加州大學(xué)伯克利分校的多位教授聯(lián)合推出。經(jīng)過十多年的發(fā)展,RISC-V 架構(gòu)得到越來越多的關(guān)注。當(dāng)前國內(nèi)外眾多院校與公司都在研究RISC-V 架構(gòu),并將其應(yīng)用于學(xué)術(shù)或工程應(yīng)用中。
目前,針對嵌入式技術(shù)與應(yīng)用的圖書多以ARM 內(nèi)核單片機為主,以STM32為基礎(chǔ)器件來介紹,而通用RISC-V 芯片與開發(fā)板較少,圖書資料更少。但是高校師生和應(yīng)用開發(fā)者都需要一本有詳細(xì)例程、可指導(dǎo)實際操作的參考書,以便快速了解RISC-V,進(jìn)行基于RISC-V芯片的應(yīng)用程序開發(fā)。
本書基于CH32V103單片機介紹RISC-V 架構(gòu)嵌入式系統(tǒng)原理與應(yīng)用。CH32V103是一款自主研發(fā)的國產(chǎn)單片機芯片,主要面向?qū)ISC-V 處理器感興趣的高校師生、有應(yīng)用需求的工程師或者研究人員。書中以應(yīng)用領(lǐng)域的實例為先導(dǎo),講述RISC-V 基礎(chǔ)知識和RISC-V 應(yīng)用案例,幫助讀者深入了解和學(xué)習(xí)使用RISC-V 處理器。主要內(nèi)容包括:RISC-V 基礎(chǔ)理論知識、軟件開發(fā)環(huán)境、基礎(chǔ)類案例、綜合類案例和應(yīng)用設(shè)計類案例,可滿足不同層次讀者的需求;從功能分析、硬件設(shè)計、軟件設(shè)計、系統(tǒng)調(diào)試對案例進(jìn)行詳細(xì)介紹,讀者可以按照書中的有關(guān)內(nèi)容完成案例的自主開發(fā),提高實踐能力。本書的應(yīng)用案例具有模塊化設(shè)計性和實用性的鮮明特色。本書部分介紹嵌入式系統(tǒng),將ARM 架構(gòu)和RISC-V 架構(gòu)進(jìn)行對比,概述RISC-V 架構(gòu)的指令集特點。第二部分介紹CH32V103單片機的軟硬件開發(fā)環(huán)境,幫助讀者迅速了解RISC-V 架構(gòu)的單片機特點,熟悉軟件應(yīng)用開發(fā)環(huán)境。第三部分介紹CH32V103單片機的外設(shè)模塊并給出應(yīng)用實例,所有應(yīng)用代碼都已經(jīng)過驗證。后一部分列舉2個綜合設(shè)計案例,藍(lán)牙加密U 盤和智能家居應(yīng)用,可以提高讀者綜合設(shè)計與開發(fā)的能力。
本書具有以下特點:
① 將單片機開發(fā)項目實戰(zhàn)的思想和方法貫穿全過程,引導(dǎo)讀者快速掌握開發(fā)實踐要旨。
② 具有從入門到實踐的屬性,詳細(xì)講解RISC-V 內(nèi)核以及CH32V103單片機,讀者可熟練掌握RISC-V 單片機開發(fā)工具的使用方法,快速搭建RISC-V 單片機進(jìn)行應(yīng)用開發(fā)。
③ 本書內(nèi)容覆蓋開發(fā)的主要環(huán)節(jié),從系統(tǒng)框圖介紹、外設(shè)模塊介紹、程序庫函數(shù)介紹到應(yīng)用實例設(shè)計,各個外設(shè)模塊均有配套實驗例程。
④ 本書配套開發(fā)板的原理圖與PCB文件、相關(guān)例程代碼可從沁恒微電子社區(qū)獲取,下載鏈接:http://www.wch.cn/bbs/forum 106-1.html。
本書的編寫得到了南京信息工程大學(xué)濱江學(xué)院橫向課題(2020H022)、南京沁恒微電子股份有限公司及北京航空航天大學(xué)出版社的大力支持或資助,在此表示衷心的感謝!
由于作者水平有限,書中的不足之處,懇請讀者批評指正。
編 者
2021年2月
第1章 嵌入式系統(tǒng)簡介 1
1.1 嵌入式系統(tǒng)概述 1
1.1.1 嵌入式系統(tǒng)特點 1
1.1.2 嵌入式系統(tǒng)發(fā)展趨勢 2
1.2 ARM 架構(gòu)介紹 3
1.2.1 ARM 的歷史背景 3
1.2.2 ARM 系列簡介 4
1.2.3 ARM 的發(fā)展趨勢 6
1.3 RISC-V架構(gòu)介紹 7
1.3.1 RISC-V架構(gòu)的歷史背景 7
1.3.2 RISC-V架構(gòu)的發(fā)展趨勢 7
本章小結(jié) 7
第2章 RISC-V指令集架構(gòu)簡介 8
2.1 RISC-V架構(gòu)設(shè)計特點 8
2.2 RISC-V架構(gòu)特性 8
2.3 RISC-V與其他架構(gòu)的比較 14
2.4 RISC-V與CH32V103的關(guān)系 15
本章小結(jié) 15
第3章 RISC-V架構(gòu)的中斷和異常 16
3.1 RISC-V中斷和異常概述 16
3.1.1 中斷概述 16
3.1.2 異常概述 16
3.2 RISC-V中斷機制 17
3.2.1 中斷類型 17
3.2.2 中斷屏蔽 17
3.2.3 中斷級別、優(yōu)先級與仲裁 18
3.2.4 進(jìn)入中斷處理 18
3.2.5 退出中斷處理 18
3.2.6 中斷嵌套 19
3.3 RISC-V異常機制 19
3.3.1 異常屏蔽 19
3.3.2 異常的優(yōu)先級 20
3.3.3 進(jìn)入異常處理模式 20
3.3.4 退出異常處理模式 20
3.3.5 異常服務(wù)程序 20
3.4 CSR寄存器介紹 21
本章小結(jié) 26
第4章 CH32V103硬件基礎(chǔ) 27
4.1 CH32系列單片機外部結(jié)構(gòu) 28
4.1.1 CH32系列單片機命名規(guī)則 28
4.1.2 CH32系列單片機引腳功能 29
4.2 CH32V103單片機內(nèi)部結(jié)構(gòu) 30
4.2.1 CH32V103單片機內(nèi)部總線結(jié)構(gòu) 30
4.2.2 CH32V103單片機內(nèi)部時鐘系統(tǒng) 32
4.2.3 CH32V103單片機內(nèi)部復(fù)位系統(tǒng) 34
4.2.4 CH32V103單片機內(nèi)部存儲器結(jié)構(gòu) 35
4.3 CH32V103小系統(tǒng)設(shè)計 36
本章小結(jié) 38
第5章 CH32V103軟件開發(fā)環(huán)境 39
5.1 開發(fā)軟件MRS簡介與安裝 39
5.2 軟件環(huán)境 42
5.3 創(chuàng)建項目 43
5.4 編譯代碼 45
5.5 下載代碼 51
5.6 調(diào)試代碼 52
本章小結(jié) 55
第6章 CH32單片機的輸入/輸出接口GPIO 56
6.1 GPIO主要特征 56
6.2 GPIO功能說明 58
6.2.1 工作模式 58
6.2.2 外部中斷 58
6.2.3 復(fù)用功能 58
6.2.4 鎖定機制 59
6.3 GPIO庫函數(shù) 59
6.4 GPIO使用流程 63
6.4.1 普通GPIO配置 63
6.4.2 引腳復(fù)用功能配置 63
6.5 項目實戰(zhàn):流水燈 66
6.5.1 硬件設(shè)計 66
6.5.2 軟件設(shè)計 66
6.5.3 系統(tǒng)調(diào)試 68
本章小結(jié) 69
第7章 CH32單片機外部中斷EXTI 70
7.1 CH32V103中斷系統(tǒng)組成結(jié)構(gòu) 70
7.1.1 中斷源及中斷向量 70
7.1.2 外部中斷系統(tǒng)結(jié)構(gòu) 73
7.2 中斷控制 74
7.2.1 中斷屏蔽控制 74
7.2.2 中斷優(yōu)先級控制 75
7.3 中斷控制常用庫函數(shù)介紹 76
7.3.1 快速可編程中斷控制器庫函數(shù) 76
7.3.2 CH32V103外部中斷EXTI庫函數(shù) 78
7.4 外部中斷使用流程 82
7.4.1 PFIC配置 82
7.4.2 中斷端口設(shè)置 82
7.4.3 中斷處理 83
7.5 項目實戰(zhàn):按鍵中斷控制LED燈 84
7.5.1 硬件設(shè)計 84
7.5.2 軟件設(shè)計 84
7.5.3 系統(tǒng)調(diào)試 89
本章小結(jié) 89
第8章 通用同步異步收發(fā)器USART 90
8.1 串行通信簡介 90
8.1.1 串行通信與并行通信 90
8.1.2 單工通信、半雙工通信與雙工通信 91
8.1.3 同步通信與異步通信 91
8.1.4 串行異步通信的數(shù)據(jù)傳輸格式 91
8.2 USART的結(jié)構(gòu)及工作方式 92
8.2.1 結(jié)構(gòu)框圖 92
8.2.2 工作模式 94
8.2.3 CH32V103串行異步通信的工作方式 95
8.3 常用庫函數(shù)介紹 96
8.4 使用流程 103
8.5 項目實戰(zhàn):串口數(shù)據(jù)查詢方式收發(fā) 104
8.5.1 硬件設(shè)計 104
8.5.2 軟件設(shè)計 105
8.5.3 系統(tǒng)調(diào)試 107
本章小結(jié) 108
第9章 定時器TIM 109
9.1 CH32V103定時器概述 109
9.1.1 定時器類型 109
9.1.2 計數(shù)模式 110
9.1.3 主要功能介紹 110
9.2 CH32V103通用定時器的結(jié)構(gòu) 111
9.2.1 輸入時鐘 112
9.2.2 核心計數(shù)器 112
9.2.3 比較捕獲通道 112
9.2.4 通用定時器的功能寄存器 113
9.2.5 通用定時器的外部觸發(fā)及輸入/輸出通道 113
9.3 CH32V103通用定時器的功能 113
9.3.1 輸入捕獲模式 114
9.3.2 比較輸出模式 114
9.3.3 強制輸出模式 115
9.3.4 PWM 輸入模式 115
9.3.5 PWM 輸出模式 115
9.3.6 單脈沖模式 116
9.3.7 編碼器模式 116
9.3.8 定時器同步模式 117
9.3.9 調(diào)試模式 117
9.4 通用定時器常用庫函數(shù) 117
9.5 通用定時器使用流程 128
9.5.1 PFIC設(shè)置 128
9.5.2 定時器中斷配置 128
9.5.3 定時器中斷處理 129
9.6 項目實戰(zhàn)1:精確定時實驗 129
9.6.1 硬件設(shè)計 129
9.6.2 軟件設(shè)計 129
9.6.3 系統(tǒng)調(diào)試 131
9.7 項目實戰(zhàn)2:脈寬調(diào)制 131
9.7.1 硬件設(shè)計 131
9.7.2 軟件設(shè)計 132
9.7.3 系統(tǒng)調(diào)試 133
本章小結(jié) 134
第10章 看門狗定時器 135
10.1 CH32V103看門狗概述 135
10.2 獨立看門狗 135
10.2.1 獨立看門狗主要特征 135
10.2.2 獨立看門狗結(jié)構(gòu)框圖 136
10.3 窗口看門狗 136
10.3.1 窗口看門狗主要特征 136
10.3.2 窗口看門狗結(jié)構(gòu)框圖 136
10.3.3 窗口看門狗功能說明 137
10.4 常用庫函數(shù)介紹 138
10.5 看門狗使用流程 144
10.5.1 獨立看門狗使用流程 144
10.5.2 窗口看門狗使用流程 144
10.6 項目實戰(zhàn)1:獨立看門狗應(yīng)用 145
10.6.1 硬件設(shè)計 145
10.6.2 軟件設(shè)計 145
10.6.3 系統(tǒng)調(diào)試 148
10.7 項目實戰(zhàn)2:窗口看門狗應(yīng)用 149
10.7.1 硬件設(shè)計 149
10.7.2 軟件設(shè)計 149
10.7.3 系統(tǒng)調(diào)試 153
本章小結(jié) 153
第11章 直接存儲器訪問控制DMA 154
11.1 CH32V103的DMA控制器 154
11.2 DMA功能描述 155
11.2.1 仲裁優(yōu)先級 155
11.2.2 DMA配置 155
11.2.3 循環(huán)模式 156
11.2.4 DMA處理狀態(tài) 156
11.2.5 可編程的數(shù)據(jù)傳輸總量/數(shù)據(jù)位寬/對齊方式 156
11.2.6 DMA請求映射 156
11.3 DMA常用庫函數(shù) 158
11.4 DMA使用流程 163
11.4.1 PFIC設(shè)置 163
11.4.2 DMA模式及中斷配置 163
11.4.3 DMA中斷服務(wù)程序 164
11.5 項目實戰(zhàn):DMA存儲器到存儲器 164
11.5.1 硬件設(shè)計 164
11.5.2 軟件設(shè)計 164
11.5.3 系統(tǒng)調(diào)試 168
本章小結(jié) 168
第12章 串行設(shè)備通信接口SPI 169
12.1 SPI總線通信簡介 169
12.1.1 SPI總線的組成 169
12.1.2 SPI總線的功能 170
12.2 SPI結(jié)構(gòu)框圖 170
12.3 SPI功能描述 171
12.3.1 從選擇管理 171
12.3.2 時鐘相位與極性 172
12.3.3 主模式 173
12.3.4 從模式 173
12.3.5 單工模式 173
12.3.6 CRC校驗 174
12.3.7 DMA的SPI通信 174
12.3.8 錯誤狀態(tài) 174
12.3.9 中 斷 174
12.4 SPI常用庫函數(shù) 175
12.5 SPI使用流程 181
12.6 項目實戰(zhàn):W25Q16讀寫實驗 182
12.6.1 硬件設(shè)計 183
12.6.2 軟件設(shè)計 183
12.6.3 系統(tǒng)調(diào)試 189
本章小結(jié) 189
第13章 內(nèi)部集成電路總線I2C 190
13.1 I2C總線通信簡介 190
13.1.1 I2C總線特點 190
13.1.2 I2C總線術(shù)語 191
13.1.3 I2C物理層 191
13.1.4 I2C協(xié)議層 192
13.1.5 數(shù)據(jù)傳輸格式 193
13.2 CH32V103的I2C功能與結(jié)構(gòu)框圖 195
13.3 I2C的通信模式 196
13.3.1 主模式 196
13.3.2 從模式 198
13.3.3 錯 誤 199
13.3.4 時鐘延長 199
13.3.5 SMBus 200
13.3.6 DMA 200
13.3.7 中 斷 201
13.3.8 包錯誤校驗 202
13.4 I2C常用庫函數(shù)介紹 202
13.5 I2C使用流程 213
13.6 項目實戰(zhàn):讀寫EEPROM 芯片AT24C02 213
13.6.1 硬件設(shè)計 213
13.6.2 軟件設(shè)計 217
13.6.3 系統(tǒng)調(diào)試 221
本章小結(jié) 222
第14章 實時時鐘RTC 223
14.1 CH32V103的RTC概述 223
14.1.1 CH32V103的RTC 223
14.1.2 UNIX時間戳 223
14.2 RTC結(jié)構(gòu)框圖 224
14.3 常用庫函數(shù)介紹 225
14.4 使用流程 230
14.5 項目實戰(zhàn):利用RTC實現(xiàn)萬年歷 231
14.5.1 硬件設(shè)計 231
14.5.2 軟件設(shè)計 232
14.5.3 系統(tǒng)調(diào)試 238
本章小結(jié) 238
第15章 循環(huán)冗余校驗CRC 239
15.1 CRC校驗概述 239
15.2 CH32V103中的CRC計算單元 239
15.2.1 主要特征 239
15.2.2 功能描述 239
15.2.3 結(jié)構(gòu)框圖 240
15.3 CRC應(yīng)用 240
15.4 常用庫函數(shù)介紹 240
15.5 項目實戰(zhàn):CRC數(shù)據(jù)校驗 243
15.5.1 硬件設(shè)計 243
15.5.2 軟件設(shè)計 243
15.5.3 系統(tǒng)調(diào)試 244
本章小結(jié) 244
第16章 模/數(shù)轉(zhuǎn)換器ADC 245
16.1 ADC概述 245
16.1.1 ADC分類 245
16.1.2 ADC性能指標(biāo) 245
16.2 CH32V103的ADC簡介 246
16.3 CH32V103的ADC結(jié)構(gòu)框圖 246
16.4 ADC的功能描述 248
16.4.1 開關(guān)、時鐘及通道 248
16.4.2 轉(zhuǎn)換模式控制 249
16.4.3 中斷和DMA請求 250
16.4.4 其他功能 251
16.5 ADC常用庫函數(shù)介紹 253
16.6 ADC使用流程 269
16.7 項目實戰(zhàn):外部電壓采集 269
16.7.1 硬件設(shè)計 269
16.7.2 軟件設(shè)計 270
16.7.3 系統(tǒng)調(diào)試 272
本章小結(jié) 273
第17章 USB全速主機/設(shè)備控制器USBHD 274
17.1 USB簡介及協(xié)議基礎(chǔ) 274
17.1.1 USB簡介 274
17.1.2 USB的電氣特性 274
17.1.3 USB的插入檢測機制 274
17.1.4 USB的描述符 275
17.1.5 USB包的結(jié)構(gòu) 276
17.1.6 USB的四種傳輸類型 277
17.2 CH32V103的USBHD主要特征 278
17.3 功能說明 278
17.3.1 USB全局寄存器 278
17.3.2 USB設(shè)備控制寄存器 278
17.3.3 USB主機控制寄存器 279
17.4 庫函數(shù)介紹 279
17.5 項目實戰(zhàn)1:U盤文件讀寫 282
17.5.1 硬件設(shè)計 282
17.5.2 軟件設(shè)計 282
17.5.3 系統(tǒng)調(diào)試 286
17.6 項目實戰(zhàn)2:實現(xiàn)CDC串口 287
17.6.1 硬件設(shè)計 287
17.6.2 軟件設(shè)計 287
17.6.3 系統(tǒng)調(diào)試 288
本章小結(jié) 289
第18章 綜合案例:藍(lán)牙加密U盤 290
18.1 藍(lán)牙加密U盤介紹 290
18.2 CH573簡介 290
18.2.1 概 述 290
18.2.2 功能說明 291
18.2.3 系統(tǒng)框圖 292
18.2.4 無線通信介紹 293
18.3 CH569簡介 293
18.3.1 CH569概述 293
18.3.2 功能說明 293
18.3.3 系統(tǒng)框圖 294
18.3.4 SD/EMMC控制器介紹 296
18.3.5 USB 3.0控制器介紹 296
18.4 硬件設(shè)計 296
18.5 軟件設(shè)計 299
18.6 系統(tǒng)調(diào)試 304
18.6.1 CH573程序下載 304
18.6.2 藍(lán)牙調(diào)試 306
18.6.3 U盤功能測試 308
本章小結(jié) 308
第19章 行業(yè)應(yīng)用案例實戰(zhàn):智能家居應(yīng)用 309
19.1 機智云物聯(lián)網(wǎng)開發(fā)步驟 309
19.1.1 創(chuàng)建新項目 309
19.1.2 安裝手機App 311
19.1.3 自動生成代碼 313
19.1.4 虛擬設(shè)備調(diào)試 314
19.1.5 Wi Fi模塊固件燒錄 316
19.1.6 移植機智云代碼 317
19.1.7 App綁定設(shè)備 317
19.2 功能分析 318
19.3 硬件設(shè)計 318
19.4 軟件設(shè)計 319
19.4.1 主程序功能軟件設(shè)計 319
19.4.2 溫濕度檢測軟件設(shè)計 319
19.4.3 機智云控制設(shè)計 321
19.4.4 物聯(lián)網(wǎng)功能實現(xiàn) 321
19.5 系統(tǒng)調(diào)試 322
本章小結(jié) 324
附錄A RISC-V偽指令集 325
附錄B RISC-V寄存器介紹 327
B1 通用寄存器 327
B2 控制和狀態(tài)寄存器 328
附錄C RISC-V指令編碼列表 336
C1 RV32I指令編碼 336
C2 RV32M指令編碼 337
C3 RV32F指令編碼 337
C4 RV32A指令編碼 338
C5 RV32D指令編碼 338
C6 RV32Q指令編碼 339
C7 RV32C指令編碼 339
參考文獻(xiàn) 341