第1章 嵌入式系统概述 1
1.1 嵌入式系统 1
1.1.1 现实中的嵌入式系统 1
1.1.2 嵌入式系统的概念 1
1.1.3 嵌入式系统的未来 2
1.2 嵌入式处理器 3
1.2.1 嵌入式处理器简介 3
1.2.2 嵌入式系统的分类 4
1.3 嵌入式操作系统 6
1.3.1 嵌入式操作系统简介 6
1.3.2 嵌入式操作系统基本概念 7
1.3.3 使用实时操作系统的必要性 10
1.3.4 实时操作系统的优缺点 11
1.3.5 常见的嵌入式操作系统 11
思考与练习 16
第2章 嵌入式系统工程设计 17
2.1 嵌入式系统项目开发生命周期 17
2.1.1 识别需求 18
2.1.2 提出方案 20
2.1.3 执行项目 22
2.1.4 结束项目 26
2.2 嵌入式系统工程设计方法简介 27
2.2.1 由上而下与由下而上 27
2.2.2 UML系统建模 27
2.2.3 面向对象OO的思想 28
思考与练习 29
第3章 ARM7体系结构 30
3.1 ARM 30
3.1.1 ARM的体系结构 30
3.1.2 ARM处理器核 32
3.2 ARM7TDMI 33
3.2.1 三级流水线 34
3.2.2 存储器访问 34
3.2.3 存储器接口 34
3.3 ARM7TDMI的模块、内核和功能框图 35
3.4 体系结构直接支持的数据类型 37
3.5 处理器状态 38
3.6 处理器模式 39
3.7 内部寄存器 39
3.7.1 ARM状态寄存器集 40
3.7.2 Thumb状态寄存器集 43
3.8 程序状态寄存器 45
3.8.1 条件代码标志 46
3.8.2 控制位 46
3.8.3 保留位 47
3.9 异常 48
3.9.1 异常入口/出口汇总 48
3.9.2 进入异常 49
3.9.3 退出异常 49
3.9.4 快速中断请求 49
3.9.5 中断请求 50
3.9.6 中止 50
3.9.7 软件中断指令 51
3.9.8 未定义的指令 51
3.9.9 异常向量 52
3.9.10 异常优先级 52
3.10 中断延迟 52
3.10.1 最大中断延迟 52
3.10.2 最小中断延迟 53
3.11 复位 53
3.12 存储器及存储器映射I/O 53
3.12.1 地址空间 54
3.12.2 存储器格式 55
3.12.3 未对齐的存储器访问 56
3.12.4 指令的预取和自修改代码 57
3.12.5 存储器映射的I/O 60
3.13 寻址方式 62
3.14 ARM7指令集 63
3.14.1 ARM指令集 63
3.14.2 Thumb指令集 66
3.15 协处理器接口 68
3.15.1 协处理器接口简介 68
3.15.2 可用的协处理器 69
3.15.3 关于未定义的指令 69
3.16 调试接口 69
3.16.1 典型调试系统 69
3.16.2 调试接口 70
3.16.3 EmbeddedICE-RT 70
3.16.4 扫描链和JTAG接口 71
3.17 ETM接口 71
思考与练习 71
第4章 ARM7TDMI(-S)指令系统 73
4.1 ARM处理器寻址方式 73
4.2 指令集介绍 76
4.2.1 ARM指令集 77
4.2.2 Thumb指令集 105
4.3 本章小结 130
思考与练习 130
第5章 LPC2000系列ARM硬件结构 132
5.1 LPC2000系列简介 132
5.1.1 特性 132
5.1.2 器件信息 133
5.1.3 结构 133
5.2 引脚配置 135
5.2.1 引脚排列及封装信息 135
5.2.2 LPC2114/2124的引脚描述 135
5.2.3 LPC2210/2212/2214的引脚描述 140
5.2.4 引脚功能选择使用示例 147
5.3 存储器寻址 147
5.3.1 片内存储器 147
5.3.2 片外存储器 148
5.3.3 存储器映射 148
5.3.4 预取指中止和数据中止异常 150
5.3.5 存储器映射及引导块 151
5.3.6 启动代码相关部分 153
5.4 系统控制模块 155
5.4.1 系统控制模块功能汇总 155
5.4.2 引脚描述 155
5.4.3 寄存器描述 156
5.4.4 晶体振荡器 156
5.4.5 复位 158
5.4.6 外部中断输入 161
5.4.7 外部中断应用示例 165
5.4.8 存储器映射控制 165
5.4.9 PLL(锁相环) 168
5.4.10 VPB分频器 173
5.4.11 功率控制 174
5.4.12 唤醒定时器 177
5.4.13 启动代码相关部分 177
5.5 存储器加速模块 179
5.5.1 结构 180
5.5.2 操作模式 182
5.5.3 配置 183
5.5.4 寄存器描述 183
5.5.5 使用注意事项 184
5.5.6 启动代码相关部分 184
5.6 外部存储器控制器 185
5.6.1 特性 185
5.6.2 结构 185
5.6.3 引脚描述 186
5.6.4 寄存器描述 187
5.6.5 外部存储器接口 189
5.6.6 典型总线时序 190
5.6.7 外部存储器选择 190
5.6.8 启动代码相关部分 192
5.7 引脚连接模块 193
5.7.1 寄存器描述 193
5.7.2 引脚功能控制 197
5.7.3 启动代码相关部分 198
5.8 向量中断控制器 199
5.8.1 特性 199
5.8.2 功能 199
5.8.3 结构 200
5.8.4 寄存器描述 201
5.8.5 中断源 207
5.8.6 使用注意事项 209
5.8.7 使用示例 210
5.8.8 启动代码相关部分 211
5.9 GPIO 213
5.9.1 特性 213
5.9.2 用途 213
5.9.3 引脚描述 213
5.9.4 寄存器描述 213
5.9.5 使用注意事项 216
5.9.6 使用示例 216
5.10 UART0 216
5.10.1 特性 216
5.10.2 引脚描述 217
5.10.3 应用 217
5.10.4 结构 217
5.10.5 寄存器描述 219
5.10.6 使用示例 227
5.11 UART1 229
5.11.1 特性 229
5.11.2 引脚描述 230
5.11.3 应用 231
5.11.4 结构 231
5.11.5 寄存器描述 232
5.12 I2C接口 242
5.12.1 特性 242
5.12.2 用途 242
5.12.3 引脚描述 242
5.12.4 I2C接口描述 243
5.12.5 I2C操作模式 246
5.12.6 寄存器描述 258
5.13 SPI接口 262
5.13.1 特性 262
5.13.2 引脚描述 262
5.13.3 接口描述 263
5.13.4 结构 269
5.13.5 寄存器描述 269
5.14 定时器0和定时器1 272
5.14.1 特性 272
5.14.2 用途 272
5.14.3 引脚描述 273
5.14.4 结构 274
5.14.5 寄存器描述 274
5.14.6 定时器操作举例 280
5.14.7 使用示例 281
5.15 脉宽调制器 284
5.15.1 特性 284
5.15.2 引脚描述 285
5.15.3 PWM描述 285
5.15.4 结构 286
5.15.5 寄存器描述 289
5.15.6 使用示例 295
5.16 A/D 转换器 297
5.16.1 特性 297
5.16.2 引脚描述 298
5.16.3 寄存器描述 298
5.16.4 操作 301
5.16.5 使用示例 301
5.17 实时时钟 302
5.17.1 特性 302
5.17.2 结构 302
5.17.3 RTC中断 302
5.17.4 闰年计算 303
5.17.5 寄存器描述 304
5.17.6 混合寄存器组 305
5.17.8 完整时间寄存器 307
5.17.8 时间计数器组 308
5.17.9 报警寄存器组 309
5.17.10 基准时钟分频器(预分频器) 310
5.17.11 使用注意事项 312
5.17.12 使用示例 312
5.18 看门狗 316
5.18.1 特性 316
5.18.2 用途 316
5.18.3 使用方法 316
5.18.4 结构 316
5.18.5 寄存器描述 317
5.18.6 使用示例 319
5.19 本章小结 320
思考与练习 320
第6章 接口技术与硬件设计 322
6.1 最小系统 322
6.1.1 框图 322
6.1.2 电源 323
6.1.3 时钟 327
6.1.4 复位及复位芯片配置 327
6.1.5 存储器系统 330
6.1.6 调试与测试接口 330
6.1.7 完整的最小系统 332
6.2 片内外设 335
6.2.1 GPIO(通用I/O) 335
6.2.2 UART和MODEM 340
6.2.3 I2C 342
6.2.4 SPI 350
6.3 总线接口 354
6.3.1 并行SRAM 354
6.3.2 并行Flash 360
6.3.3 USB(D12)接口 374
6.3.4 液晶接口 379
6.3.5 网络接口 390
6.4 其他外设 401
6.4.1 并行打印机接口 401
6.4.2 CF卡及IDE硬盘接口 408
思考与练习 414
第7章 移植μC/OS-Ⅱ到ARM 415
7.1 μC/OS-Ⅱ 415
7.2 移植规划 415
7.2.1 编译器的选择 415
7.2.2 任务模式的取舍 415
7.2.3 支持的指令集 416
7.3 移植μC/OS-Ⅱ 416
7.3.1 移植μC/OS-Ⅱ简介 416
7.3.2 关于头文件includes.h和config.h 417
7.3.3 编写OS_CPU.h 418
7.3.4 编写Cs_cpu_c.c文件 419
7.3.5 编写OS_CPU_A.S 424
7.3.6 关于中断及时钟节拍 427
7.4 移植代码应用到LPC2000 429
7.4.1 编写或获取启动代码 429
7.4.2 挂接SWI软件中断 429
7.4.3 中断及时钟节拍中断 430
7.4.4 编写应用程序 430
思考与练习 432
第8章 嵌入式系统开发平台 433
8.1 嵌入式系统开发平台的建立 433
8.1.1 使用平台开发是大势所趋 433
8.1.2 建立开发平台的方法 437
8.1.3 编写自己的软件模块 437
8.2 数据队列 438
8.2.1 数据队列简介 438
8.2.2 API函数集 438
8.3 串口驱动 443
8.3.1 串口驱动简介 443
8.3.2 API函数集 443
8.4 MODEM接口模块 445
8.4.1 MOIEM简介 445
8.4.2 MODEM的状态 445
8.4.3 API函数集 445
8.5 I2C总线模块 447
8.5.1 I2C简介 447
8.5.2 API函数集 447
8.6 SPI总线模块 449
8.6.1 SPI总线模块简介 449
8.6.2 API函数集 449
8.7 其他软件模块 452
思考与练习 452