手把手教你RISC-V CPU(下) 工程與實踐

全書共3個部分18章,2021年9月人民郵電出版社出版的書籍,作者:胡振波 主編

基本介紹

  • 中文名:手把手教你RISC-V CPU(下) 工程與實踐 
  • 作者:胡振波 主編
  • 出版時間:2021年9月
  • 出版社人民郵電出版社
  • ISBN:9787115569493
  • 類別:圖書>計算機/網路>硬體 外部設備 維修
  • 定價:89.00 元
  • 開本:128 開
  • 裝幀:平裝
內容簡介,圖書目錄,作者簡介,

內容簡介

本書通過開源蜂鳥E203處理器系統地介紹了RISC-V處理器的嵌入式軟體開發方法。全書共3個部分18章,不但給出嵌入式軟體開發的全流程,而且介紹了蜂鳥E203處理器的具體使用方法,通過提供大量的實戰項目,幫助讀者做到理論與實踐相結合。
本書主要面向嵌入式軟體開發工程師,以及對RISC-V感興趣的初學者和技術愛好者。

圖書目錄

第 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

作者簡介

胡振波,擁有上海交通大學電子工程系學士學位和微電子學碩士學位。國內RISC-V社區活躍的貢獻者,具有超過10處理器研發經驗,在Marvell和Synopsys等企業負責過多款高性能和低能耗處理器研發工作。2018年,創辦了RISC-V處理器IP和晶片解決方案公司-----芯來科技。

相關詞條

熱門詞條

聯絡我們