第一篇 ARM硬件 3
第1章 概述 3
1.1 嵌入式系统、单片机、ARM及Linux概述 3
1.2 ARM处理器的选择 3
1.3 S3C2410A简介和公版资源 4
1.4 ARM开发工具及调试方法 5
1.4.1 集成开发环境 5
1.4.2 硬件仿真器 6
1.4.3 前后台系统的调试方法 7
1.4.4 嵌入式Linux的开发调试方法 8
1.5 亲自制作实验平台在ARM学习中的意义和可行性 9
第2章 实验平台硬件分析 11
2.1 平台概述及组成 11
2.2 地址空间分配 13
2.2.1 S3C2410A内存映射图 13
2.2.2 AN2410平台地址空间分配 14
2.3 常用元件概述 14
2.3.1 电阻标称值 14
2.3.2 肖特基二极管 18
2.3.3 功率电感 18
2.3.4 铁氧体磁珠 19
2.3.5 自恢复保险丝PPTC 19
2.3.6 有源蜂鸣器和无源蜂鸣器 20
2.4 最小系统板AN2410SSB原理图分析 20
2.4.1 CPU部分 20
2.4.2 BootROM设置和时钟电路 29
2.4.3 JTAG接口电路 30
2.4.4 NANDFlash存储器 30
2.4.5 SDRAM存储器 33
2.4.6 调试串口 34
2.4.7 I0M以太网 35
2.4.8 按键中断和LED电路 38
2.4.9 ADC/PWM_DAC和蜂鸣器控制电路 39
2.4.10 复位电路 39
2.4.11 电源电路 40
2.4.12 最小系统板与底板的接口 42
2.5 底板AN2410MB原理图分析 42
2.5.1 缓冲电路 43
2.5.2 NORFlash存储器 43
2.5.3 USBHost/Device 43
2.5.4 100M以太网 46
2.5.5 pcmcia接口 46
2.5.6 SD卡接口 49
2.5.7 IIS音频电路 50
2.5.8 IIC存储器 51
2.5.9 LCD显示 52
2.5.10 触摸屏 55
2.5.11 RS485总线 55
2.5.12 IrDA、红外遥控发射与学习电路 57
2.5.13 CPLD扩展电路 58
2.5.14 SC16C554串口扩展电路 58
2.5.15 I/O口和红外遥控发射扩展电路 60
2.5.16 电源提供电路 62
2.6 下载板电路 64
2.6.1 S3C2410AFlash烧写工具SJF2410 64
2.6.2 CPLD下载工具ByteBlaster II 64
2.7 S3C2440A与S3C2410A的不同点及注意事项 66
第3章 硬件制作 67
3.1 原理图和PCB绘制过程及心得 67
3.2 PCB常用快捷键 73
3.3 焊接心得 74
第4章 系统核心部分硬件调试 76
4.1 调试步骤及概述 76
4.2 电源/复位/时钟/NANDFlash设置 77
4.3 Multi-ICE仿真器的使用 78
4.3.1 仿真器与目标板硬件安装 78
4.3.2 ADS1.2/Multi-ICEServer安装和配置 78
4.4 处理器内核检测 82
4.5 仿真测试 85
4.6 SDRAM测试 85
4.7 调试串口测试 91
4.8 NANDFlash测试 92
4.9 Flash的烧写 92
4.9.1 SJF2410的安装 92
4.9.2 NANDFlash烧写 93
4.9.3 NORFlash烧写 93
第二篇 ARM前后台系统部分 99
第5章 启动代码分析 99
5.1 启动代码和Bootloader的区别 99
5.2 汇编基础 100
5.2.1 伪操作 100
5.2.2 汇编指令及伪指令 104
5.3 启动代码功能模块分解 108
5.3.1 定义程序入口地址 108
5.3.2 看门狗及中断的禁止 112
5.3.3 测试LED的显示 112
5.3.4 系统时钟初始化 113
5.3.5 低功耗模式 114
5.3.6 初始化内存控制器 118
5.3.7 堆栈初始化 120
5.3.8 中断向量表 122
5.3.9 映像文件运行域的初始化 129
5.3.10 进入C语言程序 133
5.4 S3C2410A启动过程总结 133
第6章 基于AN2410SSB的外设实验 135
6.1 LED跑马灯显示实验 135
6.1.1 实验功能和目的 135
6.1.2 工程的创建 135
6.1.3 仿真调试及工程的设置 138
6.1.4 脱机运行及设置 141
6.2 按键输入及中断实验 143
6.2.1 实验功能和目的 143
6.2.2 GPIO口输入实验 144
6.2.3 外部中断实验 145
6.3 串口通信实验 147
6.3.1 实验功能和目的 147
6.3.2 系统时钟和波特率的计算 147
6.3.3 功能函数介绍 150
6.3.4 串口控制台功能测试 154
6.4 A/D采集实验 155
6.4.1 实验功能和目的 155
6.4.2 测试程序 155
6.5 PWM实验 156
6.5.1 实验功能和目的 156
6.5.2 PWM DAC实验 157
6.6 10M以太网控制器CS8900A硬件调试 158
6.6.1 CS8900A与处理器间接口通信的调试 158
6.6.2 10BASE-T物理连接的调试 162
6.7 基于RealViewMDK的实验 163
6.7.1 基础知识概述 163
6.7.2 基于RealView MDK的LED跑马灯实例 167
6.7.3 基于RealView MDK的按键输入及中断实例 175
6.7.4 基于RealView MDK的Flash烧写 177
第7章 扩展底板AN2410MB的调试与实验 182
7.1 电源调试 182
7.2 u241mon的使用与USB下载 182
7.3 100M以太网硬件调试 185
7.4 pcmcia硬件调试 187
7.5 SD卡测试 192
7.6 wav声音文件的播放 195
7.6.1 wav文件及应用 195
7.6.2 S3C2410A的数字音频接口IIS设置 200
7.6.3 UDA1341TS初始化及控制 203
7.6.4 功放电路的音量调节 203
7.6.5 wav文件播放 205
7.7 IICEEPROM测试 207
7.8 RS485网络实验 207
7.9 LCD显示与触摸屏采集 212
7.9.1 TFT型LCD的显示 212
7.9.2 LCD背光控制 215
7.9.3 触摸屏 217
7.10 CPLD的扩展调试 226
7.10.1 CPLD部分原理分析 226
7.10.2 CPLD设计实现 228
7.11 I/O口读/写实验 232
7.12 16C554串口扩展实验 233
7.13 红外遥控学习与发射实验 238
第8章 基于前后台系统的应用 244
8.1 前后台系统概述 244
8.2 NANDFlash的Bootloader设计 245
8.2.1 官方的2410bs 245
8.2.2 增强2410bs 247
8.3 简易文件系统设计 252
8.3.1 文件系统结构 253
8.3.2 文件系统功能函数 254
8.3.3 文件系统的测试 263
8.4 简易图形用户界面的设计 266
8.4.1 字符和汉字的显示 266
8.4.2 基本图形和控件的绘制 272
8.4.3 触摸屏事件处理 285
第三篇 基于Linux系统的应用 291
第9章 基于PC机的Linux学习 291
9.1 Linux系统下的常用操作 291
9.1.1 Red Hat Linux9下的常用操作问答 291
9.1.2 超级终端minicom的使用 294
9.1.3 网络文件系统的使用 294
9.2 Linux下的应用编程 295
9.2.1 进程间隔定时器 296
9.2.2 关于进程的体会 299
9.3 Linux下的驱动程序设计 302
9.3.1 模块编程实验 302
9.3.2 简单的字符设备驱动实验 303
第10章 嵌入式Linux开发环境 307
10.1 开发环境概述 307
10.2 PC宿主机环境的创建 307
10.2.1 安装基本的软件开发工具 307
10.2.2 安装MIZI Linux SDK for S3C2410 307
10.2.3 安装交叉编译工具 308
10.3 嵌入式Linux系统的配置和编译 309
10.3.1 Bootloader的配置和编译 309
10.3.2 内核的配置和编译 311
10.3.3 根文件系统的生成 311
10.4 目标板Linux系统的创建 312
10.4.1 Bootloader的烧写 312
10.4.2 Linux系统的下载 312
10.4.3 Linux系统的更新 314
10.4.4 在Windows下更新目标板的Linux系统 319
10.5 嵌入式Linux平台测试 320
第11章 嵌入式Linux驱动开发 322
11.1 模块编程实验 322
11.2 点亮目标板的LED 323
11.2.1 LED驱动 323
11.2.2 驱动的测试 325
11.2.3 将驱动编译进内核 327
11.2.4 测试程序的自动运行 328
11.3 按键中断实验 330
11.3.1 按键驱动程序 330
11.3.2 按键中断测试程序 334
11.4 定时器驱动及PWM输出 336
11.4.1 驱动功能描述 336
11.4.2 PWM驱动程序 336
11.4.3 PWM测试程序 340
11.5 PWM驱动蜂鸣器 341
11.5.1 驱动程序 341
11.5.2 驱动测试程序 344
11.5.3 出现过的问题 345
11.6 RS485网络驱动 346
11.6.1 驱动程序 346
11.6.2 驱动测试程序 351
11.6.3 出现的问题 353
11.7 CPLD扩展I/O驱动 356
11.7.1 虚拟地址的分配 356
11.7.2 驱动程序 358
11.7.3 驱动测试程序 360
11.7.4 出现过的问题 361
11.8 CPLD扩展串口16C554驱动 363
11.8.1 驱动说明 363
11.8.2 驱动程序 363
11.8.3 测试程序 372
11.8.4 出现过的问题 374
11.9 红外学习与发射 376
11.9.1 驱动程序 376
11.9.2 驱动测试程序 383
11.9.3 出现的问题 385
11.9.4 中断总结 385
11.10 点亮目标板的LCD 385
11.10.1 修改现有的s3c2410fb.c驱动程序 385
11.10.2 LCD测试程序 386
11.11 安装触摸板 389
11.11.1 触摸板驱动程序的修改 389
11.11.2 触摸板测试程序 389
11.12 系统时间的实现 390
11.13 100M以太网 391
第12章 嵌入式Linux平台优化 393
12.1 桌面系统的启动 393
12.2 yaffs可读/写文件系统 394
12.2.1 yaffs文件系统的使用 394
12.2.2 yaffs文件系统的移植 396
12.2.3 更新yaffs为根文件系统 406
12.3 NFS的使用 408
12.3.1 宿主机NFS配置 408
12.3.2 目标板NFS配置 408
12.3.3 出现的问题 409
12.4 嵌入式Web服务器 409
12.4.1 boa移植 409
12.4.2 Web应用开发 412
12.5 WIFI无线网络 414
12.5.1 Red Hat9上使用ndiswrapper安装无线网卡驱动 414
12.5.2 无线网络配置 419
12.5.3 RedHat9上使用linux-wlan-ng安装无线网卡 423
12.5.4 嵌入式平台上使用linux-wlan-ng安装无线网卡 429
第13章 网络编程 437
13.1 常用函数 437
13.2 服务器实例 448
13.3 客户端测试 454
13.4 利用I/O复用替代多进程的并发服务器 456
13.5 无线网络测试 459
第14章 图形用户界面设计 460
14.1 Qt应用编程 460
14.2 Qt/Embedded和Qtopia 460
14.2.1 linuette平台 460
14.2.2 QtE2.3.7/Qtopia1.7.0 463
14.2.3 QtE2.3.12/QtopiaPDA2.2.0 471
14.2.4 linuette的root、root_english、usr比较 477
后记 480
参考文献 482