内容简介
第1章 介绍
1.1 ARM Cortex-M3处理器是什么
1.2 ARM和ARM架构的背景
1.2.1 历史简介
1.2.2 架构版本
1.2.3 处理器命名
1.3 指令集开发
1.4 Thumb-2技术和指令集架构
1.5 Cortex-M3处理器应用
1.6 本书的组织结构
1.7 深入阅读
第2章 Cortex-M3综述
2.1 基础
2.2 寄存器
2.2.1 R0~R12:通用目的寄存器
2.2.2 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.10 调试支持
2.11 特点概括
2.11.1 高性能
2.11.2 中断处理的高级特性
2.11.3 低功耗
2.11.4 系统特性
2.11.5 调试支持
第3章 Cortex-M3基础
3.1 寄存器
3.1.1 通用目的寄存器R0~R7
3.1.2 通用目的寄存器R8~R12
3.1.3 栈指针R13
3.1.4 链接寄存器R14
3.1.5 程序计数器R15
3.2 特殊寄存器
3.2.1 程序状态寄存器
3.2.2 PRIMASK、FAULTMASK和BASEPRI寄存器
3.2.3 控制寄存器
3.3 操作模式
3.4 异常和中断
3.5 向量表
3.6 栈存储操作
3.6.1 栈的基本操作
3.6.2 Cortex-M3栈的应用
3.6.3 Cortex-M3的双栈模型
3.7 复位流程
第4章 指令集
4.1 汇编基础
4.1.1 汇编语言:基本语法
4.1.2 汇编语言:后缀的使用
4.1.3 汇编语言:统一汇编语言
4.2 指令列表
4.3 指令描述
4.3.1 汇编语言:传送数据
4.3.2 LDR和ADR伪指令
4.3.3 汇编语言:处理数据
4.3.4 汇编语言:调用和无条件跳转
4.3.5 汇编语言:决断和条件跳转
4.3.6 汇编语言:组合比较和条件跳转
4.3.7 汇编语言:指令屏障和存储器屏障指令
4.3.8 汇编语言:饱和运算
4.4 Cortex-M3上一些有用的指令
4.4.1 MSR和MRS
4.4.2 进一步了解IF-THEN指令块
4.4.3 SDIV和UDIV
4.4.4 REV、REVH和REVSH
4.4.5 位反转
4.4.6 SXTB、SXTH、UXTB和UXTH
4.4.7 位域清除和位域插入
4.4.8 UBFX和SBFX
4.4.9 LDRD和STRD
4.4.10 表格跳转字节和表格跳转半字
第5章 存储器系统
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 端模式
第6章 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 外部PPB
6.3.5 DAP总线
6.4 Cortex-M3上的其他接口
6.5 外部PPB
6.6 典型连接
6.7 复位类型和复位信号
第7章 异常
7.1 异常类型
7.2 优先级定义
7.3 向量表
7.4 中断输入和挂起行为
7.5 错误异常
7.5.1 总线错误
7.5.2 存储器管理错误
7.5.3 使用错误
7.5.4 硬件错误
7.5.5 处理错误
7.6 请求管理调用和可挂起的服务调用
第8章 嵌套向量中断控制器和中断控制
8.1 嵌套向量中断控制器概述
8.2 基本的中断配置
8.2.1 中断使能和清除使能
8.2.2 中断设置挂起和清除挂起
8.2.3 优先级
8.2.4 活跃状态
8.2.5 PRIMASK和FAULTMASK特殊寄存器
8.2.6 BASEPRI特殊寄存器
8.2.7 其他异常的配置寄存器
8.3 设置中断的步骤实例
8.4 软件中断
8.5 SYSTICK定时器
第9章 中断行为
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 中断相关的错误
9.8.1 压栈
9.8.2 出栈
9.8.3 取向量
9.8.4 非法返回
第10章 Cortex-M3编程
10.1 概述
10.2 典型的开发流程
10.3 使用C
10.3.1 使用RealView开发组件的简单C程序实例
10.3.2 使用Keil MDK-ARM编译相同的例程
10.3.3 用C访问存储器映射的寄存器
10.3.4 内在函数
10.3.5 嵌入式汇编和内联汇编
10.4 CMSIS
10.4.1 CMSIS背景
10.4.2 标准化的问题
10.4.3 CMSIS的组织结构
10.4.4 使用CMSIS
10.4.5 CMSIS的优势
10.5 使用汇编
10.5.1 汇编和C的接口
10.5.2 汇编编程的第一步
10.5.3 生成输出
10.5.4 “Hello World”实例
10.5.5 使用数据存储器
10.6 在信号量中使用排他访问
10.7 在信号量中使用位段
10.8 使用位域提取和表格跳转
第11章 异常编程
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
第12章 高级编程特性和系统行为
12.1 运行具有两个独立栈的系统
12.2 双字栈对齐
12.3 非基本线程使能
12.4 性能考虑
12.5 锁定的情况
12.5.1 锁定期间发生了什么
12.5.2 避免锁定
12.6 FAULTMASK
第13章 存储器保护单元
13.1 概述
13.2 MPU寄存器
13.3 设置MPU
13.4 典型设置
第14章 Cortex-M3的其他特性
14.1 SYSTICK定时器
14.2 电源管理
14.2.1 休眠模式
14.2.2 退出休眠特性
14.2.3 唤醒中断控制器
14.3 多处理器通信
14.4 自复位控制
第15章 调试架构
15.1 调试特性概述
15.2 CoreSight概述
15.2.1 处理器调试接口
15.2.2 调试主机接口
15.2.3 DP模块、AP模块和DAP
15.2.4 跟踪接口
15.2.5 CoreSight特点
15.3 调试模式
15.4 调试事件
15.5 Cortex-M3 中的断点
15.6 调试时访问寄存器内容
15.7 其他的内核调试特性
第16章 调试部件
16.1 概述
16.2 跟踪部件:DWT
16.3 跟踪部件:ITM
16.3.1 使用ITM的软件跟踪
16.3.2 使用ITM和DWT的硬件跟踪
16.3.3 ITM时间戳
16.4 跟踪部件:ETM
16.5 跟踪部件:TPIU
16.6 Flash补丁和断点单元
16.6.1 断点特性
16.6.2 Flash补丁特性
16.6.3 比较器
16.7 高级高性能总线访问端口
16.8 ROM表
第17章 Cortex-M3处理器入门
17.1 选择一款Cortex-M3产品
17.2 开发工具
17.2.1 C编译器和调试器
17.2.2 嵌入式OS支持
17.3 Cortex-M3版本0和版本1之间的区别
17.4 Cortex-M3版本1和版本2之间的区别
17.4.1 双字栈对齐的默认配置
17.4.2 辅助控制寄存器
17.4.3 ID寄存器数值更新
17.4.4 调试特性
17.4.5 休眠特性
17.5 版本2新特性的优势和效果
17.6 Cortex-M3和Cortex-M0之间的区别
17.6.1 编程模型
17.6.2 异常和NVIC
17.6.3 指令集
17.6.4 存储器系统特性
17.6.5 调试特性
17.6.6 兼容性
第18章 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 优化
第19章 使用GNU工具链开发Cortex-M3
19.1 背景
19.2 获得GNU工具链
19.3 开发流程
19.4 程序实例
19.4.1 实例1:第一个程序
19.4.2 实例2:链接多个文件
19.4.3 实例3:简单的“Hello World”程序
19.4.4 实例4:RAM中的数据
19.4.5 实例5:C程序
19.4.6 实例6:C实现的重定向
19.4.7 实例7:编写自己的向量表
19.5 访问特殊寄存器
19.6 使用不支持的指令
19.7 GNU C编译器中的内联汇编
第20章 Keil RealView微控制器开发套件入门
20.1 概述
20.2 μVision入门
20.3 通过UART输出“Hello World”消息
20.4 软件测试
20.5 使用调试器
20.6 指令集模拟器
20.7 修改向量表
20.8 使用CMSIS的秒表中断实例
20.9 移植现有程序使用CMSIS
第21章 用NI LabVIEW编程Cortex-M3
21.1 概述
21.2 什么是LabVIEW
21.2.1 典型应用领域
21.2.2 如何使用LabVIEW和 ARM
21.3 开发流程
21.4 LabVIEW工程实例
21.4.1 创建工程
21.4.2 定义输入和输出
21.4.3 创建程序
21.4.4 构建设计并测试应用程序
21.5 LabVIEW如何工作
21.6 LabVIEW的其他特性
21.7 移植到另外一个ARM处理器
附录A Cortex-M3指令集和参考资料
A.1 指令集总结
A.2 关于指令集介绍
A.2.1 操作数
A.2.2 使用PC或SP的限制
A.2.3 灵活的第二个操作数
A.2.4 移位操作
A.2.5 地址对齐
A.2.6 PC相关语句
A.2.7 条件执行
A.2.8 指令宽度选择
A.3 存储器访问指令
A.3.1 ADR
A.3.2 LDR和STR,立即数偏移
A.3.3 LDR和STR,寄存器偏移
A.3.4 LDR和STR,非特权
A.3.5 LDR,PC相关
A.3.6 LDM和STM
A.3.7 PUSH和POP
A.3.8 LDREX和STREX
A.3.9 CLREX
A.4 普通数据处理指令
A.4.1 ADD、ADC、SUB、SBC和RSB
A.4.2 AND、ORR、EOR、BIC和ORN
A.4.3 ASR、LSL、LSR、ROR和RRX
A.4.4 CLZ
A.4.5 CMP和CMN
A.4.6 MOV和MOVN
A.4.7 MOVT
A.4.8 REV、REV16、REVSH和RBIT
A.4.9 TST和TEQ
A.5 乘法和除法指令
A.5.1 MUL、MLA和MLS
A.5.2 UMULL、UMLAL、SMULL和SMLAL
A.5.3 SDIV和UDIV
A.6 饱和指令
A.7 位域指令
A.7.1 BFC和BFI
A.7.2 SBFX和UBFX
A.7.3 SXT和UXT
A.8 跳转和控制指令
A.8.1 B、BL、BX和BLX
A.8.2 CBZ和CBNZ
A.8.3 IT
A.8.4 TBB和TBH
A.9 其他指令
A.9.1 BKPT
A.9.2 CPS
A.9.3 DMB
A.9.4 DSB
A.9.5 ISB
A.9.6 MRS
A.9.7 MSR
A.9.8 NOP
A.9.9 SEV
A.9.10 SVC
A.9.11 WFE
A.9.12 WFI
附录B 16位Thumb指令和架构版本
附录C Cortex-M3异常快速参考
附录D 嵌套向量中断控制器和系统控制块寄存器快速参考
附录E Cortex-M3疑难解答
E.1 概述
E.2 开发错误处理
E.2.1 报告错误状态寄存器
E.2.2 报告压栈PC和其他压栈寄存器
E.2.3 读取错误地址寄存器
E.2.4 清除错误状态位
E.2.5 其他问题
E.3 了解错误的原因
E.4 其他可能的问题
附录F CodeSourcery G++链接器脚本实例
附录G CMSIS内核访问函数参考
G.1 异常和中断编号
G.2 NVIC访问函数
G.3 系统和SYSTICK函数
G.4 内核寄存器访问函数
G.5 CMSIS内在函数
G.6 调试消息输出函数
附录H 调试和跟踪接头
H.1 概述
H.2 20针Cortex调试+ETM接头
H.3 10针Cortex调试接头
H.4 老式的20针IDC接头
H.5 老式的38针Mictor接头
参考文献