第1章 ARM Cortex-M处理器简介
1.1 什么是ARM Cortex-M处理器
1.1.1 Cortex-M3和Cortex-M4处理器
1.1.2 Cortex-M处理器家族
1.1.3 处理器和微控制器的区别
1.1.4 ARM和微控制器供应商
1.1.5 选择Cortex-M3和Cortex-M4微控制器
1.2 Cortex-M处理器的优势
1.2.1 低功耗
1.2.2 性能
1.2.3 能耗效率
1.2.4 代码密度
1.2.5 中断
1.2.6 易于使用
1.2.7 可扩展性
1.2.8 调试特性
1.2.9 OS支持
1.2.10 多种系统特性
1.2.11 软件可移植性和可重用性
1.2.12 选择(设备、工具和OS等)
1.3 ARM Cortex-M处理器应用
1.4 ARM处理器和ARM微控制器的资源
1.4.1 ARM网站上有什么
1.4.2 微控制器供应商提供的文档
1.4.3 工具供应商提供的文档
1.4.4 其他资源
1.5 背景和历史
1.5.1 ARM简史
1.5.2 ARM处理器的发展
1.5.3 Thumb ISA的架构版本
1.5.4 处理器命名
1.5.5 关于ARM生态系统
第2章 嵌入式软件开发简介
2.1 ARM微控制器是怎样构成的
2.2 开始时需要准备什么
2.2.1 开发组件
2.2.2 开发板
2.2.3 调试适配器
2.2.4 软件设备驱动
2.2.5 例子
2.2.6 文档和其他资源
2.2.7 其他设备
2.3 软件开发流程
2.4 编译应用程序
2.5 软件流程
2.5.1 轮询
2.5.2 中断驱动
2.5.3 多任务系统
2.6 C程序中的数据类型
2.7 输入、输出和外设访问
2.8 微控制器接口
2.9 Cortex微控制器软件接口标准(CMSIS)
2.9.1 CMSIS简介
2.9.2 CMSIS-Core所做的标准化
2.9.3 CMSIS-Core的组织结构
2.9.4 如何使用CMSIS-Core
2.9.5 CMSIS的优势
2.9.6 CMSIS的多个版本
第3章 技术综述
3.1 Cortex-M3和Cortex-M4处理器的一般信息
3.1.1 处理器类型
3.1.2 处理器架构
3.1.3 指令集
3.1.4 模块框图
3.1.5 存储器系统
3.1.6 中断和异常支持
3.2 Cortex-M3和Cortex-M4处理器的特性
3.2.1 性能
3.2.2 代码密度
3.2.3 低功耗
3.2.4 存储器系统
3.2.5 存储器保护单元
3.2.6 中断处理
3.2.7 OS支持和系统级特性
3.2.8 Cortex-M4的特殊特性
3.2.9 易于使用
3.2.10 调试支持
3.2.11 可扩展性
3.2.12 兼容性
第4章 架构
4.1 架构简介
4.2 编程模型
4.2.1 操作模式和状态
4.2.2 寄存器
4.2.3 特殊寄存器
4.2.4 浮点寄存器
4.3 应用程序状态寄存器
4.3.1 整数状态标志
4.3.2 Q状态标志
4.3.3 GE位
4.4 存储器系统
4.4.1 存储器系统特性
4.4.2 存储器映射
4.4.3 栈存储
4.4.4 存储器保护单元(MPU)
4.5 异常和中断
4.5.1 什么是异常
4.5.2 嵌套向量中断控制器(NVIC)
4.5.3 向量表
4.5.4 错误处理
4.6 系统控制块(SCB)
4.7 调试
4.8 复位和复位流程
第5章 指令集
5.1 ARM Cortex-M处理器指令集的背景简介
5.2 ARM Cortex-M处理器间的指令集比较
5.3 理解汇编语言语法
5.4 指令后缀的使用
5.5 统一汇编语言(UAL)
5.6 指令集
5.6.1 处理器内传送数据
5.6.2 存储器访问指令
5.6.3 算术运算
5.6.4 逻辑运算
5.6.5 移位和循环移位指令
5.6.6 数据转换运算(展开和反序)
5.6.7 位域处理指令
5.6.8 比较和测试
5.6.9 程序流控制
5.6.10 饱和运算
5.6.11 异常相关指令
5.6.12 休眠模式相关指令
5.6.13 存储器屏障指令
5.6.14 其他指令
5.6.15 不支持的指令
5.7 Cortex-M4特有的指令
5.7.1 Cortex-M4的增强DSP扩展简介
5.7.2 SIMD和饱和指令
5.7.3 乘法和MAC指令
5.7.4 打包和解包
5.7.5 浮点指令
5.8 桶形移位器
5.9 在编程中访问特殊寄存器和特殊指令
5.9.1 简介
5.9.2 内在函数
5.9.3 内联汇编和嵌入汇编
5.9.4 使用其他的编译器相关的特性
5.9.5 访问特殊寄存器
第6章 存储器系统
6.1 存储器系统特性简介
6.2 存储器映射
6.3 连接处理器到存储器和外设
6.4 存储器需求
6.5 存储器的端
6.6 数据对齐和非对齐数据访问支持
6.7 位段操作
6.7.1 简介
6.7.2 位段操作的优势
6.7.3 不同数据大小的位段操作
6.7.4 C程序实现的位段操作
6.8 默认的存储器访问权限
6.9 存储器访问属性
6.10 排他访问
6.11 存储器屏障
6.12 微控制器中的存储器系统
第7章 异常和中断
7.1 异常和中断简介
7.2 异常类型
7.3 中断管理简介
7.4 优先级定义
7.5 向量表和向量表重定位
7.6 中断输入和挂起行为
7.7 异常流程简介
7.7.1 接受异常请求
7.7.2 异常进入流程
7.7.3 执行异常处理
7.7.4 异常返回
7.8 中断控制用的NVIC寄存器细节
7.8.1 简介
7.8.2 中断使能寄存器
7.8.3 设置中断挂起和清除中断挂起
7.8.4 活跃状态
7.8.5 优先级
7.8.6 软件触发中断寄存器
7.8.7 中断控制器类型寄存器
7.9 用于异常和中断控制的SCB寄存器细节
7.9.1 SCB寄存器简介
7.9.2 中断控制和状态寄存器(ICSR)
7.9.3 向量表偏移寄存器(VTOR)
7.9.4 应用中断和复位控制寄存器(AIRCR)
7.9.5 系统处理优先级寄存器(SCB->SHP(0~11))
7.9.6 系统处理控制和状态寄存器(SCB->SHCSR)
7.10 用于异常或中断屏蔽的特殊寄存器细节
7.10.1 Primask
7.10.2 Faultmask
7.10.3 Basepri
7.11 设置中断的步骤示例
7.11.1 简单情况
7.11.2 向量表重定位时的情况
7.12 软件中断
7.13 要点和提示
第8章 深入了解异常处理
8.1 简介
8.1.1 关于本章
8.1.2 C实现的异常处理
8.1.3 栈帧
8.1.4 exc_return
8.2 异常流程
8.2.1 异常进入和压栈
8.2.2 异常返回和出栈
8.3 中断等待和异常处理优化
8.3.1 什么是中断等待
8.3.2 多周期指令执行时的中断
8.3.3 末尾连锁
8.3.4 延迟到达
8.3.5 出栈抢占
8.3.6 惰性压栈
第9章 低功耗和系统控制特性
9.1 低功耗设计
9.1.1 低功耗对微控制器有什么意义
9.1.2 低功耗系统需求
9.1.3 Cortex-M3和Cortex-M4处理器的低功耗特点
9.2 低功耗特性
9.2.1 休眠模式
9.2.2 系统控制寄存器(SCR)
9.2.3 进入休眠模式
9.2.4 唤醒条件
9.2.5 退出时休眠特性
9.2.6 挂起发送事件(SEVONPEND)
9.2.7 休眠扩展/唤醒延迟
9.2.8 唤醒中断控制器(WIC)
9.2.9 事件通信接口
9.3 在编程中使用WFI和WFE
9.3.1 何时使用WFI
9.3.2 使用WFE
9.4 开发低功耗应用
9.4.1 降低动态功耗
9.4.2 降低活跃周期
9.4.3 减小休眠模式电流
9.5 SysTick定时器
9.5.1 为什么要有SysTick定时器
9.5.2 SysTick定时器操作
9.5.3 使用SysTick定时器
9.5.4 其他考虑
9.6 自复位
9.7 CPUID基本寄存器
9.8 配置控制寄存器
9.8.1 CCR简介
9.8.2 stkalign位
9.8.3 bfhfnmign位
9.8.4 div_o_trp位
9.8.5 unalign_trp位
9.8.6 usersetmpend位
9.8.7 nonbasethrdena位
9.9 辅助控制寄存器
9.10 协处理器访问控制寄存器
第10章 OS支持特性
10.1 OS支持特性简介
10.2 影子栈指针
10.3 SVC异常
10.4 PendSV异常
10.5 实际的上下文切换
10.6 排他访问和嵌入式OS
第11章 存储器保护单元
11.1 MPU简介
11.1.1 关于MPU
11.1.2 使用MPU
11.2 MPU寄存器
11.2.1 MPU类型寄存器
11.2.2 MPU控制寄存器
11.2.3 MPU区域编号寄存器
11.2.4 MPU基地址寄存器
11.2.5 MPU区域基本属性和大小寄存器
11.2.6 MPU别名寄存器
11.3 设置MPU
11.4 存储器屏障和MPU配置
11.5 使用子区域禁止
11.5.1 允许高效的存储器划分
11.5.2 减少所需的区域总数
11.6 使用MPU时的注意事项
11.6.1 程序代码
11.6.2 数据存储器
11.6.3 外设
11.7 MPU的其他用法
11.8 与Cortex-M0+处理器中的MPU间的差异
第12章 错误异常和错误处理
12.1 错误异常简介
12.2 错误的原因
12.2.1 存储器管理(MEMManage)错误
12.2.2 总线错误
12.2.3 使用错误
12.2.4 HardFault
12.3 使能错误处理
12.3.1 MEMManage错误
12.3.2 总线错误
12.3.3 使用错误
12.3.4 HardFault
12.4 错误状态寄存器和错误地址寄存器
12.4.1 简介
12.4.2 MEMManage错误信息
12.4.3 总线错误信息
12.4.4 使用错误信息
12.4.5 HardFault状态寄存器
12.4.6 调试错误状态寄存器(DFSR)
12.4.7 错误地址寄存器MMFAR和BFAR
12.4.8 辅助错误状态寄存器
12.5 分析错误
12.6 异常处理相关的错误
12.6.1 压栈
12.6.2 出栈
12.6.3 惰性压栈
12.6.4 取向量
12.6.5 非法返回
12.6.6 优先级和压栈或出栈错误
12.7 锁定
12.7.1 什么是锁定
12.7.2 避免锁定
12.8 错误处理
12.8.1 用于调试的HardFault
12.8.2 错误屏蔽
12.9 其他信息
12.9.1 运行具有两个栈的系统
12.9.2 检测栈溢出