第1章 嵌入式系统导论 1
1.1 概述 1
1.1.1 什么是嵌入式系统 1
1.1.2 嵌入式系统的特点及分类 2
1.2 嵌入式微处理器和嵌入式操作系统 4
1.2.1 嵌入式微处理器 4
1.2.2 嵌入式操作系统 5
1.3 嵌入式系统设计过程 9
1.3.1 需求分析 10
1.3.2 规格说明 13
1.3.3 体系结构设计 13
1.3.4 设计硬件构件和软件构件 15
1.3.5 系统集成 15
1.3.6 系统测试 15
小结 16
习题 16
第2章 ARM/Thumb微处理器结构及指令系统 17
2.1 ARM微处理器概述 17
2.1.1 ARM系列微处理器 17
2.1.2 RISC体系结构 20
2.1.3 ARM和Thumb状态 21
2.1.4 寄存器 21
2.1.5 ARM指令集概述 21
2.1.6 Thumb指令集概述 21
2.2 ARM微处理器体系结构 22
2.2.1 数据类型 22
2.2.2 ARM微处理器的工作状态 22
2.2.3 ARM体系结构的存储器格式 23
2.2.4 处理器模式 23
2.2.5 寄存器组织 24
2.2.6 异常 28
2.3 ARM/Thumb指令系统 34
2.3.1 ARM处理器寻址方式 34
2.3.2 ARM指令集介绍 36
2.3.3 Thumb指令集介绍 54
小结 55
习题 55
第3章 程序设计基础 56
3.1 GCC简介 56
3.1.1 GCC组成 56
3.1.2 GCC编译程序的基本过程 57
3.2 C/C++交叉编译器arm-elf-gcc 58
3.2.1 概述 58
3.2.2 命令使用 60
3.3 交叉连接器arm-elf-ld 62
3.3.1 概述 62
3.3.2 命令使用 63
3.3.3 linkcmds链接命令文件 64
3.4 工程管理器make 70
3.4.1 概述 70
3.4.2 命令使用 71
3.4.3 编写一个makefile 72
3.5 交叉汇编器arm-elf-as 76
3.5.1 概述 76
3.5.2 命令使用 77
3.6 汇编语言编程 78
3.6.1 汇编语言 78
3.6.2 宏语句与条件汇编 83
3.6.3 模块化程序设计 86
3.6.4 内存模式 86
3.6.5 StrongARM和ARM7 86
3.7 简单程序设计 88
3.7.1 顺序程序设计 88
3.7.2 分支程序设计 89
3.7.3 循环程序设计 90
3.7.4 子程序设计 91
3.8 混合语言编程 92
3.8.1 如何在C语言内嵌汇编语言 93
3.8.2 C与汇编相互调用 96
小结 99
习题 99
第4章 S3C44B0X CPU管理及附加电路 101
4.1 S3C44B0X简介 101
4.2 时钟和功耗管理 109
4.2.1 概述 109
4.2.2 寄存器定义 111
4.2.3 时钟与电源管理编程 113
4.3 CPU Wrapper和总线特性 114
4.3.1 概述 114
4.3.2 内部SRAM 115
4.3.3 总线优先级 115
4.3.4 写缓冲区操作 116
4.3.5 特殊寄存器 116
4.4 存储器管理 118
4.5 存储时序图 123
4.6 MICETEK EV44B0II开发板简介 126
4.6.1 存储地址空间分配 126
4.6.2 I/O口配置 128
4.6.3 电源、时钟及复位电路 130
4.6.4 MBL(Micetek Boot Loader)介绍 130
小结 131
习题 131
第5章 S3C44B0X接口电路设计与编程 132
5.1 存储器电路设计及编程 132
5.1.1 SDRAM KM416S4020B芯片 132
5.1.2 Flash存储器 132
5.1.3 存储器与CPU的连接 137
5.1.4 SDRAM存储器接口电路与编程 138
5.1.5 Flash存储器接口电路与编程 139
5.2 中断系统电路设计及编程 141
5.2.1 S3C44B0X中断概述 141
5.2.2 中断源及中断模式 142
5.2.3 中断请求及允许 143
5.2.4 中断判优 143
5.2.5 IRQ中断响应模式 145
5.2.6 中断及异常响应处理过程 150
5.2.7 中断特殊寄存器 154
5.2.8 中断程序应用编程 159
5.3 通用I/O接口电路设计及编程 161
5.3.1 概述 161
5.3.2 端口控制寄存器 165
5.3.3 LED接口电路设计及编程 166
5.3.4 键盘接口电路设计及编程 167
5.4 DMA接口电路原理及编程 169
5.4.1 S3C44B0X DMA控制器结构 170
5.4.2 外部DMA请求/应答协议 171
5.4.3 DMA传输模式 172
5.4.4 DMA请求源的选择 173
5.4.5 DMA自动重装模式 173
5.4.6 S3C44B0X芯片的DMA寄存器 174
5.4.7 S3C44B0X DMA编程 177
5.5 PWM计时器接口电路原理及编程 180
5.5.1 概述 180
5.5.2 PWM计时器操作 181
5.5.3 PWM计时器控制寄存器 186
5.5.4 PWM计时器编程 188
5.6 看门狗计时器接口电路原理及编程 190
5.6.1 概述 190
5.6.2 WDT计时器控制寄存器 190
5.6.3 WDT计时器编程 191
5.7 日历时钟接口电路设计及编程 192
5.7.1 概述 192
5.7.2 日历时钟 192
5.7.3 日历时钟寄存器定义 194
5.7.4 日历时钟接口电路设计及编程 197
5.8 LCD控制器 198
5.8.1 LCD工作原理 199
5.8.2 S3C44B0X的内部LCD控制器 199
5.8.3 LCD控制器的操作 201
5.8.4 LCD控制器专用寄存器 203
5.8.5 LCD接口电路设计及编程 209
5.9 触摸屏电路设计及编程 213
5.9.1 触摸屏概述 213
5.9.2 电阻触摸屏原理 213
5.9.3 触摸屏电路控制 213
5.9.4 编程 217
5.9.5 触摸屏与显示器的配合 218
5.10 异步串行通信接口 219
5.10.1 简述 219
5.10.2 中断/DMA请求产生器 220
5.10.3 UART错误状态FIFO 220
5.10.4 UART寄存器 221
5.10.5 编程 225
5.11 A/D转换器 227
5.11.1 A/D转换器概述 227
5.11.2 ADC的相关寄存器 228
5.11.3 A/D转换器电路设计及编程 229
5.12 D/A转换器 230
5.12.1 D/A转换器工作原理 230
5.12.2 DAC0832芯片 231
5.13 IIS总线接口 234
5.13.1 音频系统简介 234
5.13.2 IIS总线概述 234
5.13.3 传输方式 235
5.13.4 声音串口格式 236
5.13.5 采样频率和主时钟 237
5.13.6 IIS操作 238
5.13.7 IIS总线接口寄存器 238
5.13.8 UDA1341TS概述 240
5.13.9 IIS接口及编程 246
小结 252
习题 252
第6章 嵌入式Linux开发 254
6.1 嵌入式Linux概况 254
6.1.1 嵌入式Linux 254
6.1.2 嵌入式Linux的组成 257
6.1.3 嵌入式Linux的版本 257
6.2 μCLinux开发介绍 258
6.2.1 启动模块 258
6.2.2 内核初始化 259
6.2.3 系统调用处理/异常处理 259
6.2.4 驱动程序 259
6.2.5 文件系统 260
6.2.6 内存管理 260
6.2.7 进程管理 261
6.2.8 运行时间库及应用程序 261
6.3 μCLinux启动过程 263
6.4 开发工具介绍 266
6.4.1 安装 267
6.4.2 开发环境的建立 267
6.4.3 调试方法 268
6.5 内核的配置和编译 272
6.5.1 配置内核 272
6.5.2 编译内核 274
6.6 内核的调试 274
6.6.1 下载μCLinux内核 274
6.6.2 几个调试窗口 274
小结 278
习题 278
第7章 进程/线程管理 279
7.1 进程概念及组成 279
7.1.1 进程概念 279
7.1.2 进程的组成 279
7.2 进程调度 280
7.2.1 信号 280
7.2.2 进程状态 283
7.2.3 进程调度 284
7.3 进程运行和控制 285
7.4 进程通信与同步 286
7.4.1 进程通信 286
7.4.2 进程同步 288
7.5 线程概念及分类 288
7.5.1 线程特点 288
7.5.2 线程的基本概念 289
7.5.3 线程的分类 289
7.6 线程基础 290
7.6.1 线程的基本操作函数 290
7.6.2 简单的多线程编程 291
7.7 线程应用中的同步问题 292
7.7.1 特定线程数据 292
7.7.2 互斥锁 292
7.7.3 读写锁 294
7.7.4 记录上锁 294
7.7.5 条件变量 295
7.7.6 信号量 295
小结 295
习题 295
第8章 存储管理 296
8.1 FLAT模式内存管理 296
8.1.1 3种内存管理模型 296
8.1.2 标准Linux的内存管理 297
8.1.3 μCLinux的内存管理 298
8.1.4 μCLinux内存管理的局限性 298
8.2 内存管理模块的启动初始化 299
8.2.1 setup_arch() 299
8.2.2 paging_init() 300
8.2.3 free_area_init() 301
8.2.4 mem_init() 301
8.3 可执行程序的加载 301
8.3.1 用户程序的内存分布 301
8.3.2 reloc段机制 302
8.3.3 FLAT可执行文件格式 303
8.3.4 执行文件加载流程 304
小结 307
习题 307
第9章 文件系统 308
9.1 文件系统结构 308
9.2 文件系统类型 310
9.2.1 ROMFS文件系统 310
9.2.2 RAMFS文件系统 312
9.2.3 JFFS与JFFS2文件系统 312
9.2.4 EXT2文件系统 314
9.3 文件系统目录结构 315
9.3.1 ROMFS文件系统目录结构 315
9.3.2 μCLinux源程序结构 318
9.4 简单编程实例 321
小结 324
习题 324
第10章 设备管理 325
10.1 设备管理结构 325
10.1.1 概述 325
10.1.2 字符设备与块设备 325
10.1.3 主设备号和次设备号 326
10.1.4 Linux设备命名习惯 326
10.2 驱动程序 326
10.2.1 驱动程序基本功能 326
10.2.2 驱动程序的运作过程 327
10.2.3 常用接口函数介绍 327
10.2.4 常用函数原型 328
10.3 驱动程序编写实例 329
10.3.1 设备功能介绍 329
10.3.2 具体实现 329
小结 333
习题 334
第11章 应用程序开发 335
11.1 串口应用程序 335
11.1.1 串口主要函数介绍 336
11.1.2 串口举例 338
11.2 网络应用 340
11.2.1 TCP/IP网络应用 340
11.2.2 Web服务器应用 350
11.3 音频设备应用 354
11.3.1 常用音频文件格式 354
11.3.2 播放WAV文件举例 360
11.4 键盘及LCD显示应用 364
11.4.1 LCD介绍 364
11.4.2 键盘实现 368
11.5 汉字音乐点播应用 368
小结 377
习题 378
第12章 μCLinux在UP-NETARM3000平台上的移植 379
12.1 UP-NETARM3000嵌入式开发平台介绍 379
12.2 μCLinux在UP-NETARM3000上的移植 379
12.2.1 Linux移植准备 379
12.2.2 关于交叉编译环境 380
12.2.3 修改μCLinux内核源码 382
12.2.4 Linux内核裁减 384
12.2.5 内核的编译 392
12.3 内核及根文件系统的烧写 392
12.3.1 配置minicom 392
12.3.2 烧写内核 393
12.3.3 烧写根文件系统 393
小结 394
习题 394
附录A S3C44B0X特殊功能寄存器地址对应表 395
附录B 部分Linux命令 403
附录C LinuxView简介 406
参考文献 411