RISC-V架構(gòu)與嵌入式開發(fā)快速入門
定 價:79 元
- 作者:胡振波
- 出版時間:2019/1/1
- ISBN:9787115494139
- 出 版 社:人民郵電出版社
- 中圖法分類:TP332
- 頁碼:352
- 紙張:
- 版次:01
- 開本:16開
本書是一本介紹RISC-V架構(gòu)嵌入式開發(fā)的入門書籍,以通俗的語言系統(tǒng)介紹了嵌入式開發(fā)的基礎(chǔ)知識和RISC-V架構(gòu)的內(nèi)容,力求幫助讀者快速掌握RISC-V架構(gòu)的嵌入式開發(fā)技術(shù)。
本書共分為兩部分。第一部分為第1~14章,基本涵蓋了使用RISC-V架構(gòu)進行嵌入式開發(fā)所需的所有關(guān)鍵知識。第二部分為附錄部分,詳細介紹了RISC-V指令集架構(gòu),輔以作者加入的背景知識解讀和注解,以便于讀者理解。
為了促進RISC-V在國內(nèi)的普及,尤其是被廣大初學(xué)者接受和快速入門,本書將分享和總結(jié)一些使用RISC-V進行嵌入式開發(fā)的相關(guān)技術(shù)和經(jīng)驗,主要面向?qū)ISC-V感興趣的入門用戶,包括嵌入式軟件開發(fā)和硬件設(shè)計人員。
本書的姊妹版《手把手教你設(shè)計CPU——RISC-V處理器篇》已經(jīng)出版,提供了一個非常高效的超低功耗開源RISC-V處理器學(xué)習(xí)案例——蜂鳥E203,并對其進行了全方面剖析和講解,解決了在CPU硬件設(shè)計方面中文資料欠缺的問題。
胡振波,本科畢業(yè)于上海交通大學(xué)電子工程系,碩士畢業(yè)于上海交通大學(xué)微電子學(xué)院。擁有多年ASIC和CPU設(shè)計與驗證經(jīng)驗,曾在Marvell公司任ARM架構(gòu)CPU設(shè)計高級工程師,在Synopsys公司任研發(fā)經(jīng)理,在比特大陸公司任IC設(shè)計總監(jiān),在武漢聚芯微電子公司任架構(gòu)師,現(xiàn)致力于RISC-V架構(gòu)在國內(nèi)的傳播和發(fā)展。他開發(fā)并開源了蜂鳥E203超低功耗RISC-V處理器內(nèi)核。
第 1章 進入32位時代,誰能成為下一個8051 1
1.1 磨刀不誤砍柴工—CPU基礎(chǔ)知識介紹 1
1.1.1 ISA—CPU的靈魂 2
1.1.2 CISC與RISC 3
1.1.3 32位與64位架構(gòu) 4
1.1.4 ISA眾生相 5
1.1.5 CPU的領(lǐng)域之分 9
1.1.6 8位時代的傳奇“前輩”—8051 10
1.1.7 IoT的崛起—32位時代的到來 11
1.2 無敵是多么寂寞—ARM統(tǒng)治著的世界 11
1.2.1 獨樂樂與眾樂樂—ARM公司的盈利模式 12
1.2.2 小個子有大力量—無處不在的Cortex-M系列 14
1.2.3 移動王者—Cortex-A系列在手持設(shè)備領(lǐng)域的巨大成功 16
1.2.4 進擊的巨人—ARM進軍PC與服務(wù)器領(lǐng)域的雄心 18
1.2.5 游戲終結(jié)者之ARM 19
1.3 東邊日出西邊雨,道是無晴卻有晴—RISC-V登場 19
1.4 RISC-V和其他開放架構(gòu)有何不同 21
1.4.1 “平民英雄”—OpenRISC 22
1.4.2 “豪門顯貴”—SPARC 22
1.4.3 “名校優(yōu)生”—RISC-V 23
1.5 結(jié)語:進入32位時代,誰能成為深嵌入式領(lǐng)域的下一個8051? 23
第 2章 開源蜂鳥E203超低功耗RISC-V Core與SoC 25
2.1 亂花漸欲迷人眼 25
2.2 與眾不同的蜂鳥E203處理器 25
2.3 蜂鳥雖小,五臟俱全—蜂鳥E203簡介 26
2.4 蜂鳥E203性能指標 27
2.5 蜂鳥E203配套SoC 28
第3章 大道至簡—RISC-V架構(gòu)之魂 29
3.1 簡單就是美—RISC-V架構(gòu)的設(shè)計哲學(xué) 29
3.1.1 無病一身輕—架構(gòu)的篇幅 30
3.1.2 能屈能伸—模塊化的指令集 31
3.1.3 濃縮的都是精華—指令的數(shù)量 31
3.2 RISC-V指令集架構(gòu)簡介 32
3.2.1 模塊化的指令子集 32
3.2.2 可配置的通用寄存器組 33
3.2.3 規(guī)整的指令編碼 33
3.2.4 簡潔的存儲器訪問指令 34
3.2.5 高效的分支跳轉(zhuǎn)指令 35
3.2.6 簡潔的子程序調(diào)用 36
3.2.7 無條件碼執(zhí)行 36
3.2.8 無分支延遲槽 37
3.2.9 零開銷硬件循環(huán) 37
3.2.10 簡潔的運算指令 38
3.2.11 優(yōu)雅的壓縮指令子集 38
3.2.12 特權(quán)模式 39
3.2.13 CSR寄存器 40
3.2.14 中斷和異常 40
3.2.15 矢量指令子集 40
3.2.16 自定制指令擴展 40
3.2.17 總結(jié)與比較 41
第4章 RISC-V架構(gòu)的中斷和異常 43
4.1 中斷和異常概述 43
4.1.1 中斷概述 43
4.1.2 異常概述 44
4.1.3 廣義上的異常 44
4.2 RISC-V架構(gòu)異常處理機制 46
4.2.1 進入異常 47
4.2.2 退出異常 50
4.2.3 異常服務(wù)程序 50
4.3 RISC-V架構(gòu)中斷定義 51
4.3.1 中斷類型 51
4.3.2 中斷屏蔽 54
4.3.3 中斷等待 55
4.3.4 中斷優(yōu)先級與仲裁 55
4.3.5 中斷嵌套 56
4.3.6 總結(jié)比較 57
4.4 RISC-V架構(gòu)異常相關(guān)CSR寄存器 57
4.5 蜂鳥E203的中斷和異常實現(xiàn) 58
第5章 開源蜂鳥E203 MCU SoC總體介紹 59
5.1 Freedom E310 SoC簡介 59
5.2 蜂鳥E203 MCU SoC簡介 60
5.3 蜂鳥E203 MCU SoC框圖 60
5.4 蜂鳥E203 MCU SoC存儲資源 61
5.4.1 片上存儲資源 61
5.4.2 片外Flash存儲資源 61
5.5 蜂鳥E203 MCU SoC外設(shè)資源 62
5.6 蜂鳥E203 MCU SoC地址分配 62
5.7 蜂鳥E203 MCU SoC時鐘域劃分 63
5.8 蜂鳥E203 MCU SoC電源域劃分 64
5.9 蜂鳥E203 MCU SoC低功耗模式 64
5.10 蜂鳥E203 MCU SoC的全局復(fù)位 65
5.11 蜂鳥E203 MCU SoC的上電流程控制 66
5.12 蜂鳥E203 MCU SoC芯片引腳表 67
5.13 蜂鳥E203 MCU SoC的GPIO引腳分配 68
5.14 蜂鳥E203 MCU SoC的中斷處理 70
5.14.1 蜂鳥E203處理器核的異常和中斷處理 70
5.14.2 蜂鳥E203處理器的中斷接口 71
5.14.3 CLINT模塊生成計時器中斷和軟件中斷 72
5.14.4 PLIC管理多個外部中斷 73
第6章 開源蜂鳥E203 MCU SoC外設(shè)介紹 77
6.1 蜂鳥E203 MCU SoC外設(shè)總述 77
6.2 PLIC 78
6.3 CLINT 78
6.4 LCLKGEN 78
6.4.1 LCLKGEN簡介 78
6.4.2 LCLKGEN寄存器列表 78
6.5 HCLKGEN 79
6.5.1 HCLKGEN簡介 79
6.5.2 HCLKGEN寄存器列表 79
6.6 GPIO 79
6.6.1 GPIO特性 79
6.6.2 GPIO寄存器列表 80
6.6.3 I/O結(jié)構(gòu)和IOF模式 80
6.6.4 SoC各外設(shè)復(fù)用GPIO引腳 83
6.6.5 GPIO中斷 83
6.6.6 GPIO_VALUE寄存器 84
6.6.7 GPIO_INPUT_EN寄存器 84
6.6.8 GPIO_OUTPUT_EN寄存器 85
6.6.9 GPIO_PORT寄存器 85
6.6.10 GPIO_PUE寄存器 85
6.6.11 GPIO_DS寄存器 85
6.6.12 GPIO_OUTPUT_XOR寄存器 85
6.6.13 GPIO_RISE_IE、GPIO_RISE_IP等寄存器 85
6.7 SPI 86
6.7.1 SPI背景知識簡介 86
6.7.2 SPI特性 88
6.7.3 SPI寄存器列表 89
6.7.4 SPI接口數(shù)據(jù)線 90
6.7.5 通過SPI_SCKDIV寄存器配置SCK時鐘頻率 90
6.7.6 通過SPI_SCKMODE寄存器配置SCK的極性與相位 90
6.7.7 通過SPI_CSID寄存器配置SPI使能信號 92
6.7.8 通過SPI_CSDEF寄存器配置使能信號的空閑值 92
6.7.9 通過SPI_CSMODE寄存器配置使能信號的行為 92
6.7.10 通過SPI_DELAY0和SPI_DELAY1寄存器配置使能信號的行為 93
6.7.11 通過SPI_FCTRL寄存器使能QSPI0的Flash XiP模式 94
6.7.12 通過SPI_FFMT寄存器控制QSPI0讀取外部Flash 95
6.7.13 通過SPI_FMT寄存器配置傳輸參數(shù) 97
6.7.14 通過SPI_TXDATA寄存器發(fā)送數(shù)據(jù) 97
6.7.15 通過SPI_RXDATA寄存器接收數(shù)據(jù) 98
6.7.16 通過SPI_TXMARK寄存器配置發(fā)送中斷閾值 100
6.7.17 通過SPI_RXMARK寄存器配置接收中斷閾值 100
6.7.18 通過SPI_IE和SPI_IP寄存器控制中斷 101
6.8 I2C 102
6.8.1 I2C背景知識簡介 102
6.8.2 I2C特性 103
6.8.3 I2C寄存器列表 103
6.8.4 I2C接口數(shù)據(jù)線 104
6.8.5 通過I2C_PRERlo和I2C_PRERhi寄存器配置SCL時鐘頻率 104
6.8.6 通過I2C_CTR寄存器配置功能和中斷使能 104
6.8.7 I2C模塊產(chǎn)生中斷 105
6.8.8 通過I2C_TXR和I2C_RXR寄存器發(fā)送和接收數(shù)據(jù) 105
6.8.9 通過I2C_CR和I2C_SR寄存器發(fā)起命令和查看狀態(tài) 106
6.8.10 初始化I2C模塊的序列 107
6.8.11 通過I2C模塊向外部從設(shè)備寫數(shù)據(jù)的常用序列 107
6.8.12 通過I2C模塊從外部從設(shè)備讀數(shù)據(jù)的常用序列 108
6.9 UART 109
6.9.1 UART背景知識簡介 109
6.9.2 UART特性 110
6.9.3 UART寄存器列表 110
6.9.4 UART接口數(shù)據(jù)線 111
6.9.5 通過UART_TXDATA寄存器發(fā)送數(shù)據(jù) 111
6.9.6 通過UART_RXDATA寄存器接收數(shù)據(jù) 112
6.9.7 通過UART_TXCTRL寄存器進行發(fā)送控制 113
6.9.8 通過UART_RXCTRL寄存器進行接收控制 113
6.9.9 通過UART_IE和UART_IP寄存器控制中斷 114
6.9.10 通過UART_DIV寄存器配置波特率 115
6.10 PWM 116
6.10.1 PWM背景知識簡介 116
6.10.2 PWM特性和結(jié)構(gòu)圖 116
6.10.3 PWM寄存器列表 117
6.10.4 通過PWMCFG寄存器進行配置 118
6.10.5 計數(shù)器計數(shù)值PWMCOUNT寄存器和PWM周期 119
6.10.6 計數(shù)器比較值PWMS寄存器 120
6.10.7 PWM接口數(shù)據(jù)線 121
6.10.8 產(chǎn)生左對齊或者右對齊的脈沖信號 121
6.10.9 產(chǎn)生居中對齊的脈沖信號 122
6.10.10 配置pwmcmpgang結(jié)連產(chǎn)生任意形狀的脈沖信號 124
6.10.11 配置pwmdeglitch防止輸出毛刺 124
6.10.12 PWM產(chǎn)生中斷 124
6.11 WDT 125
6.11.1 WDT背景知識簡介 125
6.11.2 WDT特性和結(jié)構(gòu)圖 125
6.11.3 WDT寄存器列表 126
6.11.4 通過WDOGCFG寄存器進行配置 127
6.11.5 計數(shù)器計數(shù)值WDOGCOUNT寄存器 128
6.11.6 通過WDOGKEY寄存器解鎖 128
6.11.7 通過WDOGFEED寄存器喂狗 129
6.11.8 計數(shù)器比較值WDOGS寄存器 129
6.11.9 通過WDOGCMP寄存器配置閾值 130
6.11.10 WDT產(chǎn)生全局復(fù)位 130
6.11.11 WDT產(chǎn)生中斷 130
6.12 RTC 131
6.12.1 RTC背景知識簡介 131
6.12.2 RTC特性和結(jié)構(gòu)圖 131
6.12.3 RTC寄存器列表 131
6.12.4 通過RTCCFG寄存器進行配置 132
6.12.5 計數(shù)器計數(shù)值RTCHI/RTCLO寄存器 133
6.12.6 計數(shù)器比較值RTCS寄存器 133
6.12.7 通過RTCCMP寄存器配置閾值 134
6.12.8 RTC產(chǎn)生中斷 134
6.13 PMU 134
6.13.1 PMU背景知識簡介 134
6.13.2 PMU特性和結(jié)構(gòu)圖 135
6.13.3 PMU寄存器列表 136
6.13.4 通過PMUKEY寄存器解鎖 136
6.13.5 通過PMUSLEEP寄存器進入休眠模式 137
6.13.6 通過PMUSLEEPI寄存器配置休眠指令序列 137
6.13.7 通過PMUBACKUP寄存器保存關(guān)鍵信息 139
6.13.8 通過PMUIE寄存器配置喚醒條件 139
6.13.9 通過PMUWAKEUPI寄存器配置喚醒指令序列 140
6.13.10 通過PMUCAUSE寄存器查看喚醒原因 141
第7章 開源蜂鳥E203 MCU開發(fā)板與調(diào)試器 143
7.1 蜂鳥E203 MCU開發(fā)板 143
7.2 蜂鳥E203 JTAG調(diào)試器 143
第8章 編譯過程簡介 145
8.1 GCC工具鏈介紹 145
8.1.1 GCC工具鏈概述 145
8.1.2 Binutils 146
8.1.3 C運行庫 147
8.1.4 GCC命令行選項 148
8.2 準備工作 148
8.2.1 Linux安裝 148
8.2.2 準備Hello World程序 148
8.3 編譯過程 149
8.3.1 預(yù)處理 149
8.3.2 編譯 150
8.3.3 匯編 150
8.3.4 鏈接 151
8.3.5 一步到位的編譯 153
8.4 分析ELF文件 153
8.4.1 ELF文件介紹 153
8.4.2 ELF文件的段 154
8.4.3 查看ELF文件 154
8.4.4 反匯編 155
8.5 嵌入式系統(tǒng)編譯的特殊性 156
8.6 本章小結(jié) 156
第9章 嵌入式開發(fā)特點與RISC-V GCC工具鏈 158
9.1 嵌入式系統(tǒng)開發(fā)特點 158
9.1.1 交叉編譯和遠程調(diào)試 158
9.1.2 移植newlib或newlib-nano作為C運行庫 159
9.1.3 嵌入式引導(dǎo)程序和中斷異常處理 160
9.1.4 嵌入式系統(tǒng)鏈接腳本 160
9.1.5 減少代碼體積 161
9.1.6 支持printf函數(shù) 161
9.1.7 提供板級支持包 162
9.2 RISC-V GCC工具鏈簡介 162
9.2.1 RISC-V GCC工具鏈種類 162
9.2.2 riscv-none-embed工具鏈下載 163
9.2.3 RISC-V GCC工具鏈的(–march=)和(–mabi=)選項 164
9.2.4 RISC-V GCC工具鏈的(–mcmodel=)選項 168
9.2.5 RISC-V GCC工具鏈的其他選項 169
9.2.6 RISC-V GCC工具鏈的預(yù)定義宏 170
9.2.7 RISC-V GCC工具鏈使用實例 170
第 10章 RISC-V匯編語言程序設(shè)計 171
10.1 匯編語言簡介 171
10.2 RISC-V匯編程序概述 172
10.3 RISC-V匯編指令 173
10.4 RISC-V匯編程序偽操作 173
10.5 RISC-V匯編程序示例 177
10.5.1 定義標簽 177
10.5.2 定義宏 178
10.5.3 定義常數(shù) 178
10.5.4 立即數(shù)賦值 178
10.5.5 標簽地址賦值 179
10.5.6 設(shè)置浮點舍入模式 179
10.5.7 完整實例 180
10.6 在C/C++程序中嵌入?yún)R編 181
10.6.1 GCC內(nèi)聯(lián)匯編簡述 181
10.6.2 GCC內(nèi)聯(lián)匯編“輸出操作數(shù)”和“輸入操作數(shù)”部分 182
10.6.3 GCC內(nèi)聯(lián)匯編“可能影響的寄存器或存儲器”部分 183
10.6.4 GCC內(nèi)聯(lián)匯編參考實例一 184
10.6.5 GCC內(nèi)聯(lián)匯編參考實例二 185
10.6.6 小結(jié) 186
10.7 在匯編中調(diào)用C/C++函數(shù) 186
10.8 本章小結(jié) 187
第 11章 基于HBird-E-SDK平臺的軟件開發(fā)與運行 188
11.1 HBird-E-SDK平臺簡介 188
11.2 HBird-E-SDK平臺代碼結(jié)構(gòu) 189
11.3 HBird-E-SDK板級支持包解析 190
11.3.1 移植了Newlib樁函數(shù) 190
11.3.2 支持了printf函數(shù) 192
11.3.3 提供系統(tǒng)鏈接腳本 193
11.3.4 系統(tǒng)啟動引導(dǎo)程序 198
11.3.5 系統(tǒng)異常和中斷處理 202
11.3.6 減少代碼體積 206
11.4 使用HBird-E-SDK開發(fā)和編譯程序 208
11.4.1 在HBird-E-SDK環(huán)境中安裝工具鏈 208
11.4.2 在HBird-E-SDK環(huán)境中開發(fā)程序 210
11.4.3 編譯使得程序從Flash直接運行 211
11.4.4 編譯使得程序從ITCM中運行 212
11.4.5 編譯使得程序從Flash上載至ITCM中運行 213
11.5 使用HBird-E-SDK下載程序 213
11.5.1 JTAG調(diào)試器與MCU原型開發(fā)板的連接 213
11.5.2 設(shè)置JTAG調(diào)試器在Linux系統(tǒng)中的USB權(quán)限 214
11.5.3 將程序下載至MCU原型開發(fā)板 216
11.6 在MCU原型開發(fā)板上運行程序 216
11.6.1 程序從Flash直接運行 217
11.6.2 程序從ITCM中運行 217
11.6.3 程序從Flash上載至ITCM中運行 218
11.7 使用GDB遠程調(diào)試程序 218
11.7.1 調(diào)試器工作原理 218
11.7.2 GDB常用操作示例 220
11.7.3 使用GDB調(diào)試Hello World示例 221
第 12章 開源蜂鳥E203 MCU的更多示例程序 226
12.1 Dhrystone示例程序 226
12.1.1 Dhrystone示例程序功能簡介 226
12.1.2 Dhrystone示例程序代碼結(jié)構(gòu) 229
12.1.3 運行Dhrystone 229
12.2 CoreMark示例程序 231
12.2.1 CoreMark示例程序功能簡介 231
12.2.2 CoreMark示例程序代碼結(jié)構(gòu) 232
12.2.3 運行CoreMark 233
12.3 Demo_IASM示例程序 234
12.3.1 Demo_IASM示例程序功能簡介 234
12.3.2 Demo_IASM示例程序代碼結(jié)構(gòu) 234
12.3.3 Demo_IASM示例程序源碼解析 235
12.3.4 運行Demo_IASM 235
12.4 Demo_GPIO示例程序 236
12.4.1 Demo_GPIO示例程序功能簡介 236
12.4.2 Demo_GPIO示例程序代碼結(jié)構(gòu) 237
12.4.3 Demo_GPIO示例程序源碼分析 237
12.4.4 運行Demo_GPIO 243
12.5 中斷嵌套 244
第 13章 Windows IDE集成開發(fā)調(diào)試環(huán)境 245
13.1 MCU Eclipse IDE簡介與安裝 245
13.1.1 MCU Eclipse IDE簡介 245
13.1.2 RISC-V MCU Eclipse下載 246
13.1.3 RISC-V MCU Eclipse安裝 247
13.2 啟動Eclipse 248
13.3 創(chuàng)建Hello World項目 249
13.4 配置Hello World項目 253
13.4.1 配置工具鏈路徑 253
13.4.2 配置項目的編譯和鏈接選項 256
13.4.3 配置項目的BSP 262
13.4.4 配置項目的包含路徑和文件 265
13.5 編譯Hello World項目 267
13.6 運行Hello World項目 269
13.6.1 安裝JTAG調(diào)試器在Windows系統(tǒng)中的USB驅(qū)動 269
13.6.2 通過Eclipse下載程序至MCU開發(fā)板 270
13.6.3 在MCU開發(fā)板上運行程序 274
13.7 調(diào)試Hello World項目 276
13.8 拓展一:基于MCU Eclipse運行調(diào)試demo_gpio示例 280
13.9 拓展二:基于MCU Eclipse運行調(diào)試dhrystone示例 281
第 14章 開源蜂鳥E203 MCU開發(fā)板移植RTOS 283
14.1 RTOS簡述 283
14.2 常用實時操作系統(tǒng)概述 284
14.3 FreeRTOS簡介 285
14.4 蜂鳥E203 MCU移植RTOS 286
附錄A RISC-V架構(gòu)指令集介紹 287
A.1 RV32GC架構(gòu)概述 287
A.2 RV32E架構(gòu)概述 288
A.3 蜂鳥E203支持的指令列表 288
A.4 寄存器組 288
A.4.1 通用寄存器組 289
A.4.2 CSR寄存器 290
A.5 指令PC 290
A.6 尋址空間劃分 290
A.7 大端格式或小端格式 290
A.8 工作模式 290
A.9 Hart概念 291
A.10 復(fù)位狀態(tài) 291
A.11 中斷和異常 292
A.12 存儲器地址管理 292
A.13 存儲器模型 292
A.14 指令類型 293
A.14.1 RV32IMAFDC指令列表 293
A.14.2 基本整數(shù)指令(RV32I) 293
A.14.3 整數(shù)乘法和除法指令(RV32M指令子集) 302
A.14.4 浮點指令(RV32F,RV32D指令子集) 304
A.14.5 存儲器原子操作指令(RV32A指令子集) 315
A.14.6 16位壓縮指令(RV32C指令子集) 318
A.15 偽指令 320
A.16 指令編碼 320
附錄B RISC-V架構(gòu)CSR寄存器介紹 321
B.1 蜂鳥E203支持的CSR寄存器列表 321
B.2 RISC-V標準CSR 322
B.2.1 misa 322
B.2.2 mvendorid 323
B.2.3 marchid 323
B.2.4 mimpid 323
B.2.5 mhartid 324
B.2.6 fflags 324
B.2.7 frm 324
B.2.8 fcsr 324
B.2.9 mstatus 324
B.2.10 mtvec 326
B.2.11 mepc 326
B.2.12 mcause 327
B.2.13 mtval (mbadaddr) 327
B.2.14 mie 328
B.2.15 mip 328
B.2.16 mscratch 328
B.2.17 mcycle和mcycleh 329
B.2.18 minstret和minstreth 329
B.2.19 mtime、mtimecmp和msip 329
B.3 蜂鳥E203自定義CSR 330mcounterstop 330
附錄C RISC-V架構(gòu)的PLIC介紹 331
C.1 概述 331
C.2 PLIC中斷目標 332PLIC中斷目標之閾值 333
C.3 PLIC中斷源 333
C.3.1 PLIC中斷源之閘口(Gateway)和IP 334
C.3.2 PLIC中斷源之編號(ID) 334
C.3.3 PLIC中斷源之優(yōu)先級(Priority) 334
C.3.4 PLIC中斷源之中斷使能(Enable) 334
C.4 PLIC中斷處理機制 335
C.4.1 PLIC中斷通知機制(Notification) 335
C.4.2 PLIC中斷響應(yīng)機制(Claim) 335
C.4.3 PLIC中斷完成機制(Completion) 336
C.4.4 PLIC中斷完整流程 336
C.5 PLIC寄存器總結(jié) 337
C.6 總結(jié)與比較 339
附錄D 存儲器模型背景介紹 340
D.1 為何要有存儲器模型的概念 340
D.2 存儲器模型定義了什么 341
D.2.1 按序一致性模型 341
D.2.2 松散一致性模型 342
D.2.3 釋放一致性模型 342
D.2.4 存儲器模型總結(jié) 342
D.3 存儲器模型應(yīng)用實例 343
D.4 RISC-V架構(gòu)的存儲器模型 344
附錄E 存儲器原子操作指令背景介紹 345
E.1 什么是“上鎖”問題 345
E.2 通過原子操作解決“上鎖”問題 346
E.3 通過互斥操作解決“上鎖”問題 346
E.4 RISC-V架構(gòu)的相關(guān)指令 348
附錄F RISC-V指令編碼列表 349
F.1 RV32I指令編碼 349
F.2 RV32M指令編碼 350
F.3 RV32A指令編碼 350
F.4 RV32F指令編碼 350
F.5 RV32D指令編碼 351
F.6 RVC指令編碼 351
附錄G RISC-V偽指令列表 353