RISC-V架構與嵌入式開發快速入門( 簡體 字) | |
作者:胡振波 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> RISC-V |
出版社:人民郵電出版社 | ![]() 詢問書籍請說出此書號! 缺書 NT售價: 395 元 |
出版日:1/1/2019 | |
頁數:352 | |
光碟數:0 | |
站長推薦: ![]() ![]() ![]() ![]() ![]() | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115494139 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1章 進入32位時代,誰能成為下一個8051 1
1.1 磨刀不誤砍柴工—CPU基礎知識介紹 1 1.1.1 ISA—CPU的靈魂 2 1.1.2 CISC與RISC 3 1.1.3 32位與64位架構 4 1.1.4 ISA眾生相 5 1.1.5 CPU的領域之分 9 1.1.6 8位時代的傳奇“前輩”—8051 10 1.1.7 IoT的崛起—32位時代的到來 11 1.2 無敵是多么寂寞—ARM統治著的世界 11 1.2.1 獨樂樂與眾樂樂—ARM公司的盈利模式 12 1.2.2 小個子有大力量—無處不在的Cortex-M系列 14 1.2.3 移動王者—Cortex-A系列在手持設備領域的巨大成功 16 1.2.4 進擊的巨人—ARM進軍PC與服務器領域的雄心 18 1.2.5 游戲終結者之ARM 19 1.3 東邊日出西邊雨,道是無晴卻有晴—RISC-V登場 19 1.4 RISC-V和其他開放架構有何不同 21 1.4.1 “平民英雄”—OpenRISC 22 1.4.2 “豪門顯貴”—SPARC 22 1.4.3 “名校優生”—RISC-V 23 1.5 結語:進入32位時代,誰能成為深嵌入式領域的下一個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架構之魂 29 3.1 簡單就是美—RISC-V架構的設計哲學 29 3.1.1 無病一身輕—架構的篇幅 30 3.1.2 能屈能伸—模塊化的指令集 31 3.1.3 濃縮的都是精華—指令的數量 31 3.2 RISC-V指令集架構簡介 32 3.2.1 模塊化的指令子集 32 3.2.2 可配置的通用寄存器組 33 3.2.3 規整的指令編碼 33 3.2.4 簡潔的存儲器訪問指令 34 3.2.5 高效的分支跳轉指令 35 3.2.6 簡潔的子程序調用 36 3.2.7 無條件碼執行 36 3.2.8 無分支延遲槽 37 3.2.9 零開銷硬件循環 37 3.2.10 簡潔的運算指令 38 3.2.11 優雅的壓縮指令子集 38 3.2.12 特權模式 39 3.2.13 CSR寄存器 40 3.2.14 中斷和異常 40 3.2.15 矢量指令子集 40 3.2.16 自定制指令擴展 40 3.2.17 總結與比較 41 第4章 RISC-V架構的中斷和異常 43 4.1 中斷和異常概述 43 4.1.1 中斷概述 43 4.1.2 異常概述 44 4.1.3 廣義上的異常 44 4.2 RISC-V架構異常處理機制 46 4.2.1 進入異常 47 4.2.2 退出異常 50 4.2.3 異常服務程序 50 4.3 RISC-V架構中斷定義 51 4.3.1 中斷類型 51 4.3.2 中斷屏蔽 54 4.3.3 中斷等待 55 4.3.4 中斷優先級與仲裁 55 4.3.5 中斷嵌套 56 4.3.6 總結比較 57 4.4 RISC-V架構異常相關CSR寄存器 57 4.5 蜂鳥E203的中斷和異常實現 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外設資源 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的全局復位 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外設介紹 77 6.1 蜂鳥E203 MCU SoC外設總述 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結構和IOF模式 80 6.6.4 SoC各外設復用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接口數據線 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寄存器配置傳輸參數 97 6.7.14 通過SPI_TXDATA寄存器發送數據 97 6.7.15 通過SPI_RXDATA寄存器接收數據 98 6.7.16 通過SPI_TXMARK寄存器配置發送中斷閾值 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接口數據線 104 6.8.5 通過I2C_PRERlo和I2C_PRERhi寄存器配置SCL時鐘頻率 104 6.8.6 通過I2C_CTR寄存器配置功能和中斷使能 104 6.8.7 I2C模塊產生中斷 105 6.8.8 通過I2C_TXR和I2C_RXR寄存器發送和接收數據 105 6.8.9 通過I2C_CR和I2C_SR寄存器發起命令和查看狀態 106 6.8.10 初始化I2C模塊的序列 107 6.8.11 通過I2C模塊向外部從設備寫數據的常用序列 107 6.8.12 通過I2C模塊從外部從設備讀數據的常用序列 108 6.9 UART 109 6.9.1 UART背景知識簡介 109 6.9.2 UART特性 110 6.9.3 UART寄存器列表 110 6.9.4 UART接口數據線 111 6.9.5 通過UART_TXDATA寄存器發送數據 111 6.9.6 通過UART_RXDATA寄存器接收數據 112 6.9.7 通過UART_TXCTRL寄存器進行發送控制 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特性和結構圖 116 6.10.3 PWM寄存器列表 117 6.10.4 通過PWMCFG寄存器進行配置 118 6.10.5 計數器計數值PWMCOUNT寄存器和PWM周期 119 6.10.6 計數器比較值PWMS寄存器 120 6.10.7 PWM接口數據線 121 6.10.8 產生左對齊或者右對齊的脈沖信號 121 6.10.9 產生居中對齊的脈沖信號 122 6.10.10 配置pwmcmp 6.10.11 配置pwmdeglitch防止輸出毛刺 124 6.10.12 PWM產生中斷 124 6.11 WDT 125 6.11.1 WDT背景知識簡介 125 6.11.2 WDT特性和結構圖 125 6.11.3 WDT寄存器列表 126 6.11.4 通過WDOGCFG寄存器進行配置 127 6.11.5 計數器計數值WDOGCOUNT寄存器 128 6.11.6 通過WDOGKEY寄存器解鎖 128 6.11.7 通過WDOGFEED寄存器喂狗 129 6.11.8 計數器比較值WDOGS寄存器 129 6.11.9 通過WDOGCMP寄存器配置閾值 130 6.11.10 WDT產生全局復位 130 6.11.11 WDT產生中斷 130 6.12 RTC 131 6.12.1 RTC背景知識簡介 131 6.12.2 RTC特性和結構圖 131 6.12.3 RTC寄存器列表 131 6.12.4 通過RTCCFG寄存器進行配置 132 6.12.5 計數器計數值RTCHI/RTCLO寄存器 133 6.12.6 計數器比較值RTCS寄存器 133 6.12.7 通過RTCCMP寄存器配置閾值 134 6.12.8 RTC產生中斷 134 6.13 PMU 134 6.13.1 PMU背景知識簡介 134 6.13.2 PMU特性和結構圖 135 6.13.3 PMU寄存器列表 136 6.13.4 通過PMUKEY寄存器解鎖 136 6.13.5 通過PMUSLEEP寄存器進入休眠模式 137 6.13.6 通過PMUSLEEPI 6.13.7 通過PMUBACKUP 6.13.8 通過PMUIE寄存器配置喚醒條件 139 6.13.9 通過PMUWAKEUPI 6.13.10 通過PMUCAUSE寄存器查看喚醒原因 141 第7章 開源蜂鳥E203 MCU開發板與調試器 143 7.1 蜂鳥E203 MCU開發板 143 7.2 蜂鳥E203 JTAG調試器 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 預處理 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 嵌入式系統編譯的特殊性 156 8.6 本章小結 156 第9章 嵌入式開發特點與RISC-V GCC工具鏈 158 9.1 嵌入式系統開發特點 158 9.1.1 交叉編譯和遠程調試 158 9.1.2 移植newlib或newlib-nano作為C運行庫 159 9.1.3 嵌入式引導程序和中斷異常處理 160 9.1.4 嵌入式系統鏈接腳本 160 9.1.5 減少代碼體積 161 9.1.6 支持printf函數 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工具鏈的預定義宏 170 9.2.7 RISC-V GCC工具鏈使用實例 170 第 10章 RISC-V匯編語言程序設計 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 定義常數 178 10.5.4 立即數賦值 178 10.5.5 標簽地址賦值 179 10.5.6 設置浮點舍入模式 179 10.5.7 完整實例 180 10.6 在C/C++程序中嵌入匯編 181 10.6.1 GCC內聯匯編簡述 181 10.6.2 GCC內聯匯編“輸出操作數”和“輸入操作數”部分 182 10.6.3 GCC內聯匯編“可能影響的寄存器或存儲器”部分 183 10.6.4 GCC內聯匯編參考實例一 184 10.6.5 GCC內聯匯編參考實例二 185 10.6.6 小結 186 10.7 在匯編中調用C/C++函數 186 10.8 本章小結 187 第 11章 基于HBird-E-SDK平臺的軟件開發與運行 188 11.1 HBird-E-SDK平臺簡介 188 11.2 HBird-E-SDK平臺代碼結構 189 11.3 HBird-E-SDK板級支持包解析 190 11.3.1 移植了Newlib樁函數 190 11.3.2 支持了printf函數 192 11.3.3 提供系統鏈接腳本 193 11.3.4 系統啟動引導程序 198 11.3.5 系統異常和中斷處理 202 11.3.6 減少代碼體積 206 11.4 使用HBird-E-SDK開發和編譯程序 208 11.4.1 在HBird-E-SDK環境中安裝工具鏈 208 11.4.2 在HBird-E-SDK環境中開發程序 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調試器與MCU原型開發板的連接 213 11.5.2 設置JTAG調試器在Linux系統中的USB權限 214 11.5.3 將程序下載至MCU原型開發板 216 11.6 在MCU原型開發板上運行程序 216 11.6.1 程序從Flash直接運行 217 11.6.2 程序從ITCM中運行 217 11.6.3 程序從Flash上載至ITCM中運行 218 11.7 使用GDB遠程調試程序 218 11.7.1 調試器工作原理 218 11.7.2 GDB常用操作示例 220 11.7.3 使用GDB調試Hello World示例 221 第 12章 開源蜂鳥E203 MCU的更多示例程序 226 12.1 Dhrystone示例程序 226 12.1.1 Dhrystone示例程序功能簡介 226 12.1.2 Dhrystone示例程序代碼結構 229 12.1.3 運行Dhrystone 229 12.2 CoreMark示例程序 231 12.2.1 CoreMark示例程序功能簡介 231 12.2.2 CoreMark示例程序代碼結構 232 12.2.3 運行CoreMark 233 12.3 Demo_IASM示例程序 234 12.3.1 Demo_IASM示例程序功能簡介 234 12.3.2 Demo_IASM示例程序代碼結構 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示例程序代碼結構 237 12.4.3 Demo_GPIO示例程序源碼分析 237 12.4.4 運行Demo_GPIO 243 12.5 中斷嵌套 244 第 13章 Windows IDE集成開發調試環境 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 創建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調試器在Windows系統中的USB驅動 269 13.6.2 通過Eclipse下載程序至MCU開發板 270 13.6.3 在MCU開發板上運行程序 274 13.7 調試Hello World項目 276 13.8 拓展一:基于MCU Eclipse運行調試demo_gpio示例 280 13.9 拓展二:基于MCU Eclipse運行調試dhrystone示例 281 第 14章 開源蜂鳥E203 MCU開發板移植RTOS 283 14.1 RTOS簡述 283 14.2 常用實時操作系統概述 284 14.3 FreeRTOS簡介 285 14.4 蜂鳥E203 MCU移植RTOS 286 附錄A RISC-V架構指令集介紹 287 A.1 RV32GC架構概述 287 A.2 RV32E架構概述 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 復位狀態 291 A.11 中斷和異常 292 A.12 存儲器地址管理 292 A.13 存儲器模型 292 A.14 指令類型 293 A.14.1 RV32IMAFDC指令列表 293 A.14.2 基本整數指令(RV32I) 293 A.14.3 整數乘法和除法指令(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架構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架構的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中斷源之優先級(Priority) 334 C.3.4 PLIC中斷源之中斷使能(Enable) 334 C.4 PLIC中斷處理機制 335 C.4.1 PLIC中斷通知機制(Notification) 335 C.4.2 PLIC中斷響應機制(Claim) 335 C.4.3 PLIC中斷完成機制(Completion) 336 C.4.4 PLIC中斷完整流程 336 C.5 PLIC寄存器總結 337 C.6 總結與比較 339 附錄D 存儲器模型背景介紹 340 D.1 為何要有存儲器模型的概念 340 D.2 存儲器模型定義了什么 341 D.2.1 按序一致性模型 341 D.2.2 松散一致性模型 342 D.2.3 釋放一致性模型 342 D.2.4 存儲器模型總結 342 D.3 存儲器模型應用實例 343 D.4 RISC-V架構的存儲器模型 344 附錄E 存儲器原子操作指令背景介紹 345 E.1 什么是“上鎖”問題 345 E.2 通過原子操作解決“上鎖”問題 346 E.3 通過互斥操作解決“上鎖”問題 346 E.4 RISC-V架構的相關指令 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 本書是一本介紹RISC-V架構嵌入式開發的入門書籍,以通俗的語言系統介紹了嵌入式開發的基礎知識和RISC-V架構的內容,力求幫助讀者快速掌握RISC-V架構的嵌入式開發技術。
本書共分為兩部分。第一部分為第1~14章,基本涵蓋了使用RISC-V架構進行嵌入式開發所需的所有關鍵知識。第二部分為附錄部分,詳細介紹了RISC-V指令集架構,輔以作者加入的背景知識解讀和注解,以便于讀者理解。 |