第1章 ARM处理器概述 1
1.1 ARM技术的发展 1
1.2 RISC微处理器的体系结构及其特点 2
1.3 ARM微处理器的指令系统 3
1.4 ARM处理器系列 3
1.4.1 ARM7微处理器系列 4
1.4.2 ARM9微处理器系列 4
1.4.3 ARM9E微处理器系列 4
1.4.4 ARM10E微处理器系列 5
1.4.5 SecurCore微处理器系列 5
1.4.6 Xscale处理器 6
1.5 ARM微处理器的应用系统开发 6
习题1 6
第2章 ARM体系结构 7
2.1 ARM7TDMI程序员模型 7
2.1.1 内核概述 7
2.1.2 译码器与控制逻辑 8
2.1.3 运算器 9
2.1.4 内核接口信号 9
2.2 工作状态与工作模式 13
2.2.1 工作状态 13
2.2.2 ARM的工作模式 14
2.3 ARM和Thumb状态的寄存器组织 15
2.3.1 通用寄存器 15
2.3.2 Thumb状态下的寄存器组织 16
2.3.3 程序计数器 17
2.3.4 程序状态寄存器 17
2.3.5 连接寄存器 19
2.3.6 堆栈指针寄存器 19
2.4 存储器组织结构 20
2.4.1 数据类型和存储数据格式 20
2.4.2 数据总线类型 21
2.4.3 ARM7TDMI总线访问周期 24
2.4.4 指令预取与代码自修改 26
2.4.5 AMBA接口(Advanced Microcontroller Bus Architecture) 27
2.5 异常(Exceptions) 27
2.5.1 异常类型及其处理过程 27
2.5.2 异常优先级(Exception Priorities)和异常向量(Exception Vectors) 29
2.5.3 应用程序中的异常响应 29
2.5.4 异常返回 30
2.6 复位 31
2.7 协处理器接口 31
2.7.1 协处理器概述 31
2.7.2 ARM7TDMI与协处理器的协同关系 32
2.7.3 协处理器使用中的若干问题 32
习题2 33
第3章 ARM指令的特点和寻址方式 34
3.1 ARM指令特点 34
3.2 ARM指令的寻址方式 35
习题3 40
第4章 ARM指令系统概述 42
4.1 分支指令 44
4.2 ARM的数据处理指令 45
4.2.1 算术运算类指令 45
4.2.2 逻辑运算类指令 47
4.2.3 比较类指令 49
4.2.4 测试类指令 49
4.2.5 传送类指令 50
4.2.6 乘法类指令 51
4.3 异常处理指令 53
4.4 ARM的存储器加载/存储指令 54
4.4.1 单寄存器加载 55
4.4.2 单寄存器存储 57
4.4.3 多寄存器加载和多寄存器存储 58
4.4.4 寄存器交换 59
4.5 协处理器指令 60
4.6 ARM状态寄存器访问指令 62
习题4 63
第5章 ARM汇编语言程序设计 64
5.1 ARM汇编语言伪指令 64
5.1.1 符号定义伪指令 64
5.1.2 空间分配伪指令 66
5.1.3 汇编控制伪指令 68
5.1.4 格式控制伪指令 70
5.1.5 ARM伪指令 71
5.1.6 Thumb伪指令 73
5.2 ARM汇编语言语句格式 73
5.2.1 ARM汇编语言中的符号 74
5.2.2 汇编语言程序中的表达式和运算符 76
5.3 ARM语言程序结构 77
5.4 简单的ARM程序设计 78
5.4.1 简单的ARM程序 78
5.4.2 子程序调用程序设计 79
5.4.3 分支程序设计 79
5.4.4 查表与散转程序设计 80
5.4.5 数据串拷贝程序的设计 81
习题5 83
第6章 ARM-Thumb交互工作 84
6.1 交互工作原理 84
6.1.1 交互工作的必要性 84
6.1.2 交互工作的切换指令 84
6.1.3 与状态切换有关的伪指令 85
6.2 交互程序 85
6.2.1 简单的交互程序设计的例子 85
6.2.2 ARM指令头的例子 86
6.2.3 交互子程序调用 86
6.3 ARM v5T扩展 88
6.4 交互子程序和Veneer 89
6.4.1 交互编译选项 89
6.4.2 Veneer 90
习题6 90
第7章 LPC2200系列原理与功能 92
7.1 概述 92
7.1.1 特性 92
7.1.2 结构 93
7.2 管脚分布及信号描述 95
7.3 存储系统 101
7.3.1 存储器映射 101
7.3.2 存储器加速模块(MAM) 105
7.3.3 外部存储器控制器(EMC) 107
7.4 时钟控制电路 110
7.4.1 晶体振荡器 110
7.4.2 PLL及相关寄存器 110
7.4.3 VPB分频器及相关寄存器 113
7.5 复位和功率控制 113
7.5.1 复位 113
7.5.2 功率控制 114
7.6 中断 116
7.6.1 向量中断控制器VIC 116
7.6.2 外部中断 121
7.7 其他片上外围模块 122
习题7 127
第8章 LPC2200系列开发平台 128
8.1 概述 128
8.2 硬件电路的设计及其注意事项 129
8.2.1 电源、晶振及复位信号的处理 129
8.2.2 JTAG接口电路的正确设计 130
8.2.3 模式管脚的连接方法 131
8.2.4 存储器扩展 131
8.2.5 UART扩展 134
8.2.6 CAN总线扩展 135
8.2.7 USB接口 135
8.2.8 硬件系统设计需要考虑的问题 136
习题8 136
第9章 集成开发环境Embest IDE 137
9.1 Embest IDE概述 137
9.1.1 Embest IDE开发环境 137
9.1.2 Embest IDE安装 138
9.1.3 Embest IDE主框架窗口 139
9.2 Embest IDE的编辑 139
9.3 工程管理 140
9.3.1 工程管理的操作 141
9.3.2 工程配置 142
9.4 编译、汇编和链接 144
9.4.1 GNU Tools for ARM选项 144
9.4.2 ARM Build Tools选项 147
9.4.3 工程文件夹的编译设置 147
9.4.4 工程编译、汇编和链接 148
9.5 工程调试 148
9.5.1 调试设置 149
9.5.2 调试 151
9.5.3 Embest IDE附带工具介绍 154
9.6 GNU编译环境下程序的编写 155
9.6.1 移植SDT的汇编程序 155
9.6.2 链接脚本文件 157
习题9 159
第10章 ARM高级语言程序设计基础 160
10.1 C语言与汇编的混合编程 160
10.1.1 ARM过程调用标准ATPCS 160
10.1.2 内嵌汇编器 162
10.1.3 C语言和ARM汇编语言间相互调用 166
10.2 基本I/O程序(含启动代码) 168
10.2.1 启动代码 168
10.2.2 基本I/O主程序 173
10.3 SPI通信程序 175
10.4 串口通信程序 176
10.5 A/D程序 177
10.6 中断程序 178
习题10 179
第11章 嵌入式Linux 180
11.1 嵌入式操作系统概述 180
11.1.1 操作系统的作用 180
11.1.2 操作系统的主要任务 181
11.1.3 嵌入式操作系统的特点 181
11.1.4 典型的嵌入式实时操作系统 184
11.2 嵌入式Linux操作系统内核及其特点 186
11.2.1 GNU及自由软件开发模式 186
11.2.2 Linux内核的引入 187
11.2.3 Linux内核的特点 187
11.2.4 标准Linux内核的变种 188
11.3 Linux与uClinux 190
11.3.1 uClinux名称释义 191
11.3.2 MMU工作机制 191
11.3.3 uClinux与普通Linux系统的异同 192
11.3.4 uClinux的发展前景 193
11.4 构建一个嵌入式Linux系统 194
11.4.1 Linux内核与Linux系统 194
11.4.2 嵌入式Linux系统的特点 195
11.4.3 嵌入式系统的开发 195
11.4.4 开发一个嵌入式Linux系统 197
习题11 198
第12章 嵌入式Linux内核移植和定制 199
12.1 Linux内核代码的基本结构 199
12.2 Linux内核的配置与编译 200
12.2.1 内核配置 201
12.2.2 应用程序配置 203
12.3 嵌入式Linux的引导过程 204
12.4 内核移植的一般步骤 207
12.5 根文件系统的分析与构造 210
12.5.1 根文件系统的组成 210
12.5.2 文件系统的选择 210
12.5.3 根文件系统的生成 211
习题12 211
第13章 嵌入式Linux应用程序的开发 212
13.1 概述 212
13.2 嵌入式应用程序的开发过程 212
13.3 交叉编译环境的建立 213
13.3.1 Cygwin开发环境 214
13.3.2 交叉编译工具gcc 215
13.4 多程序的编译工具make 218
13.5 交叉调试工具gdb 221
13.5.1 gdb的使用 221
13.5.2 gdb的基本命令 222
13.5.3 gdb的工作过程 223
13.5.4 关于core文件 224
13.5.5 调试运行中的进程 225
习题13 225
第14章 嵌入式Linux驱动程序的开发 226
14.1 概述 226
14.2 将设备驱动程序纳入到文件系统中 228
14.3 设备驱动程序的编程框架及函数调用接口 229
14.3.1 设备驱动程序开发的特性与共性 229
14.3.2 程序框架及解释 229
14.4 设备驱动程序的实例 236
14.5 设计自己的驱动程序 244
14.5.1 设备的功能 244
14.5.2 设备的实现 245
14.5.3 其他驱动程序相关技术 255
14.5.4 动态加载设备驱动程序 257
习题14 258
参考文献 259