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