第1章 嵌入式系统概论 1
1.1 概述 1
1.1.1 嵌入式系统的定义 1
1.1.2 后PC时代与元所不在的计算时代 1
1.2 嵌入式系统发展简史 2
1.2.1 微处理器的发展 2
1.2.2 嵌入式系统的发展阶段 3
1.3 嵌入式系统的特点 4
1.4 嵌入式系统的基本分类 5
1.5 嵌入式系统举例 5
1.5.1 低端嵌入式系统 5
1.5.2 中端嵌入式系统 7
1.5.3 高端嵌入式系统 9
1.6 嵌入式系统的基本组成 11
1.6.1 嵌入式系统的硬件组成 12
1.6.2 嵌入式系统的软件组成 13
1.7 嵌入式系统的现状与发展趋势 14
1.7.1 嵌入式系统的现状及主要制约因素 14
1.7.2 嵌入式系统的发展方向 15
1.8 嵌入式系统的相关研究领域 15
1.8.1 嵌入式系统的主干学科领域 15
1.8.2 与嵌入式系统密切关联的科学技术领域 15
1.9 本章小结 18
1.10 习题和思考题 19
第2章 嵌入式微处理器技术 20
2.1 嵌入式处理器基本分类 20
2.1.1 通用型嵌入式微处理器 20
2.1.2 微控制器 22
2.1.3 嵌入式DSP处理器 23
2.1.4 可编程片上系统 23
2.1.5 嵌入式双核/多核处理器 24
2.1.6 可扩展处理平台 26
2.2 嵌入式微处理器的典型技术 27
2.2.1 I/O端口统一编址与特殊功能寄存器 27
2.2.2 哈佛结构 29
2.2.3 桶型移位器 31
2.2.4 正交指令集 32
2.2.5 双密度指令集 33
2.2.6 看门狗定时器 33
2.2.7 边界对准与端序 35
2.2.8 地址重映射 36
2.2.9 FIFO缓冲寄存器 37
2.2.10 主存控制器 38
2.3 主流嵌入式微处理器 39
2.3.1 MIPS RISC嵌入式微处理器 39
2.3.2 PowerPC系列嵌入式微处理器 41
2.3.3 飞思卡尔公司的系列嵌入式微控制器 42
2.3.4 凌动系列嵌入式微处理器 43
2.3.5 ARM系列嵌入式微处理器 45
2.4 本章小结 46
2.5 习题和思考题 46
第3章 ARM处理器体系结构 47
3.1 概述 47
3.1.1 ARM体系结构的版本 47
3.1.2 ARM体系结构版本的变种 48
3.1.3 ARM体系结构版本的命名规则 48
3.1.4 ARM处理器核系列 49
3.2 ARM处理器的结构 52
3.2.1 ARM处理器的RISC特征 52
3.2.2 流水线 53
3.2.3 ARM的工作模式和工作状态 57
3.2.4 ARM寄存器的组织 59
3.3 ARM Cortex处理器 62
3.3.1 ARM Cortex-M3内核 62
3.3.2 采用Cortex-M3核生产的微控制器 66
3.3.3 ARM Cortex-A8内核 66
3.3.4 ARM Cortex-A9内核 67
3.3.5 采用Cortex-A9内核生产的应用处理器 69
3.4 ARM存储器的组织 70
3.4.1 ARM存储器的数据类型和存储格式 70
3.4.2 ARM的存储体系 70
3.4.3 片内存储器的用法 71
3.4.4 协处理器CP15 71
3.4.5 存储管理单元 72
3.4.6 保护单元 78
3.4.7 ARM处理器的Cache 80
3.4.8 快速上下文切换扩展 82
3.4.9 写缓存区 83
3.5 ARM处理器的片上总线规范AMBA 84
3.5.1 AMBA 2.0片上总线的特点 84
3.5.2 AMBA 2.0片上总线的主控单元和从动单元 85
3.5.3 AMBA 2.0总线的时序 85
3.5.4 AMBA 3.0——AXI协议 86
3.6 ARM处理器核的典型范例:ARM7TDMI 86
3.6.1 复位 87
3.6.2 总线周期 87
3.6.3 ARM7TDMI处理器的总线优先级 90
3.7 ARM的异常中断处理 90
3.7.1 ARM的异常中断响应过程 90
3.7.2 从异常中断处理程序返回 92
3.8 本章小结 94
3.9 习题和思考题 94
第4章 嵌入式系统调试技术 95
4.1 嵌入式硬件调试结构和调试技术 95
4.1.1 与通用计算机调试结构的比较 96
4.1.2 调试信道 96
4.1.3 ROM仿真器 97
4.1.4 实时在线仿真 97
4.2 指令集模拟器 97
4.2.1 ARMulator 98
4.2.2 SkyEye 98
4.3 片上调试技术 99
4.3.1 背景调试模式 99
4.3.2 边界扫描测试技术和JTAG接口 100
4.3.3 ARM7TDMI核中的JTAG扫描链 104
4.3.4 嵌入式ICE-RT模块 105
4.3.5 JTAG的断点设置原理 106
4.3.6 Nexus调试标准 107
4.4 嵌入追踪宏单元ETM 108
4.5 基于Angel的调试方案 109
4.5.1 Angel调试系统的组成 109
4.5.2 Angel的两种版本 109
4.5.3 Angel的调试处理流程和调试操作步骤 110
4.6 半主机调试方式 110
4.7 本章小结 112
4.8 习题和思考题 112
第5章 ARM处理器指令集 113
5.1 ARM处理器的指令系统 113
5.1.1 ARM处理器指令系统的主要特征 113
5.1.2 ARM与x86指令系统的比较 114
5.2 ARM指令集的编码格式和语法 114
5.2.1 ARM指令集的编码格式 114
5.2.2 ARM指令的一般语法格式 114
5.2.3 ARM指令的执行条件 114
5.2.4 第2操作数〈Operand2〉说明 116
5.3 ARM处理器的寻址方式 117
5.4 ARM指令的分类说明 121
5.4.1 分支指令 122
5.4.2 Load/Store指令 123
5.4.3 数据处理指令 127
5.4.4 乘法指令 128
5.4.5 前导零计数指令 129
5.4.6 程序状态寄存器指令 129
5.4.7 协处理器指令 130
5.4.8 异常中断指令 131
5.4.9 ARM伪指令 131
5.5 本章小结 133
5.6 习题和思考题 134
第6章 ARM汇编语言程序设计 135
6.1 概述 135
6.1.1 预定义寄存器名及内部变量名 135
6.1.2 ARM汇编语言程序的语句格式 136
6.1.3 ARM汇编语言程序编写规范 139
6.2 ARM汇编语言指示符 139
6.2.1 AREA 140
6.2.2 ENTRY 141
6.2.3 CODE16、CODE32、THUMB和ARM 141
6.2.4 EQU 142
6.2.5 END 142
6.2.6 ALIGN 142
6.2.7 DCB 143
6.2.8 MAP 144
6.2.9 FIELD 144
6.2.10 SPACE 144
6.2.11 DCD和DCDU 145
6.2.12 GBLA、GBLL及GBLS 146
6.2.13 LCLA、LCLL及LCLS 147
6.2.14 SETA、SETL及SETS 147
6.2.15 其他指示符的简单功能描述 147
6.3 ARM汇编语言指示符的编程举例 149
6.3.1 条件分支指示符 149
6.3.2 ASCII字符串比较 149
6.3.3 宏定义指示符 151
6.4 ARM过程调用标准ATPCS和AAPCS 153
6.4.1 寄存器的使用规则 153
6.4.2 堆栈使用规则 153
6.4.3 参数传递规则 154
6.5 典型ARM汇编语言程序举例 154
6.5.1 入门范例 154
6.5.2 基本结构 156
6.5.3 典型的ARM汇编程序范例 159
6.5.4 5级流水线的互锁问题 165
6.6 ARM内嵌汇编 166
6.6.1 内嵌汇编的指令用法 167
6.6.2 内嵌汇编器与armasm汇编器的区别 167
6.7 C/C++与汇编程序的相互调用 168
6.7.1 C/C++程序调用汇编程序 169
6.7.2 汇编程序调用C程序 169
6.7.3 汇编程序调用C++程序 170
6.7.4 C程序调用C++程序 172
6.8 软中断和半主机方式ARM汇编程序设计 173
6.9 GNU格式的ARM汇编语言程序设计 177
6.9.1 GNU格式ARM汇编语言程序的设计要点 177
6.9.2 GNU格式ARM汇编语言程序举例 178
6.10 本章小结 179
6.11 习题和思考题 179
第7章 嵌入式系统开发工具 181
7.1 概述 181
7.1.1 开发ARM嵌入式系统的硬件结构 181
7.1.2 开发工具的基本分类和主要品种 181
7.1.3 集成开发环境 183
7.1.4 CodeWarrior集成开发环境 184
7.2 ARM开发工具概述 185
7.3 ARM映像文件格式 186
7.3.1 ELF文件格式 186
7.3.2 ARM映像文件的组成 188
7.4 ADS的组成与使用 196
7.4.1 命令行开发工具 196
7.4.2 GUI开发工具 200
7.4.3 ADS实用工具 202
7.5 用ADS生成应用程序 203
7.5.1 生成简单应用程序hello 203
7.5.2 生成函数库mathlib 206
7.5.3 生成一个在目标板上运行的定时器程序 207
7.6 RVDS 209
7.6.1 RVDS的组件 210
7.6.2 RVDS使用概览 211
7.6.3 开中断关中断的内嵌ARM汇编函数 212
7.7 GNU交叉工具链 214
7.8 本章小结 214
7.9 习题和思考题 214
第8章 嵌入式外设控制器 216
8.1 嵌入式中断控制器 216
8.1.1 嵌入式中断控制器工作原理 216
8.1.2 ARM Cortex-M3嵌套向量中断控制器 222
8.2 向量中断与非向量中断的入口程序编程示例 225
8.3 嵌入式中断应用程序举例 228
8.4 嵌入式DMA控制器 232
8.4.1 S3C44BOX的DMA控制器 232
8.4.2 S3C44BOX的DMAC相关控制寄存器 234
8.4.3 S3C44BOX的DMA应用程序举例 235
8.5 时钟电源管理器、实时时钟和脉宽调制定时器 237
8.5.1 S3C44BOX的时钟电源管理器 238
8.5.2 S3C241OX的实时时钟 240
8.5.3 实时时钟应用程序概要设计案例 241
8.5.4 S3C44BOX的脉宽调制定时器 244
8.6 本章小结 245
8.7 习题和思考题 245
第9章 嵌入式存储器和接口技术 247
9.1 嵌入式系统常用的半导体存储器 247
9.1.1 闪速存储器 247
9.1.2 静态存储器和同步动态存储器 258
9.2 常用的嵌入式系统总线 265
9.2.1 I2C总线 266
9.2.2 SPI总线接口 268
9.2.3 CAN总线 269
9.3 常用的嵌入式系统接口 271
9.3.1 UART接口 271
9.3.2 通用输入输出接口 277
9.3.3 以太网接口 278
9.4 嵌入式系统常用的外部设备 285
9.4.1 键盘 285
9.4.2 液晶显示器 288
9.4.3 触摸屏 291
9.5 本章小结 297
9.6 习题和思考题 297
参考文献 298