第1章 嵌入式系统基础 1
1.1 ARM处理器概述 1
1.1.1 ARM技术的发展 1
1.1.2 RISC微处理器的体系结构及其特点 2
1.1.3 ARM微处理器的指令系统 3
1.1.4 ARM微处理器系列 4
1.1.5 ARM微处理器的应用系统开发 6
1.2 嵌入式系统的基本概念 6
1.2.1 嵌入式系统概念 6
1.2.2 嵌入式系统的组成 6
1.2.3 嵌入式系统的开发流程 10
1.2.4 嵌入式软件的开发环境 12
第2章 ARM体系结构 15
2.1 ARM7TDMI程序员模型 15
2.1.1 内核概述 15
2.1.2 译码与控制逻辑 16
2.1.3 运算器 17
2.1.4 内核接口信号 17
2.1.5 ARM芯片的功能结构 21
2.2 工作状态与工作模式 22
2.2.1 ARM的工作状态 22
2.2.2 ARM的工作模式 23
2.3 ARM和Thumb状态的寄存器组织 23
2.3.1 通用寄存器 23
2.3.2 Thumb状态下的寄存器组织 25
2.3.3 程序计数器 25
2.3.4 程序状态寄存器 26
2.3.5 连接寄存器 28
2.3.6 堆栈指针寄存器 28
2.4 存储器组织结构 28
2.4.1 数据类型和存储数据格式 28
2.4.2 数据总线类型 30
2.4.3 ARM7TDMI总线访问周期 32
2.4.4 指令预取与代码自修改 34
2.4.5 AMBA接口 34
2.5 异常 34
2.5.1 异常类型及其处理过程 35
2.5.2 异常优先级(Exception Priority)和异常向量(Exception Vector) 36
2.5.3 应用程序中的异常响应 37
2.5.4 异常返回 38
2.6 协处理器接口 38
2.6.1 协处理器概述 39
2.6.2 ARM7TDMI与协处理器的协同关系 39
2.6.3 协处理器使用中的若干问题 39
第3章 ARM指令的特点和寻址方式 41
3.1 ARM指令特点 41
3.2 ARM指令的寻址方式 43
第4章 ARM指令系统概述 49
4.1 ARM指令集 49
4.2 分支指令 51
4.3 ARM的数据处理指令 52
4.4 异常处理指令 60
4.5 ARM的存储器加载/存储指令 61
4.5.1 单寄存器加载 62
4.5.2 单寄存器存储 64
4.5.3 多寄存器加载和多寄存器存储 65
4.5.4 寄存器交换 66
4.6 协处理器指令 67
4.7 ARM状态寄存器访问指令 69
第5章 ARM程序设计 71
5.1 ARM汇编语言伪指令 71
5.1.1 符号定义伪指令 71
5.1.2 空间分配伪指令 73
5.1.3 汇编控制伪指令 75
5.1.4 格式控制伪指令 77
5.1.5 ARM伪指令 78
5.1.6 Thumb伪指令 80
5.2 ARM汇编语言语句格式 80
5.2.1 ARM汇编语言的符号 80
5.2.2 汇编语言程序中的表达式和运算符 82
5.3 ARM语言程序结构 84
5.4 简单的ARM程序设计 85
5.4.1 简单的ARM程序 85
5.4.2 子程序调用程序设计 86
5.4.3 分支程序设计 86
5.4.4 查表与散转程序设计 87
5.4.5 数据串拷贝程序的设计 88
5.5 ARM-Thunmb交互工作 89
5.5.1 交互工作原理 89
5.5.2 交互程序 91
5.5.3 交互子程序调用 92
5.6 ARM汇编语言与C语言混合编程 94
5.6.1 ARM过程调用标准ATPCS 94
5.6.2 内嵌汇编器 95
5.6.3 C语言和ARM汇编语言间的相互调用 100
第6章 Keil开发环境的使用 103
6.1 Keil开发工具介绍 103
6.1.1 μVision3集成开发环境 103
6.1.2 操作模式 103
6.1.3 菜单命令、工具栏、快捷键 104
6.2 Keil开发功能的使用 107
6.2.1 创建应用程序 107
6.2.2 工程目标和文件组 114
6.3 使用EnLink仿真LPC23xx控制器 115
6.3.1 开发环境 115
6.3.2 创建一个工程 115
第7章 LPC23XX系统核心应用 120
7.1 系统结构与引脚分布 120
7.1.1 PLC23xx系统结构图 120
7.1.2 PLC2378引脚分布 122
7.2 核心部分组成 130
7.2.1 电源电路 130
7.2.2 复位 131
7.2.3 系统时钟 131
7.2.4 锁相环(PLL) 132
7.2.5 存储映射 139
7.2.6 向量中断管理 146
7.2.7 外部中断 155
7.2.8 IRQ中断的设计实例 157
7.2.9 IRQ中断过程分析 157
第8章 GPIO原理与应用实例 158
8.1 概述 158
8.2 特性 158
8.3 应用 158
8.4 引脚描述 158
8.5 寄存器描述 159
8.6 GPIO使用注意事项 160
8.7 GPIO应用实例 161
8.7.1 循环灯实例 161
8.7.2 按键计数实例 162
8.7.3 简易数字计算器实例 164
第9章 定时器0/定时器1原理与应用实例 175
9.1 概述 175
9.2 特性 175
9.3 引脚描述 176
9.4 结构 176
9.5 寄存器描述 177
9.6 功能框图 182
9.7 使用示例 183
9.8 定时器0/定时器1应用实例 184
9.8.1 “嘀嘀”报警产生实例 184
9.8.2 MIDI音乐发生器实例 186
9.8.3 数字钟实例 191
第10章 脉宽调制(PWM)原理及应用实例 197
10.1 概述 197
10.2 特性 197
10.2.1 单边沿控制的PWM输出规则 199
10.2.2 双边沿控制的PWM输出规则 200
10.3 管脚描述 200
10.4 寄存器描述 200
10.5 PWM基本操作方法 205
10.6 PWM应用实例 205
10.6.1 PWM产生警笛音实例 205
10.6.2 PWM式D/A转换实例 208
第11章 SPI接口原理及应用实例 211
11.1 概述 211
11.2 特性 211
11.3 管脚描述 211
11.4 SPI结构 212
11.5 SPI描述 212
11.5.1 SPI总线描述 212
11.5.2 SPI数据传输 212
11.6 SPI外设描述 213
11.7 寄存器描述 214
11.8 基本操作 216
11.8.1 主机操作 216
11.8.2 从机操作 217
11.9 应用实例 217
11.9.1 串/并转换实例 217
11.9.2 16×16点阵LED屏显示实例 219
第12章 I2C接口原理及应用实例 227
12.1 I2C简介 227
12.1.1 控制字节 228
12.1.2 写操作 228
12.1.3 读操作 228
12.1.4 结束语 229
12.2 概述 229
12.3 特性 229
12.4 引脚描述 229
12.5 结构 230
12.5.1 串行时钟发生器 231
12.5.2 时序和控制 231
12.5.3 控制寄存器 231
12.5.4 状态译码器和状态寄存器 231
12.6 I2C描述 231
12.6.1 总线配置 231
12.6.2 I2C操作模式 232
12.6.3 主I2C模式 233
12.6.4 从I2C模式 237
12.6.5 两种特殊状态 241
12.6.6 仲裁和同步逻辑 241
12.7 寄存器描述 242
12.8 基本操作 245
12.9 初始化举例 246
12.10 应用实例 246
12.10.1 AT24C02的读写实例 246
第13章 A/D转换器 255
13.1 特性 255
13.2 引脚描述 255
13.3 寄存器描述 256
13.4 基本操作 257
13.5 使用示例 257
13.6 应用实例 258
第14章 UART0接口 264
14.1 特性 264
14.2 引脚描述 264
14.3 结构 264
14.4 寄存器描述 265
14.5 使用示例 270
14.6 应用实例 271
第15章 基于LPC2124的具有日历功能的密码锁实例 274
15.1 概述 274
15.1.1 系统功能 274
15.1.2 系统功能的实现 274
15.2 硬件电路的设计 275
15.2.1 电源电路 275
15.2.2 LPC2124的最小系统 275
15.2.3 键盘接口电路 277
15.2.4 LCD液晶显示电路 278
15.2.5 实时日历时钟接口电路 281
15.2.6 提示音功放电路 283
15.2.7 开锁控制电路 284
15.3 软件设计 284
15.3.1 初始化程序设计 285
15.3.2 LCD液晶显示驱动程序设计 287
15.3.3 键盘驱动程序设计 289
15.3.4 实时日历时钟(DS1302)驱动程序设计 291
15.3.5 Timer0的定时中断服务程序设计 293
15.3.6 主程序设计 296
15.3.7 实例总结 308
参考文献 309