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