第1章 嵌入式系统基础 1
1.1嵌入式系统概述 1
1.1.1嵌入式系统的历史 1
1.1.2嵌入式系统的定义 2
1.1.3嵌入式系统的特点 3
1.2嵌入式系统组成 4
1.2.1嵌入式系统硬件 4
1.2.2嵌入式系统开发 9
1.3嵌入式操作系统概述 11
1.3.1嵌入式操作系统的发展 11
1.3.2典型的嵌入式操作系统 12
1.3.3嵌入式操作系统选型 18
1.4小结 19
第2章 PXA27x处理器与组成单元 20
2.1 XScale架构处理器概述 20
2.1.1什么是Intel XScale 20
2.1.2 XScale处理器系列 21
2.2 PXA27x处理器结构 23
2.2.1电源管理和时钟管理 25
2.2.2内部存储器 26
2.2.3中断控制器 26
2.2.4操作系统定时器 26
2.2.5脉宽调制PWM单元 27
2.2.6实时时钟单元 27
2.2.7通用I/O接口 28
2.2.8存储器控制器 28
2.2.9 DMA控制器 28
2.2.10同步串行端口 29
2.2.11 LCD控制器 29
2.3系统结构 30
2.3.1中断控制寄存器 30
2.3.2执行监控寄存器 30
2.3.3其他寄存器 30
2.4信号描述 31
2.5小结 39
第3章 PXA27x电源与时钟管理 40
3.1 PXA27x时钟电源信号描述 40
3.2复位管理操作 43
3.2.1复位的类型 43
3.2.2电源上电复位 43
3.2.3硬件复位 44
3.2.4看门狗复位 44
3.2.5 GPIO复位 45
3.3时钟管理操作 47
3.3.1外部时钟源的选择 49
3.3.2改变时钟频率的方法 50
3.4电源管理操作 51
3.4.1电源控制接口信号 51
3.4.2改变电源模式的方法 51
3.5电源管理寄存器 52
3.5.1电源管理寄存器描述 52
3.5.2时钟管理寄存器描述 55
3.5.3协处理器相关寄存器描述 60
3.6小结 61
第4章 PXA27x主要功能单元的开发和应用 62
4.1 PXA27x系统核心板电路 64
4.1.1 PXA27x处理器电源及时钟 64
4.1.2存储器及外围接口电路 67
4.2 PXA27x系统扩展板电路 78
4.3 PXA27x硬件资源分配 96
4.4 ARM指令 98
4.4.1常用ARM指令的功能介绍 98
4.4.2 ARM汇编程序编程实例 100
4.5 I/O端口驱动发光二极管跑马灯 105
4.5.1 PXA270的输入/输出端口 105
4.5.2输入/输出端口寄存器 106
4.5.3通用输入/输出端口两种应用电路与LED跑马灯电路 113
4.5.4跑马灯应用程序编程实例 114
练习题 117
4.6 PXA27x输入键盘测试 117
4.6.1键盘介绍 117
4.6.2键盘接口相关寄存器 119
4.6.3按键应用程序编程实例 119
练习题 124
4.7 PWM功能模块 125
4.7.1 PWM简介 125
4.7.2 PXA270的PWM控制器 125
4.7.3 PWM实验相关寄存器 126
4.7.4接口电路设计 127
4.7.5 PWM应用程序编程实例 127
练习题 129
4.8实时时钟 130
4.8.1 PXA270的实时时钟单元 130
4.8.2 PXA270的实时时钟相关寄存器 130
4.8.3实时时钟接口应用电路 131
4.8.4实时时钟应用程序编程实例 131
4.9 IIC通信 135
4.9.1 IIC总线介绍 135
4.9.2 PXA270的IIC控制器 138
4.9.3 IIC总线相关寄存器描述 138
4.9.4 IIC电路设计 140
4.9.5 IIC应用编程实例 140
练习题 144
4.10模/数转换 145
4.10.1模/数转换原理 145
4.10.2 PXA27x模/数转换的解决方案 146
4.10.3 A/D转换及音频电路设计 148
4.10.4 A/D转换应用程序编程 148
练习题 151
4.11 SDRAM测试 151
4.11.1 SDRAM实验原理 151
4.11.2 PXA27x的SDRAM控制时序 152
4.11.3 SDRAM实验相关寄存器 154
4.11.4 SDRAM应用程序编程实例 158
练习题 159
4.12 Nor Flash存储访问 159
4.12.1 Nor Flash简介 159
4.12.2 Nor Flash读/写时序 162
4.12.3 Nor Flash应用程序实例 167
练习题 171
4.13 Nand Flash存储访问 172
4.13.1 Nand Flash简介 172
4.13.2 PXA270的N and Flash原理图 175
4.13.3 Nand Flash应用程序编程实例 175
练习题 180
4.14串口通信 180
4.14.1 UART异步串口简介 180
4.14.2 PXA270的UART控制器 182
4.14.3 PXA270的UART相关寄存器 183
4.14.4 UART串行通信电路设计 196
4.14.5 UART串行通信应用编程实例 197
练习题 201
4.15定时器中断 201
4.15.1 ARM相关寄存器概述 201
4.15.2 ARM的异常中断类型 207
4.15.3异常中断响应过程和返回过程 208
4.15.4异常中断程序的安装 209
4.15.5 PXA270的中断控制器及相关寄存器描述 209
4.15.6定时器中断应用编程 223
练习题 226
4.16看门狗Watchdog 226
4.16.1 Watchdog简述 226
4.16.2 PXA270的Watchdog及其相关寄存器 227
4.16.3 Watchdog应用编程实例 228
练习题 229
4.17触摸屏控制 230
4.17.1触摸屏简介 230
4.17.2触摸屏的坐标 231
4.17.3 PXA270的触摸屏控制器接口 232
4.17.4触摸屏应用程序编程实例 232
练习题 235
4.18 Bootloader测试 235
4.18.1实验原理 235
4.18.2 Bootloader应用编程 237
练习题 244
4.19 GPRS/GSM测试分析 245
4.19.1 GPRS简介 245
4.19.2 GSM工作原理 245
4.19.3 AT命令语法 246
4.19.4 SMS短消息发送和接收模式 246
4.19.5 GPRS/GSM发短消息应用编程实例 248
练习题 253
4.20 GPS测试 253
4.20.1 GPS原理 254
4.20.2 GPS定位信息的提取 254
4.21 PXA27x LCD控制接口 255
4.21.1 LCD控制器 255
4.21.2 PXA270 LCD控制器涂层功能 258
4.21.3 PXA27x LCD相关寄存器 260
4.21.4 PXA27x LCD时序的定义 262
4.22小结 262
第5章 PXA27x的Bootloader启动代码分析 263
5.1 Bootloader 263
5.1.1 Bootloader概述 263
5.1.2常见的Linux Bootloader 264
5.2 Bootloader之Blob 265
5.2.1 Blob概述 265
5.2.2 configure.in配置文件 270
5.2.3 Makefile.am文件分析 275
5.2.4 /acconfig.h文件分析 276
5.2.5 Blob代码结构分析 277
5.2.6 PXA27x平台Blob启动第1阶段 278
5.2.7 PXA27x平台Blob启动第2阶段 282
5.2.8 Blob中添加用户命令 290
5.2.9定制目标板的Blob 295
5.3 Bootloader之U-Boot 296
5.3.1 U-Boot简介 296
5.3.2 U-Boot主要目录结构 296
5.3.3 U-Boot支持的主要功能 297
5.3.4 U-Boot的编译 298
5.3.5子目录Makefile文件 298
5.3.6顶层目录的Makefile和mkconfig文件 298
5.3.7启动部分代码分析(CPU相关部分) 301
5.3.8开发板相关的代码部分 304
5.3.9初始化部分代码(board.c) 305
5.3.10 U-Boot的命令格式 309
5.3.11 Bootm命令引导内核镜像启动 310
5.3.12内核启动参数 317
5.3.13直接引导zImage方法 320
5.3.14 U-Boot网络通信部分 323
5.3.15关于U-Boot的文件系统 325
5.3.16制作U-Boot的映像文件mkimage 327
5.4 ARM Linux内核的启动过程 328
5.4.1编译生成Linux内核 328
5.4.2 Linux 2.6启动传递命令行 330
5.5 PXA27x平台上的Linux启动过程 332
5.5.1压缩内核的启动 332
5.5.2非压缩内核的启动 347
5.5.3 I/O空间的静态映射 355
5.6小结 362
第6章 Linux操作系统在XScale平台的移植 363
6.1嵌入式Linux开发环境 363
6.1.1 C语言编译器GCC 363
6.1.2调试工具GDB 367
6.1.3程序自动维护工具Make 373
6.2 Linux内核及根文件系统编译 380
6.2.1为什么重新编译内核 380
6.2.2内核编译模式 380
6.2.3内核编译详解 381
6.3 Flash程序烧写 384
6.3.1 JFlashMM的修改和编译 384
6.3.2并口操作 385
6.3.3工具箱 386
6.3.4 JFlashMM的使用方法 392
6.3.5 JFlashMM部分源代码分析 393
6.4小结 401
第7章 Linux设备驱动程序的开发 402
7.1 Linux设备驱动程序开发概述 402
7.1.1 Linux设备驱动的概念 402
7.1.2简单字符设备驱动程序引例 403
7.2基于Linux操作系统的底层驱动技术 406
7.2.1设备驱动概述 407
7.2.2设备类型分类 407
7.2.3设备驱动程序的功能和特性 409
7.2.4设备驱动的数据结构 410
7.2.5设备驱动程序模板与实现 412
7.2.6驱动案例分析 417
7.2.7设备驱动程序中的中断 422
7.2.8驱动程序运行的内核环境 423
7.2.9利用ioctl进行设备管理 424
7.2.10设备驱动程序的使用 428
7.2.11设备驱动程序中I/O端口及内存操作 430
7.3 Linux模块化编程 432
7.3.1模块的实现机制 432
7.3.2模块编程 432
7.4 Linux多进程和多线程编程技术 435
7.4.1 Linux下多进程编程 435
7.4.2 Linux下多线程编程 444
7.5 PXA27x显示接口驱动 455
7.5.1显示驱动的系统分析 457
7.5.2驱动程序底层文件实现的基础 459
7.5.3基于PXA27x的显示功能的软件方案 463
7.5.4 PXA27x驱动底层文件的实现 464
7.6 IDE接口驱动 470
7.6.1 IDE接口引脚定义 472
7.6.2 IDE控制器的寄存器组 474
7.6.3嵌入式处理器的IDE接口扩展 477
7.6.4 Linux的IDE驱动程序接口 482
7.6.5 YLE270上IDE接口驱动程序分析 486
7.7 IIC在Linux下的驱动开发 488
7.7.1 IIC的Linux驱动 488
7.7.2总线驱动 489
7.7.3设备驱动 490
7.7.4 PXA270上IIC总线驱动程序分析 492
7.7.5 IIC总线驱动测试程序 498
7.8 Linux下的终端与串口 500
7.8.1 Linux控制台初始化过程 501
7.8.2 Linux启动命令行与控制定义 509
7.8.3 PXA27x串口电路扩展 510
7.8.4 Linux串口操作 510
7.9 Linux MTD设备驱动 515
7.9.1 MTD驱动程序设置 516
7.9.2设备层和原始设备层的函数调用关系 518
7.9.3 Nand Flash和Nor Flash的比较 519
7.9.4 YLE270平台上Nor Flash驱动程序 521
7.10 Linux按键中断驱动 528
7.10.1键盘扫描原理 528
7.10.2键盘驱动分析 529
7.11 Linux下的SD卡驱动 535
7.11.1 SD卡总线协议及工作原理 535
7.11.2 SD卡寄存器 540
7.11.3 SD卡模式命令 542
7.11.4 SD卡驱动分析 544
7.12网络设备驱动 556
7.12.1嵌入式Linux网络体系结构 556
7.12.2以太网协议 558
7.12.3编写驱动程序的一些基本概念 559
7.12.4网络驱动程序的基本方法 561
7.12.5网络设备的加载 565
7.12.6网络驱动程序中用到的数据结构 566
7.12.7编写Linux网络驱动程序的相关问题 569
7.13小结 570
附录 书中常用术语缩写解析 571
参考文献 575