目录
第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.3RISCV架构
1.3.1RISCV ISA和社区
1.3.2开源与开放标准的重要性
1.3.3RISC和开放ISA的历史
1.3.4RISCV起源: 美国加利福尼亚大学伯克利分校的架构研究
1.3.5RISCV架构的诞生
1.3.6RISCV国际
1.3.7RISCV生态系统
1.3.8RISCV沟通渠道
1.3.9RISCV交流平台
1.3.10为RISCV作出贡献
1.3.11RISCV ISA规范
1.3.12RISCV的ISA
1.3.13RISCV体系结构的特点
1.3.14RISCV的优势
1.3.15RISCV的应用领域
1.4RISCV的ISA与ARM的ISA的区别
第2章RISCV微控制器与开发平台
2.1RISCV架构指令集的先驱——SiFive公司产品
2.1.1SiFive公司推出的微控制器
2.1.2SiFive公司推出的RISCV架构的微控制器特点
2.1.3SiFive公司的微控制器应用领域
2.1.4HiFive Unmatched Rev B开发板
2.1.5SiFive微控制器所用的RISCV集成开发环境
2.2HPM6750高性能微控制器
2.2.1RISCV微控制器HPM6700/HPM6400系列/ HPM6300系列
2.2.2HPM6750EVK开发板
2.2.3HPM微控制器开发软件
2.3CH32V307微控制器
2.3.1青稞RISCV通用系列产品概览
2.3.2互联型RISCV微控制器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智能视觉处理平台——昉·惊鸿JH7110
2.5.1JH7110微控制器概述
2.5.2昉·星光 2开发板
2.6玄铁处理器C906
2.6.1玄铁系列微处理器
2.6.2玄铁处理器的应用领域
2.6.3全志D1哪吒开发板
2.6.4玄铁CXX系列CSIRTOS SDK开发包
第3章RISCV架构的中断和异常
3.1中断和异常
3.1.1中断
3.1.2异常
3.1.3广义上的异常
3.2RISCV架构异常处理机制
3.2.1进入异常
3.2.2退出异常
3.2.3异常服务程序
3.3RISCV架构中断
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.6RISCV结果预测相关CSR
第4章内存管理与高速缓存
4.1内存管理概述
4.1.1早期的内存管理
4.1.2地址空间的抽象
4.1.3分段机制
4.1.4分页机制
4.2RISCV内存管理
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.3RISCV约束条件
6.3.1全局内存次序与保留程序次序
6.3.2RVWMO的约束规则
6.4RISCV中的内存屏障指令
6.4.1使用内存屏障的场景
6.4.2FENCE指令
第7章RISCV指令集
7.1RISCV的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.17RISCV ISA与x86或ARM架构的比较
7.2RISCV 寄存器
7.2.1通用寄存器
7.2.2系统寄存器
7.2.3用户模式下的系统寄存器
7.2.4监管模式下的系统寄存器
7.2.5机器模式下的系统寄存器
7.3汇编语言简介
7.4函数调用规范
7.5RISCV架构及程序的机器级表示
7.5.1RISCV指令系统概述
7.5.2RISCV指令参考卡和指令格式
7.5.3RV32I指令编码格式
7.5.4RISCV的寻址方式
7.5.5学习RISCV汇编语言的必要性
7.5.6RISCV指令概述
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章RISCV汇编语言程序设计
8.1程序的开发与运行
8.1.1程序设计语言和翻译程序
8.1.2从源程序到可执行目标文件
8.1.3可执行文件的启动和执行
8.2计算机系统的层次结构
8.2.1计算机系统抽象层的转换
8.2.2计算机系统的不同用户
8.3RISCV汇编程序
8.4RISCV汇编程序伪操作
8.5RISCV汇编程序示例
8.5.1定义标签
8.5.2定义宏
8.5.3定义常数
8.5.4立即数赋值
8.5.5标签地址赋值
8.5.6设置浮点舍入模式
8.5.7RISCV环境下的完整实例
8.6RISCV环境下的汇编程序实例
8.6.1汇编程序实例1
8.6.2汇编程序实例2
8.7在C/C++程序中嵌入汇编
8.7.1GCC内联汇编
8.7.2GCC内联汇编输出操作数和输入操作数
8.8RISCV过程调用约定
8.8.1过程调用的执行步骤
8.8.2RISCV中用于过程调用的指令
8.8.3RISCV寄存器使用约定
8.8.4RISCV中的栈和栈帧
8.8.5RISCV的过程调用
第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.4RISCV的函数调用规范与栈
9.4.1RISCV函数调用规范
9.4.2RISCV栈的管理
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或newlibnano 作为C运行库
9.7.3嵌入式引导程序和中断异常处理
9.7.4嵌入式系统链接脚本
9.7.5减少代码体积
9.7.6支持printf函数
9.7.7提供板级支持包
9.8RISCV GCC工具链
9.8.1RISCV GCC工具链种类
9.8.2riscvnoneembed 工具链下载
9.8.3RISCV GCC工具链的选项
9.8.4RISCV GCC工具链的预定义宏
9.8.5RISCV 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.5WCHLinkUtility独立下载软件
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的定时器应用软件设计
参考文献
