书籍详情
《RISC-V CPU处理器入门到实战套装:处理器设计+工程与实践(套装共2册)》[61M]百度网盘|亲测有效|pdf下载
  • RISC-V CPU处理器入门到实战套装:处理器设计+工程与实践(套装共2册)

  • 出版社:人民邮电出版社
  • 作者:胡振波 著,芯来科技生态组 编
  • 出版时间:2021-10-01
  • 热度:5475
  • 上架时间:2025-01-04 08:18:29
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

编辑推荐

RISC-V CPU处理器入门到实战套装,芯来科技创办人胡振波新作,上册讲解CPU处理器设计原理,下册讲解工程实践项目,覆盖RISC-V处理器软硬件开发全流程。

《手把手教你RISC-V CPU(上) 处理器设计》

1.《手把手教你设计CPU——RISC-V处理器篇》延续篇,配套新蜂鸟E203开源项目,加入更多新内容。

2.利用通俗易懂的语言剖析了RISC-V处理器的微架构以及代码实现,为读者揭开CPU设计的神秘面纱。

3.知识体系完整,分为上下两册,覆盖RISC-V处理器软硬件开发的全流程。

4.中国工程院院士倪光南、芯原股份董事长戴伟民为本书作序推荐。


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

1.《手把手教你设计CPU——RISC-V处理器篇》延续篇,配套新蜂鸟E203开源项目,加入更多新内容。

2.书中含有大量动手实践示例程序,从嵌入式开发与工程实践的角度,对如何使用E203 MCU进行详细介绍。

3.知识体系完整,分为上下两册,涵盖RISC-V处理器软硬件开发的全流程。

4.中国工程院院士倪光南、芯原股份董事长戴伟民为本书作序推荐。


内容简介

9787115568007 手把手教你RISC-V CPU(上) 处理器设计 109.80

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

《手把手教你RISC-V CPU(上) 处理器设计》

本书系统地介绍了 CPU 设计技巧和新兴开源RISC-V架构,内容翔实,涵盖开源蜂鸟E203处理器各模块的具体实现,以及可扩展协处理器的实现机制。为了让读者学以致用,本书还集成了大量的实例,用实例把各个模块的实现方式贯穿起来。

本书适合从事CPU设计的工程师和技术爱好者阅读。


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

本书通过开源蜂鸟E203处理器系统地介绍了RISC-V处理器的嵌入式软件开发方法。全书共3个部分18章,不但给出嵌入式软件开发的全流程,而且介绍了蜂鸟E203处理器的具体使用方法,通过提供大量的实战项目,帮助读者做到理论与实践相结合。

本书主要面向嵌入式软件开发工程师,以及对RISC-V感兴趣的初学者和技术爱好者。


作者简介

《手把手教你RISC-V CPU(上) 处理器设计》

胡振波,芯来科技创办人兼执行官,中国RISC-V领域的先行者,拥有丰富的处理器内核开发经验,曾长期就职于外企,担任处理器内核研发核心岗位负责人。其打造的国内RISC-V开源项目——蜂鸟E203,对国内RISC-V的普及和推广起到了巨大的推动作用。以胡振波为核心创办的芯来科技目前已经成为中国先行的RISC-V处理器内核IP和解决方案公司,推出的嵌入式CPU核系列产品处于中国RISC-V处理器研发与产业化的前列。

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

胡振波,拥有上海交通大学电子工程系学士学位和微电子学硕士学位。国内RISC-V社区活跃的贡献者,具有超过10处理器研发经验,在Marvell和Synopsys等企业负责过多款高性能和低能耗处理器研发工作。2018年,创办了RISC-V处理器IP和芯片解决方案公司-----芯来科技。


目录

第 一部分 CPU与RISC-V综述

