图书目录

目录

第1章绪论

1.1计算机系统基本工作原理

1.1.1一个简单的C程序示例

1.1.2冯·诺依曼体系结构计算机

1.2ISA概述

1.2.1ISA的发展

1.2.2CISC与 RISC

1.2.332位与64位架构

1.2.4知名ISA

1.2.5CPU的应用领域

1.3RISCV架构

1.3.1RISCV ISA和社区

1.3.2开源与开放标准的重要性

1.3.3RISC和开放ISA的历史

1.3.4RISCV起源: 美国加利福尼亚大学伯克利分校的架构研究

1.3.5RISCV架构的诞生

1.3.6RISCV国际

1.3.7RISCV生态系统

1.3.8RISCV沟通渠道

1.3.9RISCV交流平台

1.3.10为RISCV作出贡献

1.3.11RISCV ISA规范

1.3.12RISCV的ISA

1.3.13RISCV体系结构的特点

1.3.14RISCV的优势

1.3.15RISCV的应用领域

1.4RISCV的ISA与ARM的ISA的区别

第2章RISCV微控制器与开发平台

2.1RISCV架构指令集的先驱——SiFive公司产品

2.1.1SiFive公司推出的微控制器

2.1.2SiFive公司推出的RISCV架构的微控制器特点

2.1.3SiFive公司的微控制器应用领域

2.1.4HiFive Unmatched Rev B开发板

2.1.5SiFive微控制器所用的RISCV集成开发环境

2.2HPM6750高性能微控制器

2.2.1RISCV微控制器HPM6700/HPM6400系列/ HPM6300系列

2.2.2HPM6750EVK开发板

2.2.3HPM微控制器开发软件

2.3CH32V307微控制器

2.3.1青稞RISCV通用系列产品概览

2.3.2互联型RISCV微控制器CH32V307

2.4开源蜂鸟E203 SoC

2.4.1Freedom E310 SoC简介

2.4.2蜂鸟E203处理器

2.4.3蜂鸟E203处理器的特性

2.4.4蜂鸟E203配套SoC

2.5智能视觉处理平台——昉·惊鸿JH7110

2.5.1JH7110微控制器概述

2.5.2昉·星光 2开发板

2.6玄铁处理器C906

2.6.1玄铁系列微处理器

2.6.2玄铁处理器的应用领域

2.6.3全志D1哪吒开发板

2.6.4玄铁CXX系列CSIRTOS SDK开发包

第3章RISCV架构的中断和异常

3.1中断和异常

3.1.1中断

3.1.2异常

3.1.3广义上的异常

3.2RISCV架构异常处理机制

3.2.1进入异常

3.2.2退出异常

3.2.3异常服务程序

3.3RISCV架构中断

3.3.1中断类型

3.3.2中断处理过程

3.3.3中断委派和注入

3.3.4中断屏蔽

3.3.5中断等待

3.3.6中断优先级与仲裁

3.3.7中断嵌套

3.3.8中断和异常比较

3.4核心局部中断控制器

3.5PLIC管理多个外部中断

3.5.1PLIC的特点

3.5.2PLIC的中断分配

3.5.3PLIC寄存器

3.6RISCV结果预测相关CSR

第4章内存管理与高速缓存

4.1内存管理概述

4.1.1早期的内存管理

4.1.2地址空间的抽象

4.1.3分段机制

4.1.4分页机制

4.2RISCV内存管理

4.3物理内存属性与物理内存保护

4.3.1物理内存属性

4.3.2物理内存保护

4.4高速缓存

4.4.1高速缓存的作用

4.4.2高速缓存的访问时延

4.4.3高速缓存的工作原理

4.4.4虚拟高速缓存与物理高速缓存

第5章TLB管理与原子操作

5.1TLB管理

5.1.1TLB管理策略

5.1.2TLB的工作原理

5.2原子操作

5.2.1原子操作介绍

5.2.2保留加载与条件存储指令

5.2.3LR和SC指令执行失败的情形

5.2.4独占内存访问工作原理

5.2.5原子内存访问操作指令

第6章内存屏障指令

6.1内存屏障指令概述

6.2内存屏障指令产生的原因

6.3RISCV约束条件

6.3.1全局内存次序与保留程序次序

6.3.2RVWMO的约束规则

6.4RISCV中的内存屏障指令

