第1章 嵌入式系统基础 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统概述 1
1.1.2 嵌入式系统的组成和特点 2
1.1.3 嵌入式系统的应用领域 3
1.1.4 嵌入式系统的发展趋势 5
1.2 嵌入式处理器 5
1.2.1 嵌入式系统的分类 5
1.2.2 嵌入式处理器的分类和现状 6
1.2.3 ARM处理器 8
1.3 嵌入式操作系统 9
1.3.1 嵌入式操作系统的概念和分类 9
1.3.2 Linux 9
1.3.3 μC/OS-Ⅱ 10
1.3.4 Windows CE 10
1.4 嵌入式系统开发过程 11
1.4.1 嵌入式系统的总体结构 11
1.4.2 嵌入式系统的开发特点 12
1.4.3 嵌入式系统的开发流程 13
1.4.4 嵌入式系统的调试 13
第2章 基于ARM920T核微处理器 17
2.1 ARM处理器简介 17
2.1.1 ARM微处理器系列 17
2.1.2 ARM7系列微处理器 18
2.1.3 ARM9系列微处理器 18
2.1.4 ARM9E系列微处理器 18
2.1.5 ARM10E系列微处理器 19
2.1.6 SecurCore系列微处理器 19
2.1.7 StrongARM系列微处理器 20
2.1.8 Xscale处理器 20
2.2 ARM920T简介 20
2.2.1 ARM920T内核编程模型 21
2.2.2 ARM体系结构的存储器格式 22
2.2.3 处理器模式 22
2.2.4 寄存器组织 23
2.2.5 程序状态寄存器 26
2.2.6 异常(Exceptions) 28
2.2.7 ARM微处理器的指令集 32
2.3 三星S3C2410X处理器详解 57
2.3.1 三星S3C2410X处理器结构简介 57
2.3.2 特殊功能寄存器 59
第3章 基于S3C2410X处理器的嵌入式应用系统设计 67
3.1 基本电路设计 67
3.1.1 电源电路设计 67
3.1.2 复位电路设计 68
3.1.3 晶振电路设计 68
3.2 存储器系统设计 69
3.2.1 8位存储器接口设计 69
3.2.2 SDRAM接口电路设计 71
3.2.3 Flash接口电路设计 72
3.3 S3C2410X的串行通信设计 77
3.3.1 串行口原理及接口技术 77
3.3.2 S3C2410X的UART模块 78
3.3.3 S3C2410X的UART模块软件设计 81
3.4 S3C2410X的键盘及LED驱动设计 83
3.4.1 LED驱动原理及功能 83
3.4.2 键盘驱动 89
3.4.3 键盘及LED驱动软件设计(KeyBoard.c) 89
3.5 S3C2410X的D/A功能应用开发 93
3.5.1 D/A转换器类型 93
3.5.2 MAX504与S3C2410X的接口 93
3.5.3 D/A转换器驱动软件设计 95
第4章 基于ARM9和μC/OS-Ⅱ嵌入式系统设计 98
4.1 μC/OS-Ⅱ的内核 98
4.1.1 μC/OS-Ⅱ内核调度特点 98
4.1.2 任务控制块OS_TCB描述 99
4.1.3 就绪表(Ready List) 100
4.1.4 任务状态 101
4.1.5 任务切换 102
4.1.6 任务调度分析 103
4.1.7 μC/OS-Ⅱ的初始化 104
4.2 μC/OS-Ⅱ的API函数 104
4.2.1 任务类 104
4.2.2 消息类 105
4.2.3 同步类 105
4.2.4 时间类 105
4.2.5 内存操作类 105
4.3 μC/OS-Ⅱ的应用程序开发 106
4.4 μC/OS-Ⅱ在S3C2410X上的移植 107
4.4.1 移植原理 107
4.4.2 移植实现 108
4.5 μC/OS-Ⅱ的API应用 115
4.5.1 任务相关函数的使用 115
4.5.2 任务间同步和通信相关函数的使用 120
4.6 基于μC/OS-Ⅱ操作系统的开发案例 126
4.6.1 绘图 126
4.6.2 系统的消息循环 127
第5章 ARM ADS集成开发环境 130
5.1 ADS 1.2的安装 130
5.1.1 ADS概述 130
5.1.2 ADS 1.2的安装 131
5.2 ADS集成开发环境的使用 133
5.2.1 建立一个新工程 133
5.2.2 配置生成目标 135
5.2.3 编译和连接工程 154
5.3 用AXD进行代码调试 157
第6章 基于ARM9和Linux嵌入式系统设计 160
6.1 嵌入式Linux的开发环境 160
6.1.1 嵌入式Linux开发环境建立 160
6.1.2 嵌入式Linux开发的一般过程 161
6.2 Linux命令及开发工具GNU gcc的使用 162
6.2.1 嵌入式Linux操作系统常用命令 162
6.2.2 Linux开发工具GNU gcc的使用 175
6.2.3 GDB调试器简介 178
6.3 GNU make命令和Makefile文件 180
6.3.1 Makefile文件的规则 181
6.3.2 Makefile文件的命令 188
6.3.3 Makefile文件的变量 190
6.3.4 Makefile文件的条件判断 195
6.3.5 Makefile文件中常用函数 196
6.3.6 Makefile文件中隐含规则 197
6.3.7 子目录Makefile 199
6.4 嵌入式Linux下C语言编程——文件的操作 200
6.4.1 文件的创建和读写 200
6.4.2 文件的各个属性 201
6.4.3 目录文件的操作 202
6.5 嵌入式Linux引导程序 204
6.5.1 Bootloader引导程序 204
6.5.2 VIVI简介 206
6.6 Linux系统在ARM平台上的移植 209
6.6.1 Linux内核结构 209
6.6.2 内核移植 211
6.7 Linux系统及应用程序的烧写 215
6.7.1 JTAG烧写vivi 215
6.7.2 串口下载烧写 216
6.7.3 上传应用程序 219
第7章 嵌入式Linux设备驱动程序开发 221
7.1 嵌入式Linux的设备管理 221
7.1.1 设备驱动和文件系统的关系 222
7.1.2 设备类型 224
7.1.3 设备号 225
7.1.4 设备驱动中的关键数据结构 225
7.1.5 设备驱动开发中的基本函数 229
7.2 设备驱动模块化编程 231
7.2.1 设备驱动程序的开发流程 231
7.2.2 内核空间和用户空间 232
7.2.3 设备注册和初始化 232
7.2.4 中断管理 233
7.2.5 加载和卸载驱动程序 234
7.3 GPIO字符设备驱动程序设计 236
7.3.1 GPIO接口设计 236
7.3.2 LED驱动程序代码分析 238
7.3.3 LED驱动程序加载及测试 240
7.4 A/D转换器驱动程序设计 241
7.4.1 S3C2410X中断控制器 242
7.4.2 S3C2410X中断接口函数及宏定义 245
7.4.3 S3C2410X A/D转换器 248
7.4.4 A/D转换驱动程序设计 250
7.4.5 A/D转换驱动程序的测试 253
7.5 IC卡驱动程序设计 256
7.5.1 AT24CXX系列存储卡读卡器 256
7.5.2 IC卡驱动程序设计 262
7.5.3 IC卡测试程序设计 273
7.6 内核驱动程序设计——触摸屏驱动程序 275
7.6.1 触摸屏原理以及驱动芯片ADS7843 275
7.6.2 触摸屏驱动程序分析 277
7.7 音频驱动程序设计 286
7.7.1 音频文件格式 286
7.7.2 基于IIS接口的音频系统 289
7.7.3 音频驱动程序设计 294
第8章 嵌入式网络设备驱动程序设计 301
8.1 嵌入式网络设备驱动程序 301
8.1.1 Linux网络设备驱动程序的体系结构 301
8.1.2 Linux网络设备驱动程序的数据结构 302
8.1.3 网络驱动程序的基本方法 308
8.2 基于以太网控制器AX88796的网络驱动程序设计 309
8.2.1 基于以太网控制器AX88796的接口设计 309
8.2.2 Linux网络设备驱动程序实例 310
第9章 Qt/Embedded嵌入式图形开发 321
9.1 Qt/Embedded嵌入式图形开发基础 321
9.1.1 Qt/Embedded概述 322
9.1.2 创建Qt/Embedded开发环境 323
9.1.3 Qt设计器简介 327
9.1.4 Qt Designer实例及Qt/E的交叉编译 343
9.2 Qtopia虚拟平台及其在S3C2410s开发板上的移植 350
9.2.1 构建本机Qtopia虚拟平台 350
9.2.2 Qtopia 2.1.1在2410-S上的移植 353
附录A 嵌入式系统应用编程API函数 356
附录B S3C2410X引脚及信号定义 381
参考文献 387