第 1章 CPU之三生三世 2
1.1 眼看他起高楼,眼看他宴宾客,眼看他楼塌了—CPU众生相 3
1.1.1 ISA—CPU的灵魂 4
1.1.2 CISC架构与RISC架构 5
1.1.3 32位架构与64位架构 6
1.1.4 ISA众生相 6
1.1.5 CPU的领域之分 11
1.2 ISA请扛起这口锅—为什么国产CPU尚未足够成熟 12
1.2.1 MIPS系—龙芯和君正 12
1.2.2 x86系—北大众志、上海兆芯和天津海光 13
1.2.3 Power系—中晟宏芯 14
1.2.4 Alpha系—申威 14
1.2.5 ARM系—飞腾、海思、展讯 14
1.2.6 RISC-V系—平头哥、芯来科技 16
1.2.7 背锅侠ISA 16
1.3 人生已如此艰难,你又何必拆穿—CPU从业者的无奈 18
1.4 无敌者是多么寂寞—ARM统治着的世界 19
1.4.1 独乐乐与众乐乐—ARM公司的盈利模式 19
1.4.2 小个子有大力量—无处不在的Cortex-M系列 22
1.4.3 移动王者—Cortex-A系列在手持设备领域的巨大成功 23
1.4.4 进击的巨人—ARM进军PC与服务器领域的雄心 25
1.4.5 ARM当前发展 26
1.5 东边日出西边雨,道是无晴却有晴—RISC-V登场 26
1.5.1 缘起名校 26
1.5.2 兴于开源 27
1.5.3 本土发展 29
1.6 旧时王谢堂前燕,飞入寻常百姓家—你也可以设计自己的处理器 30
第 2章 大道至简—RISC-V架构之魂 31
2.1 简单就是美—RISC-V架构的设计理念 32
2.1.1 无病一身轻—架构的篇幅 32
2.1.2 能屈能伸—模块化的指令集 34
2.1.3 浓缩的都是精华—指令的数量 34
2.2 RISC-V架构简介 35
2.2.1 模块化的指令集 35
2.2.2 可配置的通用寄存器组 36
2.2.3 规整的指令编码 36
2.2.4 简洁的存储器访问指令 37
2.2.5 高效的分支跳转指令 38
2.2.6 简洁的子程序调用 38
2.2.7 无条件码执行 39
2.2.8 无分支延迟槽 40
2.2.9 零开销硬件循环指令 40
2.2.10 简洁的运算指令 40
2.2.11 优雅的压缩指令子集 41
2.2.12 特权模式 42
2.2.13 CSR 42
2.2.14 中断和异常 42
2.2.15 P扩展指令子集 43
2.2.16 矢量指令子集 43
2.2.17 自定义指令扩展 43
2.2.18 比较 43
2.3 RISC-V软件工具链 44
2.4 RISC-V和其他开放架构有何不同 47
2.4.1 平民英雄—OpenRISC 47
2.4.2 豪门显贵—SPARC 48
2.4.3 身出名门—MIPS 48
2.4.4 名校优生—RISC-V 49
第3章 乱花渐欲迷人眼—盘点RISC-V商业版本与开源版本 50
3.1 各商业版本与开源版本综述 51
3.1.1 Rocket Core 51
3.1.2 BOOM Core 53
3.1.3 Freedom E310 SoC 54
3.1.4 LowRISC SoC 54
3.1.5 PULPino Core与SoC 54
3.1.6 PicoRV32 Core 55
3.1.7 SCR1 Core 56
3.1.8 ORCA Core 56
3.1.9 Andes Core 56
3.1.10 Microsemi Core 56
3.1.11 Codasip Core 57
3.1.12 Nuclei Core 57
3.1.13 蜂鸟E203处理器核与SoC 58
3.2 小结 59
第4章 开源RISC-V—蜂鸟E203处理器核与SoC 60
4.1 与众不同的蜂鸟E203处理器 61
4.2 蜂鸟E203处理器简介—蜂鸟虽小,五脏俱全 62
4.3 蜂鸟E203处理器的性能指标 64
4.4 蜂鸟E203处理器的配套SoC 64
4.5 蜂鸟E203处理器的配置选项 66

