第 1章 開源蜂鳥E203 MCU總體介紹 1
1.1 蜂鳥E203 MCU的系統(tǒng)結(jié)構(gòu)和特性 1
1.2 蜂鳥E203 MCU的存儲(chǔ)資源 2
1.2.1 片上存儲(chǔ)資源 2
1.2.2 片外Flash存儲(chǔ)資源 2
1.3 蜂鳥E203 MCU的外設(shè)資源 3
1.4 蜂鳥E203 MCU的地址分配 3
1.5 蜂鳥E203 MCU的時(shí)鐘域劃分 4
1.6 蜂鳥E203 MCU的電源域劃分 5
1.7 蜂鳥E203 MCU的低功耗模式 5
1.8 蜂鳥E203 MCU的全局復(fù)位 6
1.9 蜂鳥E203 MCU的上電流程控制 7
1.10 蜂鳥E203 MCU的頂層引腳 7
1.11 蜂鳥E203 MCU的GPIO復(fù)用功能 8
1.12 蜂鳥E203 MCU的中斷處理 9
1.12.1 蜂鳥E203處理器核的異常和中斷處理 9
1.12.2 蜂鳥E203處理器核的中斷接口 11
1.12.3 CLINT模塊生成計(jì)時(shí)器中斷和軟件中斷 12
1.12.4 PLIC管理多個(gè)外部中斷 13
第 2章 開源蜂鳥E203 MCU的外設(shè) 17
2.1 蜂鳥E203 MCU的外設(shè)概述 17
2.2 PLIC 17
2.3 CLINT 18
2.4 LCLKGEN 18
2.4.1 LCLKGEN簡(jiǎn)介 18
2.4.2 LCLKGEN的寄存器 18
2.5 HCLKGEN 18
2.5.1 HCLKGEN簡(jiǎn)介 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結(jié)構(gòu)和IOF模式 20
2.6.4 MCU各外設(shè)復(fù)用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的背景知識(shí) 22
2.7.2 SPI的特性 25
2.7.3 SPI的寄存器 25
2.7.4 SPI數(shù)據(jù)線 26
2.7.5 QSPI0的寄存器配置 26
2.7.6 QSPI1和QSPI2的寄存器配置 38
2.8 I2C 41
2.8.1 I2C的背景知識(shí) 41
2.8.2 I2C的功能 42
2.8.3 I2C的寄存器 43
2.8.4 I2C的接口數(shù)據(jù)線 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的背景知識(shí) 48
2.9.2 UART的特性和功能 49
2.9.3 UART的寄存器 49
2.9.4 UART的接口數(shù)據(jù)線 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的背景知識(shí) 54
2.10.2 PWM的功能和特性 54
2.10.3 PWM的寄存器 55
2.10.4 PWM模塊的輸出信號(hào) 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的背景知識(shí) 62
2.11.2 WDT的特性、功能和結(jié)構(gòu) 62
2.11.3 WDT的寄存器 63
2.11.4 通過WDOGCFG寄存器對(duì)WDT進(jìn)行配置 63
2.11.5 WDT的計(jì)數(shù)器計(jì)數(shù)值寄存器WDOGCOUNT 64
2.11.6 通過WDOGKEY寄存器解鎖 65
2.11.7 通過WDOGFEED寄存器喂狗 65
2.11.8 WDT的計(jì)數(shù)器比較值寄存器WDOGS 66
2.11.9 通過WDOGCMP寄存器配置閾值 66
2.11.10 WDT產(chǎn)生全局復(fù)位 66
2.11.11 WDT產(chǎn)生中斷 67
2.12 RTC 67
2.12.1 RTC的背景知識(shí) 67
2.12.2 RTC的特性、功能和結(jié)構(gòu) 67
2.12.3 RTC的寄存器 68
2.12.4 通過RTCCFG寄存器進(jìn)行配置 68
2.12.5 RTC的計(jì)數(shù)器計(jì)數(shù)值寄存器RTCHI/RTCLO 69
2.12.6 RTC的計(jì)數(shù)器比較值寄存器RTCS 70
2.12.7 通過RTCCMP寄存器配置閾值 70
2.12.8 RTC產(chǎn)生中斷 70
2.13 PMU 70
2.13.1 PMU的背景知識(shí) 70
2.13.2 PMU的特性、功能和結(jié)構(gòu) 71
2.13.3 PMU的寄存器 72
2.13.4 通過PMUKEY寄存器解鎖 72
2.13.5 通過PMUSLEEP寄存器進(jìn)入休眠模式 73
2.13.6 通過PMUSLEEPI0~PMUSLEEPI7寄存器配置休眠指令序列 73
2.13.7 通過PMUBACKUP系列寄存器保存關(guān)鍵信息 75
2.13.8 通過PMUIE寄存器設(shè)置喚醒條件 75
2.13.9 通過PMUWAKEUPI0~PMUWAKEUPI7寄存器配置喚醒指令序列 76
2.13.10 通過PMUCAUSE寄存器查看喚醒原因 77
第3章 開源蜂鳥E203 MCU硬件開發(fā)平臺(tái) 78
3.1 Nuclei FPGA開發(fā)板 78
3.1.1 Nuclei DDR200T開發(fā)板簡(jiǎn)介 79
3.1.2 Nuclei DDR200T開發(fā)板的硬件功能模塊 80
3.1.3 蜂鳥E203 MCU的功能引腳分配 88
3.2 蜂鳥JTAG調(diào)試器 89
3.3 總結(jié) 90
第4章 軟件編譯過程 91
4.1 GCC工具鏈 91
4.1.1 GCC工具鏈簡(jiǎn)介 91
4.1.2 binutils 92
4.1.3 C運(yùn)行庫(kù) 93
4.1.4 GCC命令行選項(xiàng) 94
4.2 準(zhǔn)備工作 94
4.2.1 安裝Linux 94
4.2.2 準(zhǔn)備HelloWorld程序 94
4.3 編譯過程 95
4.3.1 預(yù)處理 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 嵌入式系統(tǒng)編譯的特殊性 102
4.6 總結(jié) 103
第5章 嵌入式開發(fā)的特點(diǎn)與RISC-V GCC工具鏈 104
5.1 嵌入式系統(tǒng)開發(fā)的特點(diǎn) 104
5.1.1 交叉編譯和遠(yuǎn)程調(diào)試 104
5.1.2 移植newlib或newlib-nano作為C運(yùn)行庫(kù) 105
5.1.3 引導(dǎo)程序以及中斷和異常處理 106
5.1.4 嵌入式系統(tǒng)的鏈接腳本 106
5.1.5 減小代碼規(guī)模 106
5.1.6 支持printf()函數(shù) 107
5.1.7 提供板級(jí)支持包 107
5.2 RISC-V GNU工具鏈 108
5.2.1 RISC-V GNU工具鏈的獲取 108
5.2.2 RISC-V GCC工具鏈的-march和-mabi選項(xiàng) 109
5.2.3 RISC-V GCC工具鏈的-mcmodel選項(xiàng) 113
5.2.4 RISC-V GCC工具鏈的預(yù)定義的宏 114
5.2.5 RISC-V GNU工具鏈的使用實(shí)例 115
第6章 RISC-V匯編語(yǔ)言程序設(shè)計(jì) 116
6.1 匯編語(yǔ)言概述 116
6.2 RISC-V匯編程序概述 117
6.3 RISC-V匯編偽指令 118
6.4 RISC-V匯編程序偽操作 118
6.5 RISC-V匯編程序示例 122
6.5.1 標(biāo)簽 122
6.5.2 宏 122
6.5.3 定義常數(shù)及其別名 122
6.5.4 立即數(shù)賦值 123
6.5.5 標(biāo)簽地址賦值 123
6.5.6 設(shè)置浮點(diǎn)數(shù)舍入模式 124
6.5.7 完整實(shí)例 124
6.6 在C/C 程序中嵌入?yún)R編程序 125
6.6.1 GCC內(nèi)聯(lián)匯編簡(jiǎn)介 126
6.6.2 GCC內(nèi)聯(lián)匯編的輸出操作數(shù)和輸入操作數(shù)部分 127
6.6.3 GCC內(nèi)聯(lián)匯編的可能影響的寄存器或存儲(chǔ)器部分 128
6.6.4 GCC內(nèi)聯(lián)匯編實(shí)例1 128
6.6.5 GCC內(nèi)聯(lián)匯編實(shí)例2 129
6.6.6 小結(jié) 130
6.7 在匯編程序中調(diào)用C/C 語(yǔ)言中的函數(shù) 130
6.8 總結(jié) 131
第7章 開源蜂鳥E203 MCU的軟件開發(fā)平臺(tái) 132
7.1 HBird SDK概述 132
7.2 HBird SDK的目錄結(jié)構(gòu) 133
7.3 HBird SDK的底層實(shí)現(xiàn)解析 134
7.3.1 移植了newlib的樁函數(shù) 134
7.3.2 支持了printf()函數(shù) 135
7.3.3 提供系統(tǒng)鏈接腳本 136
7.3.4 系統(tǒng)啟動(dòng)引導(dǎo)程序 140
7.3.5 系統(tǒng)中斷和異常處理 145
7.3.6 使用newlib-nano減小代碼規(guī)!149
7.4 HBird SDK的使用 150
7.4.1 HBird SDK的環(huán)境配置與工具鏈安裝 150
7.4.2 HBird SDK的運(yùn)行 154
第8章 集成開發(fā)環(huán)境Nuclei Studio 158
8.1 Nuclei Studio的簡(jiǎn)介、下載與啟動(dòng) 158
8.1.1 Nuclei Studio簡(jiǎn)介 158
8.1.2 Nuclei Studio的下載與啟動(dòng) 158
8.2 使用Nuclei Studio進(jìn)行蜂鳥E203MCU的開發(fā) 160
第9章 初試蜂鳥E203 MCU開發(fā) 168
9.1 蜂鳥E203 MCU在Nuclei DDR200T開發(fā)板中的實(shí)現(xiàn) 168
9.2 蜂鳥調(diào)試器的驅(qū)動(dòng)程序的安裝和蜂鳥調(diào)試器的設(shè)置 175
9.3 基于HBird SDK運(yùn)行HelloWorld程序 177
9.3.1 將程序下載至DDR200T開發(fā)板 177
9.3.2 將程序在DDR200T開發(fā)板上運(yùn)行 178
9.3.3 將程序在DDR200T開發(fā)板上調(diào)試 180
9.4 基于Nuclei Studio運(yùn)行HelloWorld程序 183
9.4.1 將程序下載至DDR200T開發(fā)板 183
9.4.2 將程序在DDR200T開發(fā)板上運(yùn)行 186
9.4.3 將程序在DDR200T開發(fā)板上調(diào)試 187
第 10章 Benchmark實(shí)驗(yàn) 190
10.1 實(shí)驗(yàn)?zāi)康摹?90
10.2 實(shí)驗(yàn)準(zhǔn)備 190
10.3 實(shí)驗(yàn)原理 190
10.3.1 Dhrystone簡(jiǎn)介 191
10.3.2 Dhrystone示例程序 193
10.3.3 CoreMark簡(jiǎn)介 194
10.3.4 CoreMark示例程序 195
10.4 實(shí)驗(yàn)步驟 196
10.4.1 在HBird SDK中運(yùn)行Dhrystone示例程序 196
10.4.2 在Nuclei Studio中運(yùn)行Dhrystone示例程序 198
10.4.3 在HBird SDK中運(yùn)行CoreMark示例程序 200
10.4.4 在Nuclei Studio中運(yùn)行CoreMark示例程序 202
第 11章 內(nèi)聯(lián)匯編實(shí)驗(yàn) 205
11.1 實(shí)驗(yàn)?zāi)康摹?05
11.2 實(shí)驗(yàn)準(zhǔn)備 205
11.3 實(shí)驗(yàn)原理 205
11.3.1 在C/C 程序中嵌入?yún)R編程序 205
11.3.2 內(nèi)聯(lián)匯編示例程序 206
11.4 實(shí)驗(yàn)步驟 206
11.4.1 在HBird SDK中運(yùn)行內(nèi)聯(lián)匯編示例程序 206
11.4.2 在Nuclei Studio中運(yùn)行內(nèi)聯(lián)匯編示例程序 208
第 12章 GPIO實(shí)驗(yàn) 213
12.1 實(shí)驗(yàn)?zāi)康摹?13
12.2 實(shí)驗(yàn)準(zhǔn)備 213
12.3 實(shí)驗(yàn)原理 213
12.3.1 GPIO簡(jiǎn)介 213
12.3.2 GPIO示例程序 214
12.4 實(shí)驗(yàn)步驟 215
12.4.1 在HBird SDK中運(yùn)行GPIO示例程序 215
12.4.2 在Nuclei Studio中運(yùn)行GPIO示例程序 216
第 13章 PWM實(shí)驗(yàn) 220
13.1 實(shí)驗(yàn)?zāi)康摹?20
13.2 實(shí)驗(yàn)準(zhǔn)備 220
13.3 實(shí)驗(yàn)原理 220
13.3.1 PWM簡(jiǎn)介 220
13.3.2 PWM示例程序 221
13.4 實(shí)驗(yàn)步驟 222
13.4.1 在HBird SDK中運(yùn)行PWM示例程序 222
13.4.2 在Nuclei Studio中運(yùn)行PWM示例程序 224
第 14章 SPI實(shí)驗(yàn) 227
14.1 實(shí)驗(yàn)?zāi)康摹?27
14.2 實(shí)驗(yàn)準(zhǔn)備 227
14.3 實(shí)驗(yàn)原理 227
14.3.1 SPI簡(jiǎn)介 227
14.3.2 SPI示例程序 228
14.4 實(shí)驗(yàn)步驟 229
14.4.1 在HBird SDK中運(yùn)行SPI示例程序 229
14.4.2 在Nuclei Studio中運(yùn)行SPI示例程序 231
第 15章 I2C實(shí)驗(yàn) 235
15.1 實(shí)驗(yàn)?zāi)康摹?35
15.2 實(shí)驗(yàn)準(zhǔn)備 235
15.3 實(shí)驗(yàn)原理 235
15.3.1 I2C簡(jiǎn)介 235
15.3.2 I2C示例程序 236
15.4 實(shí)驗(yàn)步驟 237
15.4.1 在HBird SDK中運(yùn)行I2C示例程序 237
15.4.2 在Nuclei Studio中運(yùn)行I2C示例程序 238
第 16章 中斷相關(guān)實(shí)驗(yàn) 243
16.1 實(shí)驗(yàn)?zāi)康摹?43
16.2 實(shí)驗(yàn)準(zhǔn)備 243
16.3 實(shí)驗(yàn)原理 243
16.3.1 計(jì)時(shí)器中斷和軟件中斷 243
16.3.2 計(jì)時(shí)器中斷和軟件中斷示例程序 244
16.3.3 外部中斷 244
16.3.4 外部中斷示例程序 245
16.4 實(shí)驗(yàn)步驟 246
16.4.1 在HBird SDK中運(yùn)行計(jì)時(shí)器中斷與軟件中斷示例程序 246
16.4.2 在Nuclei Studio中運(yùn)行計(jì)時(shí)器中斷與軟件中斷示例程序 247
16.4.3 在HBird SDK中運(yùn)行外部中斷示例程序 249
16.4.4 在Nuclei Studio中運(yùn)行外部中斷示例程序 251
第 17章 FreeRTOS的移植與示例程序運(yùn)行 253
17.1 RTOS概述 253
17.1.1 RTOS的定義 253
17.1.2 基于RTOS的開發(fā)與裸機(jī)開發(fā) 254
17.2 常用的實(shí)時(shí)操作系統(tǒng) 254
17.3 FreeRTOS概述 255
17.4 FreeRTOS在蜂鳥E203 MCU中的移植 257
17.5 FreeRTOS示例程序的運(yùn)行 261
17.5.1 FreeRTOS示例程序 261
17.5.2 在HBird SDK中運(yùn)行FreeRTOS示例程序 261
17.5.3 在Nuclei Studio中運(yùn)行FreeRTOS示例程序 262
第 18章 獲取更多資源 265
18.1 開源蜂鳥E203 MCU文檔資源 265
18.2 開源蜂鳥E203 MCU嵌入式開發(fā)實(shí)驗(yàn) 265
18.3 開源蜂鳥E203處理器教學(xué)資源 266
18.4 開源蜂鳥E203論壇 266