第1篇 基础篇 2
第1章 ARM处理器简介 2
1.1处理器工作模式 2
1.2寄存器介绍 3
1.2.1堆栈指针寄存器R13和链接寄存器R14 4
1.2.2程序计数器R15 4
1.2.3程序状态寄存器 4
1.3工作状态 5
1.4数据长度 5
1.5存储系统 5
1.5.1 ARM地址空间 6
1.5.2 ARM存储器的格式 6
1.6天嵌TQ2440开发板硬件资源概述 7
1.7本章小结 9
1.8扩展阅读之CISC处理器和RISC处理器简介 9
第2章 ADS集成开发环境及程序下载具体流程 11
2.1 ADS 1.2集成开发环境简介 11
2.1.1 CodeWarrior for ARM开发环境 12
2.1.2 AXD调试器的启动 13
2.2工程的编辑与修改 13
2.2.1建立一个新工程 14
2.2.2建立一个源文件 14
2.2.3添加源文件到工程 15
2.2.4编译与链接工程 16
2.2.5打开已有的工程 16
2.3工程的调试 16
2.3.1装载映像文件 16
2.3.2调试工具条的使用 17
2.4 H-JTAG的安装与调试 18
2.4.1 H-JTAG的安装 18
2.4.2 H-JTAG的设置 18
2.5使用U-Boot下载裸机程序 21
2.6本章小结 23
第3章 ARM指令集及汇编语言基础 24
3.1 ARM指令集介绍 24
3.1.1 ARM指令集 24
3.1.2 ARM寻址方式 30
3.1.3 ARM伪操作和伪指令介绍 33
3.2 ARM汇编基础知识 40
3.3 ARM汇编程序的基本结构 41
3.3.1编写汇编程序基本的格式规范 42
3.3.2程序入口和程序结束 43
3.3.3段 43
3.3.4标号(标志符) 44
3.3.5外部标号 48
3.3.6文件包含 48
3.4用AXD调试ARM汇编程序实验 48
3.4.1建立工程并添加源文件 48
3.4.2工程的设置 50
3.4.3编译源文件 51
3.4.4启动AXD调试器 51
3.4.5手把手调试汇编程序 54
3.5常用汇编语言程序子模块实例分析 57
3.5.1特殊功能寄存器的访问 57
3.5.2内存数据复制 58
3.5.3批量加载与存储 58
3.5.4堆栈操作 59
3.5.5实现查表功能 61
3.6本章小结 61
3.7扩展阅读之内存和I/O地址、前序寻址和后序寻址 61
第4章 ARM C语言基础 63
4.1数据类型基础 63
4.1.1用typedef和#define定义类型 63
4.1.2用signed和unsigned修饰数据类型 64
4.1.3 volatile和强制类型转换 64
4.2深入理解位运算符和位运算 65
4.2.1按位与运算符(&) 65
4.2.2按位或运算符(|) 66
4.2.3按位取反运算符(~) 66
4.2.4左移和右移运算符(<<)、(>>) 66
4.2.5位运算应用实例分析 66
4.3控制结构 67
4.3.1选择结构 67
4.3.2循环结构 67
4.4防止文件重复包含技巧 68
4.5 ARM编译器对C语言的扩展 68
4.5.1 _irq声明中断处理函数 68
4.5.2 _swi声明软中断 69
4.5.3 _asm内嵌汇编 69
4.5.4 _inline定义内联函数 69
4.6本章小结 71
4.7扩展阅读之高速缓存基础知识 71
第5章 ARM汇编语言和C语言混合编程基础 74
5.1一个混合编程实例的实现 74
5.2 APCS规则概述 77
5.2.1寄存器的使用 77
5.2.2参数传递 77
5.2.3函数的返回值 77
5.3本章小结 77
第6章 GPIO编程实验 79
6.1 GPIO概述 79
6.1.1 GPIO引脚介绍 79
6.1.2 GPIO特性分析 79
6.1.3 GPIO相关寄存器 80
6.1.4 GPIO应用实例 81
6.2基础实验:第一个裸机程序——流水灯 82
6.2.1硬件电路分析 82
6.2.2建立工程并添加启动代码 83
6.2.3添加源文件 84
6.2.4编辑源文件 85
6.2.5工程设置、编译、链接 86
6.2.6下载程序到开发板运行 89
6.2.7由点亮LED引发的思考 93
6.2.8再议点亮LED实验 95
6.2.9将点亮一个LED扩展到流水灯 97
6.3 GPIO扩展实验 99
6.3.1按键实验 99
6.3.2蜂鸣器实验 104
6.4本章小结 105
6.5扩展阅读之模块化编程、NAND FLASH和NOR FLASH概述 106
第2篇 提高篇 110
第7章 启动代码分析 110
7.1从开发板硬件讲起 110
7.1.1 TQ2440核心板芯片功能介绍 110
7.1.2从NAND FLASH和NOR FLASH启动流程分析 112
7.2启动代码详解 113
7.3启动代码主要功能模块分析 134
7.3.1建立中断向量表 134
7.3.2初始化各个模式的堆栈 136
7.3.3初始化系统硬件 137
7.3.4初始化应用程序的执行环境并跳转到主程序执行 137
7.3.5跳转到C语言主程序执行 139
7.4本章小结 140
7.5本章附录——完整版启动代码 140
第8章 系统时钟和定时器 147
8.1 S3C2440时钟系统概述 147
8.1.1系统时钟初始化 148
8.1.2 FCLK、HCLK和PCLK与Fin的关系 149
8.2定时器原理与应用 151
8.2.1定时器原理 151
8.2.2定时器相关的寄存器 153
8.2.3定时器基础实验代码详解及测试 155
8.2.4定时器扩展实验之PWM实验 157
8.3本章小结 159
第9章 存储器控制器 160
9.1 S3C2440地址空间 160
9.2操作实例:SDRAM实例分析 162
9.2.1 SDRAM工作原理 162
9.2.2 SDRAM接口电路设计 163
9.2.3 SDRAM初始化过程详解 164
9.2.4回顾启动代码中的SDRAM初始化 166
9.3本章小结 167
第10章 通用异步收发器(UART) 168
10.1 UART概述 168
10.2 S3C2440处理器UART工作原理 169
10.3引脚描述及相关寄存器 170
10.4 UART基础实验 173
10.4.1硬件电路分析 173
10.4.2程序设计及代码详解 174
10.4.3实例测试 175
10.4.4 UART基础实验分析 176
10.5 UART高级实验——可变参数函数在UART中的应用 178
10.5.1程序设计及代码详解 178
10.5.2实例测试 181
106本章小结 181
第11章 中断控制系统 182
11.1 S3C2440中断系统概述 182
11.1.1深入理解CPU的工作模式 183
11.1.2中断控制器 184
11.2外部中断实验 189
11.2.1硬件电路分析 189
11.2.2程序分析 189
11.2.3中断执行流程详解 201
11.2.4中断处理流程引发的思考 206
11.2.5实例测试 210
11.2.6为什么进入不了中断 212
11.3定时器中断实验 216
11.3.1程序代码分析 217
11.3.2实例测试 220
11.4串口中断原理及实验 220
11.4.1如何正确使用中断 221
11.4.2程序代码分析 224
11.4.3实例测试 228
11.5 ARM中断之高级应用:软中断原理及实验 228
11.5.1程序代码分析 228
11.5.2实例测试 233
11.5.3软中断所用到的启动代码 234
11.6本章小结 240
第12章 NAND FLASH原理与实验 241
12.1 FLASH概述 241
12.1.1 NAND FLASH的基本结构 242
12.1.2 NAND FLASH接口电路 243
12.1.3如何访问NAND FLASH 245
12.1.4 S3C2440 NAND FLASH控制器 246
12.1.5使用宏代替简单的函数 249
12.2 NAND FLASH基础实验 251
12.2.1 NAND FLASH基本操作函数分析 251
12.2.2 NAND FLASH基础实验之页读写 259
12.2.3页读写实例测试 265
12.2.4 NAND FLASH基础实验之读ID 268
12.2.5读ID实例测试 271
12.3 NAND FLASH高级实验 272
12.3.1随机读、写实验代码详解 273
12.3.2随机读、写实例测试 276
12.4回顾启动代码中的NAND FLASH读取函数 277
12.5本章小结 280
第13章 LCD控制器原理与实验 281
13.1 LCD和LCD控制器工作原理 281
13.1.1 LCD概述 281
13.1.2 LCD接口信号 282
13.1.3 LCD显示原理 283
13.1.4 LCD操作时序详解 285
13.1.5 S3C2440 LCD控制器 287
13.1.6 LCD控制寄存器初始化 288
13.2 LCD基础实验 295
13.2.1硬件电路分析 295
13.2.2程序代码分析 296
13.2.3实例测试 299
13.3 LCD基础实验之单像素显示 299
13.3.1程序代码分析 300
13.3.2实例测试 300
13.4 LCD基础实验之图片显示 301
13.4.1如何将图片转换为C语言数组 301
13.4.2程序代码分析 304
13.4.3实例测试 307
13.5 LCD高级实验之汉字显示 307
13.5.1两种常见的汉字编码 307
13.5.2 LCD汉字显示原理 308
13.5.3程序代码分析 309
13.5.4实例测试 312
13.5.5 LCD显示高级技巧——可变参函数Lcd_Printf的实现 313
13.5.6可变参函数Lcd_Printf测试 316
13.5.7汉字区位码的思考 316
13.5.8实例测试 318
13.6本章小结 319
第14章 ADC原理与实验 320
14.1 ADC原理 320
14.1.1 ADC相关寄存器 321
14.1.2 ADC初始化 322
14.2 ADC实验 323
14.2.1 ADC实验代码详解 323
14.2.2 ADC实验测试 326
14.3本章小结 327
第3篇 典型项目分析 330
第15章 综合实战 330
15.1实战1:数据采集系统实现 330
15.1.1功能描述 330
15.1.2模块划分 330
15.1.3代码实现 331
15.1.4实例测试 339
15.1.5实验总结 339
15.2实战2:串口控制实验 339
15.2.1功能描述 339
15.2.2模块划分 340
15.2.3代码实现 340
15.2.4实例测试 347
15.2.5实验总结 347
15.3实战3:制作电子相册 347
15.3.1功能描述 347
15.3.2模块划分 347
15.3.3代码实现 347
15.3.4实例测试 354
15.3.5实验总结 354
第4篇 理论知识扩展 356
第16章 嵌入式系统电源设计和Linux内核开发基础 356
16.1直流稳压电源分类 356
16.1.1普通线性稳压器工作原理 356
16.1.2低压差线性稳压器工作原理 357
16.1.3电容式开关电源的工作原理 357
16.1.4电感式开关电源的工作原理 358
16.1.5嵌入式系统设计中的电源芯片选型 358
16.1.6设计实例分析 360
16.2 Linux内核基础实验 361
16.2.1实验一:修改调度算法实验 361
16.2.2实验二:添加内核模块实验 367
参考文献 370