前置
网络版初稿的译序
出版致谢(按时间顺序)
原作序
前 言
致谢
缩略语
其它参考资料
chpt01-介绍
1.1 ARM Cortex-M3 处理器初探
1.1.1 从Cortex-M3 处理器内核到基于Cortex-M3的MCU
1.1.2 ARM及ARM架构的背景
1.1.2.1 一路走来
1.2 ARM的各种架构版本
1.2.1 处理器命名法
1.3 指令集的发展
1.4 Thumb-2指令集体系体系结构(ISA)
1.5 Cortex-M3处理器的舞台
1.6 深入研究用的读物
chpt02-Cortex-M3概览
2.1 简介
2.2 寄存器组
2.2.1 R0-R12:通用寄存器
2.2.2 Banked R13: 两个堆栈指针
2.2.3 R14:连接寄存器
2.2.4 R15:程序计数寄存器
2.2.5 特殊功能寄存器
2.3 操作模式和特权极别
2.4 内建的嵌套向量中断控制器
2.4.1 可嵌套中断支持
2.4.2 向量中断支持
2.4.3 动态优先级调整支持
2.4.4 中断延迟大大缩短
2.4.5 中断可屏蔽
2.5 存储器映射
2.6 总线接口
2.7 存储器保护单元(MPU)
2.8 指令集
2.9 中断和异常
2.9b 低功耗与高能效( r2p0修订版)
2.10 调试支持
2.11 Cortex-M3的品性简评
2.11.1 高性能
2.11.2 先进的中断处理功能
2.11.3 低功耗
2.11.4 系统特性
2.11.5 调试支持
chpt03-Cortex-M3基础
3.1 寄存器组
3.1.1 通用目的寄存器R0-R7
3.1.2 通用目的寄存器R8-R12
3.1.3 特殊功能寄存器:
3.1.4 堆栈指针R13
3.1.5 连接寄存器R14
3.1.6 程序计数器R15
3.2 特殊功能寄存器组
程序状态寄存器组(PSRs或曰xPSR)
中断屏蔽寄存器组(PRIMASK, FAULTMASK,以及BASEPRI)
控制寄存器(CONTROL)
3.2.1 程序状态寄存器(PSRs或曰PSR)
应用程序PSR(APSR)
中断号PSR(IPSR)
执行PSR(EPSR)
3.2.2 PRIMASK, FAULTMASK和BASEPRI
3.2.3 控制寄存器(CONTROL)
CONTROL[1]
CONTROL[0]
3.3 操作模式
3.4 异常与中断
3.5 向量表
3.6 栈内存操作
3.6.1 堆栈的基本操作
3.7 Cortex-M3的堆栈实现
3.7.1 再论Cortex-M3的双堆栈机制
3.8 复位序列
chpt04-指令集
4.1 汇编语言基础
4.1.1 汇编语言:基本语法
4.1.2 汇编语言:后缀的使用
4.1.3 汇编语言:统一汇编语言书写语法
4.2 指令集
4.2.1 分类指令表
表4.2 16位数据操作指令
表4.3 16位转移指令
表4.4 16位存储器数据传送指令
表4.5 其它16位指令
表4.6 32位数据操作指令
表4.7 32位存储器数据传送指令
表4.8 32位转移指令
表4.9 其它32位指令
4.2.2 未支持的指令
4.3 近距离检视指令
4.3.1 汇编语言:数据传送
LDR伪指令 vs. ADR伪指令
4.3.2 汇编语言:数据处理
表4.18 常见的算术四则运算指令
表4.19 64位乘法指令
表4.20 常用逻辑操作指令
表4.21 移位和循环指令
表4.22 带符号扩展指令
表4.23 数据序翻转指令
表4.24 位段处理及把玩指令
4.3.3 汇编语言:子程呼叫与无条件跳转指令
4.3.4 汇编语言:标志位与条件转移
表 4.25 Cortex-M3 APSR中可以影响条件转移的4个标志位
表4.26 跳转及条件执行判据
4.3.5 汇编语言:指令隔离(barrier)指令和存储器隔离指令
4.3.6 汇编语言:饱和运算
4.4 CM3中一些前卫的指令
4.4.1 MRS和MSR
4.4.2 IF-THEN
4.4.3 CBZ和CBNZ
4.4.4 SDIV和UDIV
4.4.5 REV, REVH,REV16以及REVSH
4.4.6 RBIT
4.4.7 SXTB, SXTH, UXTB, UXTH
4.4.8 BFC/BFI,UBFX/SBFX
4.4.9 LDRD/STRD
4.4.10 TBB,TBH
chpt05-存储器系统
5.1 存储系统功能概览
5.2 存储器映射
5.3 存储器的各种访问属性
5.4 存储器的缺省访问许可
5.5 位带操作
5.5.1 位带操作的优越性
5.5.2 其它数据长度上的位带操作
5.5.3 在C语言中使用位带操作
5.6 非对齐数据传送
5.7 互斥访问
5.8 端模式
chpt06-实现Cortex-M3的全景概貌
6.1 流水线
6.2 详细的框图
6.3 Cortex-M3的总线接口
6.3.1 I-Code总线
6.3.2 D-Code总线
6.3.3 系统总线
6.3.4 外部私有外设总线
6.3.5 调试访问端口总线
6.4 Cortex-M3的其它接口
6.5 外部私有外设总线
6.6 连接方式样板
6.7 复位信号
chpt07-异常
7.1 异常类型
7.2 优先级的定义
抢占优先级与子优先级
7.3 向量表
7.4 中断输入及悬起行为
7.5 Fault类异常
7.5.1 总线Faults
7.5.2 存储器管理faults
7.5.3 用法faults
7.5.4 硬fault
7.5.5 应对faults
7.6 SVC和PendSV
chpt08-NVIC与中断控制
8.1 NVIC概览
8.2 中断配置基础
8.3 中断的使能与除能
8.4 中断的悬起与解悬
8.4.1 优先级
8.4.2 活动状态
8.4.3 特殊功能寄存器PRIMASK与FAULTMASK
8.4.4 BASEPRI寄存器
8.4.5 其它异常的配置寄存器
8.5 中断系统设置全过程的演示
8.6 软件中断
8.7 SysTick定时器
chpt09-中断的具体行为
9.1 中断/异常的响应序列
9.1.1 入栈
9.1.2 取向量
9.1.3 更新寄存器
9.2 异常返回
9.3 嵌套的中断
9.4 咬尾中断
9.5 晚到(的高优先级)异常
9.6 异常返回值
9.7 中断延迟
9.8 异常响应期间的faults
9.8.1 入栈期间
9.8.2 出栈期间
9.8.3 取向量期间
9.8.4 无效返回时
chpt10-Cortex-M3的低层编程
10.1 概览
10.1.1 使用汇编
10.1.2 使用C
10.2 汇编与C的接口
10.3 典型的开发流程
10.4 第一步工作
10.5 与外界互动
10.5.1 “Hello World”示例程序
10.6 使用数据存储器
10.7 使用互斥访问实现信号量操作
10.8 使用位带实现互斥锁操作
10.9 使用位段提取与查表跳转
chpt11-玩转异常系统
11.1 使用中断
11.1.1 建立堆栈
11.1.2 建立向量表
11.1.3 建立中断优先级
11.1.4 使能中断
11.2 异常/中断服务例程
11.3 软件触发中断
11.4 异常服务例程的范例
11.5 使用SVC
11.6 SVC示范:用于输出函数
11.7 在C中使用SVC
chpt12-编程进阶与系统行为
12.1 在系统中使用双堆栈
12.2 双字的堆栈对齐方式
12.3 非基级的线程模式
小心地使用此功能
12.4 性能评估
12.5 当处理器被锁定(Lockup)时
12.5.1 锁定情形下的众生相
12.5.2 避免被锁定
chpt13-编程进阶与系统行为
13.1 SysTick定时器
13.2 电源管理
13.3 多处理机通信
13.3.1 多机同步的深入讨论
13.4 自复位控制
chpt14-存储保护单元MPU
14.0 译者添加的引子
引子1:野指针与C语言
引子2:使命-关键系统
14.1 MPU概览
14.2 MPU的寄存器组
14.3 启用MPU
14.4 MPU的典型设置
14.4.1 使用子region除能的示例
chpt15-调试系统架构
15.1 调试特性概览
侵入式调试(这也是基本的调试机能)
非侵入式调试(大多数人更少接触到的,高级的调试机能)
15.2 CoreSight技术概览
15.2.1 处理器的调试接口
15.2.2 DP模块,AP模块和DAP
15.2.3 跟踪接口
15.2.4 CoreSight的性质
15.3 调试模式
15.4 调试事件
15.5 Cortex-M3中的断点
15.6 调试时访问寄存器
15.7 内核的其它调试特性
chpt16-调试组件
16.1 简介
16.1.1 Cortex-M3的跟踪系统
16.2 跟踪组件:数据观察点与跟踪(DWT)
16.3 跟踪组件:仪器化跟踪宏单元(ITM)
16.3.1 基于ITM的软件跟踪
16.3.2 基于ITM和DWT的硬件跟踪
16.3.3 ITM时间戳
16.4 跟踪组件:嵌入式跟踪宏单元
16.5 跟踪组件:跟踪端口接口单元(TPIU)
16.6 闪存地址重载及断点单元(FPB)
什么是“字面值加载”?
16.7 AHB访问端口
16.8 ROM表
chpt17-开始Cortex-M3开发
17.1 选择一款Cortex-M3产品
17.2 Cortex-M3修订版0与修订版1的区别
17.2.1 修订版1:从JTAG-DP到SWJ-DP
17.3
Cortex-M3修订版1与修订版2的区别
17.3
.1 双字堆栈对齐方式成为缺省值
17.3.2
新增辅助控制寄存器(Auxiliary Control Register)
17.3
.3 ID寄存器的更新
17.3 .4
调试功能
17.3.5 睡眠特性
17.3
.6 使用修订版2带来的好处和注意事项
17.4 开发工具
17.4.1 C编译器
17.4.2 嵌入式操作系统支持
chpt18-ARM7应用程序移植到Cortex-M3
18.1 简介
18.2 系统的个性
18.2.1 存储器映射
18.2.2 中断/异常系统
18.2.3 MPU
18.2.4 系统控制
18.2.5 操作模式
18.3 汇编源程序
18.3.1 Thumb状态
18.3.2 ARM状态
18.4 C源程序
18.5 预编译的目标文件
18.6 优化
chpt19-使用GNU工具链开始Cortex-M3开发
19.1 背景
19.2 获取GNU工具链
19.2.1 开发流程
19.3 示例程序
19.3.1 例1:第一个程序
19.3.2 例2:连接多个文件
19.3.3 例3:一个简单的”Hello World”程序
19.3.4 例4:把数据放到RAM中
19.3.5 例5:纯C程序
19.3.6 例6:纯C程序,带有标准C启动代码
19.4 访问特殊功能寄存器
19.5 使用未支持的指令
19.6 GNU C编译器的内联汇编
chpt20-KEIL RealView Microcontroller Development Kit(RVMDK)使用入门
20.1 简介
20.2 uVison使用入门
20.3 使用UART输出“Hello World”
20.4 测试示例程序
20.5 使用调试器
20.6 指令模拟器
20.7 修改向量表
20.8 使用中断实现的秒表示例程序
apdxA-Cortex-M3指令小结
16位Cortex-M3指令汇总
32位 Coxtex-M3指令汇总
apdxB-
16位Thumb指令及架构版本
表B.1 不同ARM架构版本下对16位指令的改动
apdxC-
Cortex-M3异常快速参考
表C.1 异常一览表
表C.2 自动入栈后堆栈中的内容以及SP的调整
apdxD-
寄存器小结
表D.1 中断控制器类型寄存器ICTR 0xE000_E004
表D.2 SysTick控制及状态寄存器(地址:0xE000_E010)
表D.3 SysTick重装载数值寄存器(地址:0xE000_E014)
表D.4 SysTick当前数值寄存器(地址:0xE000_E018)
表D.5 SysTick校准数值寄存器(地址:0xE000_E01C)
表D.6 SETENA/CLRENA寄存器族
表D.7 SETPEND/CLRPEND寄存器族
表D.8 ACTIVE寄存器族 0xE000_E300_0xE000_E31C
表D.9 中断优先级寄存器阵列 0xE000_E400 – 0xE000_E4EF
表D.10 CPUID寄存器 0xE000_ED00
表D.11 中断控制及状态寄存器ICSR 0xE000_ED04
表D.12 向量表偏移量寄存器(VTOR) 0xE000_ED08
表D.13 应用程序中断及复位控制寄存器(AIRCR) 0xE000_ED0C
表D.14 系统控制寄存器 0xE000_ED10
表D.15 配置与控制寄存器 0xE000_ED14
apdxE-Cortex-M3疑难解答
E.1 简介
E.2 设计Fault服务例程
E.2.1 上报fault状态寄存器
E.2.2 上报入栈的PC
E.2.3 上报fault地址寄存器
E.2.4 其它注意事项
E.3 在C中上报入栈的寄存器和各fault状态寄存器
E.4 理解发生fault的原因