第1章 嵌入式系统概述 1
1.1 嵌入式系统简介 1
1.2 现实中的嵌入式系统 2
1.3 嵌入式系统的概念和特点 3
1.3.1 嵌入式系统的定义 3
1.3.2 嵌入式系统的特点 4
1.4 嵌入式系统的组成 5
1.4.1 嵌入式系统的硬件组成 5
1.4.2 嵌入式系统的软件组成 5
1.5 嵌入式操作系统 6
1.6 嵌入式系统开发流程概述 7
1.6.1 嵌入式系统的基本设计流程 7
1.6.2 嵌入式系统的一般设计方法 9
1.7 思考和练习题 10
第2章 ARM微处理器体系结构 11
2.1 ARM简介 11
2.1.1 RISC结构特性 12
2.1.2 ARM体系架构的发展 13
2.1.3 ARM处理器系列 14
2.2 Cortex-A9内部功能及特点 16
2.2.1 Cortex-A9的内部功能特点 16
2.2.2 Cortex-A9的流水线 17
2.3 Cortex-A9架构的处理器状态 19
2.3.1 状态 19
2.3.2 优先级水平 20
2.4 Cortex-A9内核的工作模式 20
2.5 Cortex-A9架构的内核寄存器 21
2.5.1 ARM状态下的寄存器 21
2.5.2 当前程序状态寄存器 24
2.6 ARM的异常中断 26
2.6.1 ARM异常中断处理概述 26
2.6.2 ARM异常类型 26
2.6.3 ARM异常的优先级 30
2.6.4 ARM异常响应和处理程序返回 31
2.7 Cortex-A9的存储系统 32
2.7.1 ARM存储系统的相关概念 32
2.7.2 ARM Cortex-A9存储系统的架构 34
2.8 思考和练习题 35
第3章 ARM的指令系统及汇编程序设计 36
3.1 指令系统简介 36
3.1.1 ARM指令分类 36
3.1.2 ARM指令的编码格式 36
3.1.3 ARM指令的条件码域 37
3.2 寻址方式 38
3.3 ARM指令集 40
3.3.1 移位操作指令 40
3.3.2 数据处理指令 41
3.3.3 乘法指令与乘加指令 44
3.3.4 加载/存储指令 45
3.3.5 批量数据加载/存储指令 47
3.3.6 跳转指令 48
3.3.7 程序状态寄存器访问指令 49
3.3.8 数据交换指令 49
3.3.9 协处理器指令 50
3.3.10 异常产生指令 52
3.4 GNU ARM汇编器支持的伪操作指令 52
3.4.1 符号定义伪操作指令 52
3.4.2 数据定义伪操作指令 54
3.4.3 汇编控制伪操作指令 56
3.4.4 杂项伪操作指令 58
3.5 ARM汇编伪指令 62
3.6 ARM汇编编程简介 64
3.6.1 ARM汇编语言文件格式 64
3.6.2 ARM汇编语言语句格式 64
3.6.3 C语言和汇编语言的混合编程 66
3.7 思考和练习题 71
第4章 构建嵌入式开发环境 73
4.1 主机与目标板结合的交叉开发模式 73
4.2 建立主机开发的软件环境 74
4.2.1 主机Linux操作系统的安装 74
4.2.2 Minicom的安装配置 75
4.2.3 TFTP服务的安装配置 76
4.2.4 NFS的安装配置 77
4.3 建立交叉编译工具链 78
4.3.1 arm-linux-gcc选项 78
4.3.2 arm-linux-ld选项 84
4.3.3 arm-linux-objcopy选项 87
4.3.4 arm-linux-obidump选项 89
4.3.5 汇编代码、机器码和存储器的关系以及数据的表示 90
4.4 Makefile介绍 91
4.4.1 Makefile规则 94
4.4.2 Makefile文件里的赋值方法 94
4.4.3 Makefile常用函数 95
4.5 思考和练习题 99
第5章 Exynos 4412的GPIO 100
5.1 Exynos 4412处理器总览 100
5.2 GPIO接口 100
5.2.1 GPIO总览 100
5.2.2 GPIO引脚配置 102
5.2.3 GPIO端口寄存器 103
5.3 GPIO应用实例 105
5.3.1 电路连接 105
5.3.2 实例1:汇编代码点亮LED灯 106
5.3.3 实例2:C语言按键控制LED灯 109
5.4 思考和练习题 111
第6章 时钟管理单元 112
6.1 Exynos 4412时钟管理单元工作原理 112
6.1.1 Exynos 4412的时钟体系 112
6.1.2 Exynos 4412时钟管理单元工作过程 113
6.2 时钟管理单元控制寄存器 116
6.3 应用实例 119
6.4 思考和练习题 123
第7章 Exynos 4412中断系统 124
7.1 Exynos 4412的中断系统概述 124
7.1.1 Exynos 4412中断系统相关术语 124
7.1.2 通用中断控制器架构 126
7.1.3 GIC中断分组表 127
7.2 Exynos 4412中断机制分析 128
7.2.1 GIC的中断识别 128
7.2.2 GIC的中断控制 129
7.2.3 中断优先级 129
7.2.4 通用中断处理 130
7.3 中断控制相关寄存器 131
7.3.1 分配器、CPU接口配置寄存器 131
7.3.2 中断配置寄存器 133
7.3.3 中断优先级配置类寄存器 135
7.3.4 中断状态查询寄存器 136
7.3.5 软件中断产生寄存器 136
7.4 中断处理程序实例 137
7.4.1 电路连接 137
7.4.2 中断编程 138
7.5 思考和练习题 139
第8章 DMA控制器 140
8.1 DMAC简介 140
8.2 DMAC工作原理 141
8.3 PL330指令集 143
8.4 其他相关寄存器 147
8.5 DMA编程实例 147
8.5.1 DMA驱动程序编写步骤 147
8.5.2 DMA驱动实例 148
8.6 思考和练习题 152
第9章 PWM定时器和WatchDog定时器 153
9.1 PWM定时器 153
9.1.1 PWM定时器概述 153
9.1.2 PWM定时器工作原理 153
9.1.3 PWM定时器的死区功能 155
9.2 PWM定时器控制寄存器 156
9.3 PWM定时器应用实例 158
9.4 WatchDog定时器 160
9.4.1 看门狗原理 160
9.4.2 Exynos 4412看门狗控制 160
9.5 WatchDog定时器控制寄存器 161
9.6 WatchDog定时器程序实例 162
9.7 思考和练习题 163
第10章 NAND Flash控制器 164
10.1 NAND Flash功能介绍 164
10.1.1 Flash存储技术简介 164
10.1.2 芯片介绍 165
10.1.3 芯片的主要操作 169
10.2 NAND Flash相关控制寄存器 171
10.3 NAND Flash编程实例 173
10.3.1 电路连接 173
10.3.2 编程实例 174
10.4 思考和练习题 183
第11章 UART接口 184
11.1 串行口结构和工作原理 184
11.2 Exynos 4412串行口特点 185
11.3 串行口专用寄存器 188
11.4 应用实例 191
11.5 思考和练习题 194
第12章 I2C接口 195
12.1 I2C接口结构和特点 195
12.2 Exynos 4412内部的I2C控制器 198
12.2.1 I2C简介 198
12.2.2 I2C相关寄存器 199
12.3 I2C应用实例 200
12.3.1 基本操作 201
12.3.2 编程实例 204
12.4 思考和练习题 204
第13章 SPI接口 205
13.1 SPI总线协议 205
13.1.1 协议简介 205
13.1.2 协议内容 206
13.2 SPI控制器 207
13.2.1 Exynos 4412的SPI控制寄存器 207
13.2.2 时钟源选择 208
13.2.3 SPI相关寄存器 208
13.3 SPI应用实例 211
13.4 思考和练习题 216
第14章 ADC转换器 217
14.1 A/D转换器的基本原理 217
14.2 Exynos 4412的A/D转换器 218
14.2.1 Exynos 4412 A/D转换器概述 218
14.2.2 Exynos 4412 A/D转换器工作原理 218
14.3 Exynos 4412 ADC控制寄存器 219
14.4 ADC应用实例 220
14.5 思考和练习题 222
第15章 移植U-Boot 223
15.1 Bootloader简介 223
15.1.1 Bootloader的概念 223
15.1.2 Bootloader的结构和启动过程 224
15.2 U-Boot分析与移植 228
15.2.1 U-Boot简介 228
15.2.2 U-Boot源码结构 228
15.2.3 Exynos 4412启动过程 230
15.3 U-Boot的移植 232
15.3.1 U-Boot移植准备 232
15.3.2 U-Boot的源码移植及分析 234
15.3.3 移植/配置系统时钟 240
15.3.4 移植/配置NAND Flash 249
15.3.5 移植/配置串口驱动程序 252
15.3.6 增加对网卡芯片CS8900的支持 254
15.4 U-Boot的常用命令 255
15.5 使用U-Boot来执行程序 258
15.6 思考和练习题 258
第16章 移植嵌入式操作系统 259
16.1 嵌入式Linux内核 259
16.1.1 Linux内核简介 259
16.1.2 Linux内核的组成结构 260
16.1.3 Linux的源码结构 261
16.2 移植Linux内核 262
16.3 移植根文件系统 263
16.3.1 移植Busybox 265
16.3.2 构造根文件系统 267
16.3.3 创建根文件系统映像 268
16.4 下载内核 269
16.5 使用U-Boot加载根文件系统和映像 270
16.6 思考和练习题 271
参考文献 272