第二部分 手把手教你使用Verilog设计CPU
第5章 先见森林,后观树木—蜂鸟E203处理器核设计总览和顶层 70
5.1 处理器硬件设计概述 71
5.1.1 架构和微架构 71
5.1.2 CPU、处理器、Core和处理器核 71
5.1.3 处理器设计和验证 71
5.2 蜂鸟E203处理器核的设计理念 72
5.3 蜂鸟E203处理器核的RTL代码风格 73
5.3.1 使用标准DFF模块例化生成寄存器 73
5.3.2 推荐使用assign语法替代if-else和case语法 75
5.3.3 其他若干注意事项 77
5.4 蜂鸟E203模块层次划分 77
5.5 蜂鸟E203处理器核的源代码 78
5.6 蜂鸟E203处理器核的配置选项 78
5.7 蜂鸟E203处理器核支持的RISC-V指令子集 79
5.8 蜂鸟E203处理器核的流水线结构 79
5.9 蜂鸟E203处理器核的顶层接口 79
5.10 小结 82
第6章 流水线不是流水账—蜂鸟E203处理器核流水线 83
6.1 处理器流水线概述 84
6.1.1 从经典的5级流水线说起 84
6.1.2 可否不要流水线—流水线和状态机的关系 86
6.1.3 深处种菱浅种稻,不深不浅种荷花—流水线的深度 86
6.1.4 向上生长—越来越深的流水线 87
6.1.5 向下生长—越来越浅的流水线 88
6.2 处理器流水线中的乱序 88
6.3 处理器流水线中的反压 88
6.4 处理器流水线中的冲突 89
6.4.1 流水线中的资源冲突 89
6.4.2 流水线中的数据冲突 90
6.5 蜂鸟E203处理器的流水线 91
6.5.1 流水线总体结构 91
6.5.2 流水线中的冲突 92
6.6 小结 92
第7章 万事开头难— 一切从取指令开始 93
7.1 取指概述 94
7.1.1 取指特点 94
7.1.2 如何快速取指 95
7.1.3 如何处理地址不对齐的指令 96
7.1.4 如何处理分支指令 97
7.2 RISC-V架构特点对于取指的简化 102
7.2.1 规整的指令编码格式 102
7.2.2 指令长度指示码放于低位 102
7.2.3 简单的分支跳转指令 103
7.2.4 没有分支延迟槽指令 104
7.2.5 提供明确的静态分支预测依据 105
7.2.6 提供明确的RAS依据 105
7.3 蜂鸟E203处理器的取指实现 106
7.3.1 IFU总体设计思路 106
7.3.2 简单译码 108
7.3.3 简单BPU 110
7.3.4 PC生成 114
7.3.5 访问ITCM和BIU 116
7.3.6 ITCM 120
7.3.7 BIU 120
7.4 小结 121
第8章 一鼓作气,执行力是关键—执行 122
8.1 执行概述 123
8.1.1 指令译码 123
8.1.2 指令执行 123
8.1.3 流水线的冲突 124
8.1.4 指令的交付 124
8.1.5 指令发射、派遣、执行、写回的顺序 124
8.1.6 分支解析 126
8.2 RISC-V架构的特点对于执行的简化 126
8.2.1 规整的指令编码格式 127
8.2.2 优雅的16位指令 127
8.2.3 精简的指令个数 127
8.2.4 整数指令的操作数个数是1或2 127
8.3 蜂鸟E203处理器的执行实现 127
8.3.1 执行指令列表 128
8.3.2 EXU总体设计思路 128
8.3.3 译码 129
8.3.4 整数通用寄存器组 135
8.3.5 CSR 138
8.3.6 指令发射、派遣 139
8.3.7 流水线冲突、长指令和OITF 143
8.3.8 ALU 149
8.3.9 交付 162
8.3.10 写回 162
8.3.11 协处理器扩展 162
8.4 小结 163
第9章 善始者实繁,克终者盖寡—交付 164
9.1 处理器中指令的交付、取消、冲刷 165
9.1.1 指令交付、取消、冲刷 165
9.1.2 指令交付的常见实现策略 166
9.2 RISC-V架构特点对于交付的简化 166
9.3 蜂鸟E203处理器中指令交付的硬件实现 167
9.3.1 分支预测指令的处理 168
9.3.2 中断和异常的处理 171
9.3.3 多周期执行的指令的交付 171
9.4 小结 172
第 10章 让子弹飞一会儿—写回 173
10.1 处理器的写回 174
10.1.1 处理器写回功能简介 174
10.1.2 处理器常见写回策略 174
10.2 蜂鸟E203处理器的写回硬件实现 174
10.2.1 最终写回仲裁 175
10.2.2 OITF模块和长指令写回仲裁模块 176
10.3 小结 179
第 11章 哈弗还是比亚迪—存储器 181
11.1 存储器概述 182
11.1.1 谁说处理器一定要有缓存 182
11.1.2 处理器一定要有存储器 183
11.1.3 ITCM和DTCM 185
11.2 RISC-V架构特点对于存储器访问指令的简化 186
11.2.1 仅支持小端格式 186
11.2.2 无地址自增/自减模式 186
11.2.3 无一次读多个数据和一次写多个数据的指令 186
11.3 RISC-V架构的存储器访问指令 187
11.3.1 存储器读和写指令 187
11.3.2 fence指令和fence.i指令 187
11.3.3 A扩展指令集 187
11.4 蜂鸟E203处理器核的存储器子系统硬件实现 188
11.4.1 存储器子系统总体设计思路 188
11.4.2 AGU 188
11.4.3 LSU 193
11.4.4 ITCM和DTCM 195
11.4.5 A扩展指令集的硬件实现 198
11.4.6 fence与fence.i指令的硬件实现 202
11.4.7 BIU 204
11.4.8 ECC 204
11.5 小结 204
第 12章 黑盒子的窗口—总线接口单元 205
12.1 片上总线协议概述 206
12.1.1 AXI 206
12.1.2 AHB 206
12.1.3 APB 207
12.1.4 TileLink 207
12.1.5 总结比较 207
12.2 自定义总线协议ICB 208
12.2.1 ICB协议简介 208
12.2.2 ICB协议信号 209
12.2.3 ICB协议的时序 209
12.3 ICB的硬件实现 214
12.3.1 一主多从 214
12.3.2 多主一从 215
12.3.3 多主多从 216
12.4 蜂鸟E203处理器核BIU 217
12.4.1 BIU简介 217
12.4.2 BIU的微架构 218
12.4.3 BIU的源代码 218
12.5 蜂鸟E203处理器SoC总线 219
12.5.1 SoC总线简介 219
12.5.2 SoC总线的微架构 220
12.5.3 SoC总线的源代码 220
12.6 小结 221
第 13章 不得不说的故事—中断和异常 222
13.1 中断和异常概述 223
13.1.1 中断概述 223
13.1.2 异常概述 224
13.1.3 广义上的异常 224
13.2 RISC-V架构异常处理机制 226
13.2.1 进入异常 226
13.2.2 退出异常 229
13.2.3 异常服务程序 230
13.3 RISC-V架构中断定义 231
13.3.1 中断类型 231
13.3.2 中断屏蔽 233
13.3.3 中断等待 233
13.3.4 中断优先级与仲裁 234
13.3.5 中断嵌套 235
13.4 RISC-V架构中与中断和异常相关的CSR 236
13.5 蜂鸟E203处理器中异常处理的硬件实现 236
13.5.1 蜂鸟E203处理器的异常和中断实现要点 236
13.5.2 蜂鸟E203处理器支持的中断和异常类型 237
13.5.3 蜂鸟E203处理器对mepc寄存器的处理 237
13.5.4 蜂鸟E203处理器的中断接口 238
13.5.5 蜂鸟E203处理器CLINT微架构及源代码分析 239
13.5.6 蜂鸟E203处理器PLIC微架构及源代码分析 242
13.5.7 蜂鸟E203处理器中交付模块对中断和异常的处理 244
13.6 小结 248
第 14章 最不起眼的其实是最难的—调试机制 249
14.1 调试机制概述 250
14.1.1 交互调试概述 250
14.1.2 跟踪调试概述 252
14.2 RISC-V架构的调试机制 252
14.2.1 调试器软件的实现 253
14.2.2 调试模式 253
14.2.3 调试指令 254
14.2.4 调试模式下的CSR 254
14.2.5 调试中断 254
14.3 蜂鸟E203处理器中的调试机制 254
14.3.1 蜂鸟E203处理器中的交互式调试 254
14.3.2 DTM 255
14.3.3 硬件调试模块 256
14.3.4 调试中断处理 259
14.3.5 调试模式下CSR的实现 260
14.3.6 调试机制指令的实现 261
14.4 小结 262
第 15章 动如脱兔,静若处子—低功耗的诀窍 263
15.1 处理器低功耗技术概述 264
15.1.1 软件层面的低功耗 264
15.1.2 系统层面的低功耗 264
15.1.3 处理器层面的低功耗 265
15.1.4 模块和单元层面的低功耗 265
15.1.5 寄存器层面的低功耗 266
15.1.6 锁存器层面的低功耗 267
15.1.7 SRAM层面的低功耗 267
15.1.8 组合逻辑层面的低功耗 267
15.1.9 工艺层面的低功耗 268
15.2 RISC-V架构的低功耗机制 268
15.3 蜂鸟E203处理器低功耗机制的硬件实现 268
15.3.1 蜂鸟E203处理器在系统层面的低功耗 268
15.3.2 蜂鸟E203处理器层面的低功耗 270
15.3.3 蜂鸟E203处理器在单元层面的低功耗 272
15.3.4 蜂鸟E203处理器在寄存器层面的低功耗 272
15.3.5 蜂鸟E203处理器在锁存器层面的低功耗 275
15.3.6 蜂鸟E203处理器在SRAM层面的低功耗 276
15.3.7 蜂鸟E203处理器在组合逻辑层面的低功耗 277
15.3.8 蜂鸟E203处理器在工艺层面的低功耗 278
15.4 小结 278
第 16章 工欲善其事,必先利其器—RISC-V可扩展协处理器 279
16.1 领域特定架构 280
16.2 RISC-V架构的可扩展性 281
16.2.1 RISC-V架构的预留指令编码空间 281
16.2.2 RISC-V架构的预定义指令 282
16.3 蜂鸟E203处理器的协处理器扩展机制—NICE 282
16.3.1 NICE指令的编码 282

16.3.2 NICE协处理器的接口信号 283
16.3.3 NICE协处理器的流水线接口 284
16.3.4 NICE协处理器的存储器接口 285
16.3.5 NICE协处理器的接口时序 286
16.4 蜂鸟E203处理器的协处理器参考示例 290
16.4.1 示例协处理器的实现需求 290
16.4.2 示例协处理器的自定义指令 291
16.4.3 示例协处理器的硬件实现 292
16.4.4 示例协处理器的软件驱动 292
16.4.5 示例协处理器的性能分析 294

第三部分 开发实战
第 17章 先冒个烟—运行Verilog仿真测试 298
17.1 E203开源项目的代码层次结构 299
17.2 E203开源项目的测试用例 300
17.2.1 riscv-tests自测试用例 300
17.2.2 编译ISA自测试用例 301
17.3 E203 开源项目的测试平台 304
17.4 在测试平台中运行测试用例 304
第 18章 套上壳子上路—更多实践 308

附录A RISC-V架构的指令集 311
附录B RISC-V架构的CSR 341
附录C RISC-V架构的PLIC 351
附录D 存储器模型背景 359
附录E 存储器原子操作指令背景 364
附录F RISC-V指令编码列表 367
附录G RISC-V伪指令列表 374 第 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