6.4.1使用内存屏障的场景

6.4.2FENCE指令

第7章RISCV指令集

7.1RISCV的ISA

7.1.1模块化的指令子集

7.1.2可配置的通用寄存器组

7.1.3规整的指令编码

7.1.4简洁的存储器访问指令

7.1.5高效地分支跳转指令

7.1.6简洁的子程序调用

7.1.7无条件码执行

7.1.8无分支时延槽

7.1.9零开销硬件循环

7.1.10简洁的运算指令

7.1.11优雅的压缩指令子集

7.1.12特权模式

7.1.13CSR

7.1.14中断和异常

7.1.15矢量指令子集

7.1.16自定制指令扩展

7.1.17RISCV ISA与x86或ARM架构的比较

7.2RISCV 寄存器

7.2.1通用寄存器

7.2.2系统寄存器

7.2.3用户模式下的系统寄存器

7.2.4监管模式下的系统寄存器

7.2.5机器模式下的系统寄存器

7.3汇编语言简介

7.4函数调用规范

7.5RISCV架构及程序的机器级表示

7.5.1RISCV指令系统概述

7.5.2RISCV指令参考卡和指令格式

7.5.3RV32I指令编码格式

7.5.4RISCV的寻址方式

7.5.5学习RISCV汇编语言的必要性

7.5.6RISCV指令概述

7.5.7加载与存储指令

7.5.8程序计数器相对寻址

7.5.9移位操作

7.5.10位操作指令

7.5.11算术指令

7.5.12比较指令

7.5.13无条件跳转指令

7.5.14条件跳转指令

7.5.15CSR 指令

7.5.16寻址范围

第8章RISCV汇编语言程序设计

8.1程序的开发与运行

8.1.1程序设计语言和翻译程序

8.1.2从源程序到可执行目标文件

8.1.3可执行文件的启动和执行

8.2计算机系统的层次结构

8.2.1计算机系统抽象层的转换

8.2.2计算机系统的不同用户

8.3RISCV汇编程序

8.4RISCV汇编程序伪操作

8.5RISCV汇编程序示例

8.5.1定义标签

8.5.2定义宏

8.5.3定义常数

8.5.4立即数赋值

8.5.5标签地址赋值

8.5.6设置浮点舍入模式

8.5.7RISCV环境下的完整实例

8.6RISCV环境下的汇编程序实例

8.6.1汇编程序实例1

8.6.2汇编程序实例2

8.7在C/C++程序中嵌入汇编

8.7.1GCC内联汇编

8.7.2GCC内联汇编输出操作数和输入操作数

8.8RISCV过程调用约定

8.8.1过程调用的执行步骤

8.8.2RISCV中用于过程调用的指令

8.8.3RISCV寄存器使用约定

8.8.4RISCV中的栈和栈帧

8.8.5RISCV的过程调用

第9章嵌入式编译工具

9.1GNU汇编器

9.1.1编译流程与ELF文件

9.1.2简单的汇编程序实例

9.2链接器

9.3链接脚本

9.3.1简单的链接程序实例

9.3.2设置入口点

9.3.3基本概念

9.3.4符号赋值与引用

9.4RISCV的函数调用规范与栈

9.4.1RISCV函数调用规范

9.4.2RISCV栈的管理

9.5GCC工具链

9.5.1GCC工具链概述

9.5.2Binutils

9.5.3C运行库

9.5.4GCC命令行选项

9.6ELF文件分析

9.6.1ELF文件介绍

9.6.2ELF文件的段

9.6.3查看ELF文件

9.6.4反汇编

9.7嵌入式开发的特点

9.7.1交叉编译和远程调试

9.7.2移植 newlib或newlibnano 作为C运行库

9.7.3嵌入式引导程序和中断异常处理

9.7.4嵌入式系统链接脚本

9.7.5减少代码体积

9.7.6支持printf函数

9.7.7提供板级支持包

9.8RISCV GCC工具链

9.8.1RISCV GCC工具链种类

9.8.2riscvnoneembed 工具链下载

9.8.3RISCV GCC工具链的选项

9.8.4RISCV GCC工具链的预定义宏

9.8.5RISCV GCC工具链应用举例

第10章CH32V307嵌入式微控制器

10.1CH32V307微控制器概述

