手把手教你RISC-V CPU(下) 工程與實踐( 簡體 字) | |
作者:胡振波 主編 芯來科技生態組 編著 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> RISC-V |
出版社:人民郵電出版社 | 3dWoo書號: 55274 詢問書籍請說出此書號! 缺書 NT售價: 445 元 |
出版日:9/1/2021 | |
頁數:267 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115569493 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1章 開源蜂鳥E203 MCU總體介紹 1
1.1 蜂鳥E203 MCU的系統結構和特性 1 1.2 蜂鳥E203 MCU的存儲資源 2 1.2.1 片上存儲資源 2 1.2.2 片外Flash存儲資源 2 1.3 蜂鳥E203 MCU的外設資源 3 1.4 蜂鳥E203 MCU的地址分配 3 1.5 蜂鳥E203 MCU的時鐘域劃分 4 1.6 蜂鳥E203 MCU的電源域劃分 5 1.7 蜂鳥E203 MCU的低功耗模式 5 1.8 蜂鳥E203 MCU的全局復位 6 1.9 蜂鳥E203 MCU的上電流程控制 7 1.10 蜂鳥E203 MCU的頂層引腳 7 1.11 蜂鳥E203 MCU的GPIO復用功能 8 1.12 蜂鳥E203 MCU的中斷處理 9 1.12.1 蜂鳥E203處理器核的異常和中斷處理 9 1.12.2 蜂鳥E203處理器核的中斷接口 11 1.12.3 CLINT模塊生成計時器中斷和軟件中斷 12 1.12.4 PLIC管理多個外部中斷 13 第 2章 開源蜂鳥E203 MCU的外設 17 2.1 蜂鳥E203 MCU的外設概述 17 2.2 PLIC 17 2.3 CLINT 18 2.4 LCLKGEN 18 2.4.1 LCLKGEN簡介 18 2.4.2 LCLKGEN的寄存器 18 2.5 HCLKGEN 18 2.5.1 HCLKGEN簡介 18 2.5.2 HCLKGEN的寄存器 19 2.6 GPIO 19 2.6.1 GPIO的功能 19 2.6.2 GPIO的寄存器 19 2.6.3 I/O結構和IOF模式 20 2.6.4 MCU各外設復用GPIO引腳 20 2.6.5 GPIO中斷 21 2.6.6 GPIO_PADDIR寄存器 21 2.6.7 GPIO_PADIN寄存器 21 2.6.8 GPIO_PADOUT寄存器 21 2.6.9 GPIO_INTTEN寄存器 22 2.6.10 GPIO_INTTYPE0和GPIO_INTTYPE1寄存器 22 2.6.11 GPIO_INTSTATUS寄存器 22 2.6.12 GPIO_IOFCFG寄存器 22 2.7 SPI 22 2.7.1 SPI的背景知識 22 2.7.2 SPI的特性 25 2.7.3 SPI的寄存器 25 2.7.4 SPI數據線 26 2.7.5 QSPI0的寄存器配置 26 2.7.6 QSPI1和QSPI2的寄存器配置 38 2.8 I2C 41 2.8.1 I2C的背景知識 41 2.8.2 I2C的功能 42 2.8.3 I2C的寄存器 43 2.8.4 I2C的接口數據線 43 2.8.5 I2C_PRE寄存器 43 2.8.6 I2C_CTR寄存器 44 2.8.7 I2C_TX寄存器和I2C_RX寄存器 44 2.8.8 I2C_CMD寄存器 45 2.8.9 I2C_STATUS寄存器 45 2.8.10 I2C的常用操作序列 46 2.9 UART 48 2.9.1 UART的背景知識 48 2.9.2 UART的特性和功能 49 2.9.3 UART的寄存器 49 2.9.4 UART的接口數據線 50 2.9.5 UART_DLL寄存器和UART_DLM寄存器 50 2.9.6 UART_RBR寄存器 51 2.9.7 UART_THR寄存器 51 2.9.8 UART_FCR寄存器 52 2.9.9 UART_LCR寄存器 52 2.9.10 UART_LSR寄存器 53 2.9.11 UART_IER寄存器 53 2.9.12 UART_IIR寄存器 54 2.10 PWM 54 2.10.1 PWM的背景知識 54 2.10.2 PWM的功能和特性 54 2.10.3 PWM的寄存器 55 2.10.4 PWM模塊的輸出信號 55 2.10.5 TIMx_CMD(x=0,1,2,3)寄存器 55 2.10.6 TIMx_CFG(x=0,1,2,3)寄存器 56 2.10.7 TIMx_TH(x=0,1,2,3)寄存器 57 2.10.8 TIMx_CH0_TH(x=0,1,2,3)寄存器 57 2.10.9 TIMx_CH1_TH(x=0,1,2,3)寄存器 58 2.10.10 TIMx_CH2_TH(x=0,1,2,3)寄存器 58 2.10.11 TIMx_CH3_TH(x=0,1,2,3)寄存器 59 2.10.12 TIMx_CNT(x=0,1,2,3)寄存器 60 2.10.13 PWM_ENT_CFG寄存器 60 2.10.14 PWM_TIMER_EN寄存器 61 2.11 WDT 62 2.11.1 WDT的背景知識 62 2.11.2 WDT的特性、功能和結構 62 2.11.3 WDT的寄存器 63 2.11.4 通過WDOGCFG寄存器對WDT進行配置 63 2.11.5 WDT的計數器計數值寄存器—WDOGCOUNT 64 2.11.6 通過WDOGKEY寄存器解鎖 65 2.11.7 通過WDOGFEED寄存器“喂狗” 65 2.11.8 WDT的計數器比較值寄存器—WDOGS 66 2.11.9 通過WDOGCMP寄存器配置閾值 66 2.11.10 WDT產生全局復位 66 2.11.11 WDT產生中斷 67 2.12 RTC 67 2.12.1 RTC的背景知識 67 2.12.2 RTC的特性、功能和結構 67 2.12.3 RTC的寄存器 68 2.12.4 通過RTCCFG寄存器進行配置 68 2.12.5 RTC的計數器計數值寄存器—RTCHI/RTCLO 69 2.12.6 RTC的計數器比較值寄存器—RTCS 70 2.12.7 通過RTCCMP寄存器配置閾值 70 2.12.8 RTC產生中斷 70 2.13 PMU 70 2.13.1 PMU的背景知識 70 2.13.2 PMU的特性、功能和結構 71 2.13.3 PMU的寄存器 72 2.13.4 通過PMUKEY寄存器解鎖 72 2.13.5 通過PMUSLEEP寄存器進入休眠模式 73 2.13.6 通過PMUSLEEPI0~PMUSLEEPI7寄存器配置休眠指令序列 73 2.13.7 通過PMUBACKUP系列寄存器保存關鍵信息 75 2.13.8 通過PMUIE寄存器設置喚醒條件 75 2.13.9 通過PMUWAKEUPI0~PMUWAKEUPI7寄存器配置喚醒指令序列 76 2.13.10 通過PMUCAUSE寄存器查看喚醒原因 77 第3章 開源蜂鳥E203 MCU硬件開發平臺 78 3.1 Nuclei FPGA開發板 78 3.1.1 Nuclei DDR200T開發板簡介 79 3.1.2 Nuclei DDR200T開發板的硬件功能模塊 80 3.1.3 蜂鳥E203 MCU的功能引腳分配 88 3.2 蜂鳥JTAG調試器 89 3.3 總結 90 第4章 軟件編譯過程 91 4.1 GCC工具鏈 91 4.1.1 GCC工具鏈簡介 91 4.1.2 binutils 92 4.1.3 C運行庫 93 4.1.4 GCC命令行選項 94 4.2 準備工作 94 4.2.1 安裝Linux 94 4.2.2 準備HelloWorld程序 94 4.3 編譯過程 95 4.3.1 預處理 95 4.3.2 編譯 96 4.3.3 匯編 96 4.3.4 鏈接 97 4.3.5 一步到位的編譯 99 4.4 ELF文件 99 4.4.1 ELF文件的種類 99 4.4.2 ELF文件的段 100 4.4.3 查看ELF文件 100 4.4.4 反匯編 101 4.5 嵌入式系統編譯的特殊性 102 4.6 總結 103 第5章 嵌入式開發的特點與RISC-V GCC工具鏈 104 5.1 嵌入式系統開發的特點 104 5.1.1 交叉編譯和遠程調試 104 5.1.2 移植newlib或newlib-nano作為C運行庫 105 5.1.3 引導程序以及中斷和異常處理 106 5.1.4 嵌入式系統的鏈接腳本 106 5.1.5 減小代碼規模 106 5.1.6 支持printf()函數 107 5.1.7 提供板級支持包 107 5.2 RISC-V GNU工具鏈 108 5.2.1 RISC-V GNU工具鏈的獲取 108 5.2.2 RISC-V GCC工具鏈的“-march”和“-mabi”選項 109 5.2.3 RISC-V GCC工具鏈的“-mcmodel”選項 113 5.2.4 RISC-V GCC工具鏈的預定義的宏 114 5.2.5 RISC-V GNU工具鏈的使用實例 115 第6章 RISC-V匯編語言程序設計 116 6.1 匯編語言概述 116 6.2 RISC-V匯編程序概述 117 6.3 RISC-V匯編偽指令 118 6.4 RISC-V匯編程序偽操作 118 6.5 RISC-V匯編程序示例 122 6.5.1 標簽 122 6.5.2 宏 122 6.5.3 定義常數及其別名 122 6.5.4 立即數賦值 123 6.5.5 標簽地址賦值 123 6.5.6 設置浮點數舍入模式 124 6.5.7 完整實例 124 6.6 在C/C++程序中嵌入匯編程序 125 6.6.1 GCC內聯匯編簡介 126 6.6.2 GCC內聯匯編的“輸出操作數”和“輸入操作數”部分 127 6.6.3 GCC內聯匯編的“可能影響的寄存器或存儲器”部分 128 6.6.4 GCC內聯匯編實例1 128 6.6.5 GCC內聯匯編實例2 129 6.6.6 小結 130 6.7 在匯編程序中調用C/C++語言中的函數 130 6.8 總結 131 第7章 開源蜂鳥E203 MCU的軟件開發平臺 132 7.1 HBird SDK概述 132 7.2 HBird SDK的目錄結構 133 7.3 HBird SDK的底層實現解析 134 7.3.1 移植了newlib的樁函數 134 7.3.2 支持了printf()函數 135 7.3.3 提供系統鏈接腳本 136 7.3.4 系統啟動引導程序 140 7.3.5 系統中斷和異常處理 145 7.3.6 使用newlib-nano減小代碼規模 149 7.4 HBird SDK的使用 150 7.4.1 HBird SDK的環境配置與工具鏈安裝 150 7.4.2 HBird SDK的運行 154 第8章 集成開發環境——Nuclei Studio 158 8.1 Nuclei Studio的簡介、下載與啟動 158 8.1.1 Nuclei Studio簡介 158 8.1.2 Nuclei Studio的下載與啟動 158 8.2 使用Nuclei Studio進行蜂鳥E203MCU的開發 160 第9章 初試蜂鳥E203 MCU開發 168 9.1 蜂鳥E203 MCU在Nuclei DDR200T開發板中的實現 168 9.2 蜂鳥調試器的驅動程序的安裝和蜂鳥調試器的設置 175 9.3 基于HBird SDK運行HelloWorld程序 177 9.3.1 將程序下載至DDR200T開發板 177 9.3.2 將程序在DDR200T開發板上運行 178 9.3.3 將程序在DDR200T開發板上調試 180 9.4 基于Nuclei Studio運行HelloWorld程序 183 9.4.1 將程序下載至DDR200T開發板 183 9.4.2 將程序在DDR200T開發板上運行 186 9.4.3 將程序在DDR200T開發板上調試 187 第 10章 Benchmark實驗 190 10.1 實驗目的 190 10.2 實驗準備 190 10.3 實驗原理 190 10.3.1 Dhrystone簡介 191 10.3.2 Dhrystone示例程序 193 10.3.3 CoreMark簡介 194 10.3.4 CoreMark示例程序 195 10.4 實驗步驟 196 10.4.1 在HBird SDK中運行Dhrystone示例程序 196 10.4.2 在Nuclei Studio中運行Dhrystone示例程序 198 10.4.3 在HBird SDK中運行CoreMark示例程序 200 10.4.4 在Nuclei Studio中運行CoreMark示例程序 202 第 11章 內聯匯編實驗 205 11.1 實驗目的 205 11.2 實驗準備 205 11.3 實驗原理 205 11.3.1 在C/C++程序中嵌入匯編程序 205 11.3.2 內聯匯編示例程序 206 11.4 實驗步驟 206 11.4.1 在HBird SDK中運行內聯匯編示例程序 206 11.4.2 在Nuclei Studio中運行內聯匯編示例程序 208 第 12章 GPIO實驗 213 12.1 實驗目的 213 12.2 實驗準備 213 12.3 實驗原理 213 12.3.1 GPIO簡介 213 12.3.2 GPIO示例程序 214 12.4 實驗步驟 215 12.4.1 在HBird SDK中運行GPIO示例程序 215 12.4.2 在Nuclei Studio中運行GPIO示例程序 216 第 13章 PWM實驗 220 13.1 實驗目的 220 13.2 實驗準備 220 13.3 實驗原理 220 13.3.1 PWM簡介 220 13.3.2 PWM示例程序 221 13.4 實驗步驟 222 13.4.1 在HBird SDK中運行PWM示例程序 222 13.4.2 在Nuclei Studio中運行PWM示例程序 224 第 14章 SPI實驗 227 14.1 實驗目的 227 14.2 實驗準備 227 14.3 實驗原理 227 14.3.1 SPI簡介 227 14.3.2 SPI示例程序 228 14.4 實驗步驟 229 14.4.1 在HBird SDK中運行SPI示例程序 229 14.4.2 在Nuclei Studio中運行SPI示例程序 231 第 15章 I2C實驗 235 15.1 實驗目的 235 15.2 實驗準備 235 15.3 實驗原理 235 15.3.1 I2C簡介 235 15.3.2 I2C示例程序 236 15.4 實驗步驟 237 15.4.1 在HBird SDK中運行I2C示例程序 237 15.4.2 在Nuclei Studio中運行I2C示例程序 238 第 16章 中斷相關實驗 243 16.1 實驗目的 243 16.2 實驗準備 243 16.3 實驗原理 243 16.3.1 計時器中斷和軟件中斷 243 16.3.2 計時器中斷和軟件中斷示例程序 244 16.3.3 外部中斷 244 16.3.4 外部中斷示例程序 245 16.4 實驗步驟 246 16.4.1 在HBird SDK中運行計時器中斷與軟件中斷示例程序 246 16.4.2 在Nuclei Studio中運行計時器中斷與軟件中斷示例程序 247 16.4.3 在HBird SDK中運行外部中斷示例程序 249 16.4.4 在Nuclei Studio中運行外部中斷示例程序 251 第 17章 FreeRTOS的移植與示例程序運行 253 17.1 RTOS概述 253 17.1.1 RTOS的定義 253 17.1.2 基于RTOS的開發與裸機開發 254 17.2 常用的實時操作系統 254 17.3 FreeRTOS概述 255 17.4 FreeRTOS在蜂鳥E203 MCU中的移植 257 17.5 FreeRTOS示例程序的運行 261 17.5.1 FreeRTOS示例程序 261 17.5.2 在HBird SDK中運行FreeRTOS示例程序 261 17.5.3 在Nuclei Studio中運行FreeRTOS示例程序 262 第 18章 獲取更多資源 265 18.1 開源蜂鳥E203 MCU文檔資源 265 18.2 開源蜂鳥E203 MCU嵌入式開發實驗 265 18.3 開源蜂鳥E203處理器教學資源 266 18.4 開源蜂鳥E203論壇 266 本書通過開源蜂鳥E203處理器系統地介紹了RISC-V處理器的嵌入式軟件開發方法。全書共3個部分18章,不但給出嵌入式軟件開發的全流程,而且介紹了蜂鳥E203處理器的具體使用方法,通過提供大量的實戰項目,幫助讀者做到理論與實踐相結合。
本書主要面向嵌入式軟件開發工程師,以及對RISC-V感興趣的初學者和技術愛好者。 |