书籍详情

手把手教你RISC-V CPU 工程与实践(下)

手把手教你RISC-V CPU 工程与实践(下)

作者:芯来科技生态组 著,胡振波 编

出版社:人民邮电出版社

出版时间:2021-09-01

ISBN:9787115569493

定价:¥89.00

购买这本书可以去
内容简介
  本书通过开源蜂鸟E203处理器系统地介绍了RISC-V处理器的嵌入式软件开发方法。全书共3个部分18章,不但给出嵌入式软件开发的全流程,而且介绍了蜂鸟E203处理器的具体使用方法,通过提供大量的实战项目,帮助读者做到理论与实践相结合。本书主要面向嵌入式软件开发工程师,以及对RISC-V感兴趣的初学者和技术爱好者。
作者简介
  胡振波,拥有上海交通大学电子工程系学士学位和微电子学硕士学位。国内RISC-V社区活跃的贡献者,具有超过10处理器研发经验,在Marvell和Synopsys等企业负责过多款高性能和低能耗处理器研发工作。2018年,创办了RISC-V处理器IP和芯片解决方案公司:-芯来科技。
目录
第 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
猜您喜欢

读书导航