10.1.1青稞V4F微处理器内部结构

10.1.2青稞V4F微处理器的内部寄存器

10.1.3青稞V4内核的CH32系列微控制器

10.1.4CH32V30X系列微控制器的特性

10.2CH32V307系列微控制器外部结构

10.2.1CH32系列微控制器命名规则

10.2.2CH32V307系列微控制器引脚功能

10.3CH32V307微控制器内部结构

10.3.1CH32V307微控制器内部总线结构

10.3.2CH32V307微控制器内部时钟系统

10.3.3CH32V307微控制器内部复位系统

10.3.4CH32V307微控制器内部存储器结构

10.4触摸按键检测

10.4.1TKEY_F功能描述

10.4.2TKEY_F操作步骤

10.5CH32V307微控制器最小系统设计

第11章MounRiver Studio集成开发环境

11.1MounRiver Studio集成开发环境的安装

11.1.1MounRiver Studio集成开发环境的特点

11.1.2MounRiver Studio安装

11.2MounRiver Studio开发运行界面

11.2.1菜单栏

11.2.2快捷工具栏

11.2.3工程目录窗口

11.2.4其他显示窗口

11.3MounRiver Studio工程

11.3.1新建工程

11.3.2打开工程 

11.3.3编译代码

11.4工程调试

11.4.1工程调试快捷工具栏

11.4.2设置断点

11.4.3观察变量

11.5工程下载

11.6CH32V307开发板的选择

11.7CH32V307仿真器的选择

第12章CH32V307 GPIO

12.1CH32V307x GPIO概述

12.1.1GPIO的模块基本结构

12.1.2输入配置

12.1.3输出配置

12.1.4复用功能配置

12.1.5模拟输入配置

12.2GPIO功能

12.2.1工作模式

12.2.2GPIO的初始化功能

12.2.3外部中断

12.2.4复用功能

12.2.5锁定机制

12.3GPIO库函数

12.4CH32V307的GPIO使用流程

12.4.1CH32V307普通GPIO配置

12.4.2CH32V307引脚复用功能配置

12.5CH32V307的GPIO按键输入应用实例

12.5.1触摸按键输入硬件设计

12.5.2触摸按键输入软件设计

12.5.3工程下载

12.5.4串口助手测试

12.5.5WCHLinkUtility独立下载软件

12.6CH32V307的GPIO LED输出应用实例

12.6.1LED输出硬件设计

12.6.2LED输出软件设计

第13章CH32V307外部中断系统

13.1中断的基本概念

13.1.1中断的定义

13.1.2中断的应用

13.2CH32V307中断系统的组成结构

13.2.1CH32V307中断系统的主要特征

13.2.2系统定时器

13.2.3中断和异常的向量表

13.2.4外部中断系统结构

13.3中断控制

13.3.1中断屏蔽控制

13.3.2中断优先级控制

13.4EXTI常用库函数

13.4.1PFIC库函数

13.4.2CH32V307EXTI库函数

13.5外部中断使用流程

13.5.1PFIC配置

13.5.2中断端口设置

13.5.3中断处理

13.6CH32V307的外部中断设计实例

13.6.1CH32V307的外部中断硬件设计

13.6.2CH32V307的EXTI软件设计

第14章CH32V307定时器

14.1CH32V307定时器概述

14.1.1CH32V307定时器的类型

14.1.2CH32V307定时器的计数模式

14.1.3CH32V307定时器的主要功能

14.2CH32V307通用定时器的结构

14.2.1输入时钟

14.2.2核心计数器

14.2.3比较捕获通道

14.2.4通用定时器的功能寄存器

14.2.5通用定时器的外部触发及I/O通道

14.3CH32V307通用定时器的功能

14.3.1输入捕获模式

14.3.2比较输出模式

14.3.3强制输出模式

14.3.4PWM输入模式

14.3.5PWM输出模式

14.3.6单脉冲模式

14.3.7编码器模式

14.3.8定时器同步模式

14.3.9调试模式

14.4通用定时器常用库函数

14.5CH32V307通用定时器使用流程

14.5.1PFIC设置

14.5.2定时器中断配置

14.5.3定时器中断处理

14.6CH32V307定时器应用实例

14.6.1CH32V307的定时器应用硬件设计

14.6.2CH32V307的定时器应用软件设计

参考文献