选择主流芯片,立足硬件原理,强调理论联系实践,引领读者掌握Cortex-A8的开发。
本书从开发角度出发,以Smart210开发板为开发平台,将Cortex-A8处理器体系结构、开发板硬件原理、指令系统、开发环境和各功能模块的原理及应用娓娓道来,不仅让读者知其然,更要让读者知其所以然,并让这些知识再反作用于实践。揭开嵌入式Linux C系统开发背后鲜为人知的秘密,具体说来,全书主要讨论了包括嵌入式C语言高级编程、嵌入式开发中经典数据结构与算法、嵌入式Linux系统编程、多任务解决机制,网络编程以及嵌入式数据库开发等多个方面的话题。
第1章 绪论 1
1.1 嵌入式系统概述 1
1.1.1 什么是嵌入式系统 1
1.1.2 嵌入式系统的组成 2
1.1.3 嵌入式系统的发展 5
1.1.4 嵌入式系统的应用 7
1.2 嵌入式处理器 9
1.2.1 嵌入式微处理器 9
1.2.2 嵌入式微控制器 10
1.2.3 嵌入式数字信号处理器 10
1.2.4 嵌入式片上系统 11
1.3 嵌入式操作系统 11
1.3.1 嵌入式操作系统概述 11
1.3.2 嵌入式操作系统的特点 12
1.3.3 嵌入式实时操作系统 12
1.3.4 常见的嵌入式操作系统 13
1.4 嵌入式技术知识结构 17
1.5 嵌入式工程师成长之路 18
第2章 ARM体系结构 21
2.1 ARM简介 21
2.1.1 ARM公司简介 21
2.1.2 ARM技术特征 22
2.2 ARM处理器架构 22
2.3 ARM处理器内核 26
2.3.1 Classic处理器 26
2.3.2 Cortex-M系列 29
2.3.3 Cortex-R系列 32
2.3.4 Cortex-A系列 33
2.3.5 SecurCore处理器 38
2.3.6 ARM微处理器的应用选型 39
2.4 Cortex-A8处理器编程模型 39
2.4.1 Cortex-A8内核结构 40
2.4.2 Jazelle扩展体系结构 42
2.4.3 TrustZone安全扩展体系结构 42
2.4.4 高级SIMD体系结构 43
2.4.5 VFPv3体系结构 43
2.4.6 处理器状态 43
2.4.7 数据类型 44
2.4.8 存储器格式 44
2.4.9 存储器系统地址 45
2.4.10 处理器工作模式 46
2.4.11 寄存器组 47
2.4.12 异常 52
2.4.13 安全扩展 57
2.4.14 系统控制协处理器 59
2.5 Cortex-A8存储管理模型 60
2.5.1 高速缓冲存储器(Cache) 62
2.5.2 虚拟内存 62
2.5.3 页表缓存TLB 65
2.5.4 存储属性 67
2.5.5 页表的使用 68
2.5.6 存储顺序 69
2.6 Cortex-A8处理器时钟系统 71
2.7 Cortex-A8处理器复位系统 73
2.9 Cortex-A8处理器功耗控制 75
2.10 流水线 79
2.10.1 流水线的概念和原理 79
2.10.2 流水线的分类 79
2.10.3 影响流水线性能的因素 81
第3章 硬件平台详解 83
3.1 S5PV210处理器概述 83
3.2 S5PV210系列芯片的结构框图 83
3.3 S5PV210系列芯片的特性 85
3.3.1 微处理器 86
3.3.2 存储器子系统 87
3.3.3 多媒体 88
3.3.4 音频子系统 90
3.3.5 安全子系统 90
3.3.6 接口 90
3.3.7 系统外设 92
3.3.8 AMBA总线 93
3.3.9 S5PV210和S3C6410的比较 95
3.4 S5PV210系列芯片的应用领域 96
3.5 S5PV210芯片的封装和引脚 96
3.6 开发板硬件设计说明(核心板) 102
3.6.1 S5PV210(SYS&Connectivity)/Boot Option 102
3.6.2 S5PV210(DDR2&SROM Memory) 107
3.6.3 S5PV210(Media) 109
3.6.4 S5PV210(Gen Power) 113
3.6.5 DDR2(1 Gbit×4)XM1 118
3.6.6 系统电源 125
3.6.7 复位电路 128
3.6.8 系统时钟电路 128
3.6.9 JTAG接口电路 129
3.6.10 NANDFlash芯片模块 130
3.6.11 音频输入与输出电路 133
3.6.12 网络驱动芯片模块 134
3.7 开发板硬件设计说明(底板) 137
3.7.1 板对板接口 137
3.7.2 电源 137
3.7.3 SDIO-GPIO电路、按键电路 137
3.7.4 蜂鸣器电路 141
3.7.5 串口电路 141
3.7.6 G-Sensor 142
3.7.7 EEPROM芯片 143
3.7.8 Ethernet 143
3.7.9 SD卡 144
3.7.10 Audio 144
3.7.11 HDMI接口 145
3.7.12 USB接口 146
2.7.13 LCD接口 146
3.7.14 MIPI-DSI接口 149
3.7.15 摄像头接口 149
第4章 ARM处理器的指令系统 151
4.1 寻址方式 151
4.2 ARM指令集 154
4.2.1 指令格式 154
4.2.2 跳转指令 158
4.2.3 数据处理指令 161
4.2.4 程序状态寄存器传输指令 170
4.2.5 Load/Store指令 172
4.2.6 异常中断产生指令 178
4.2.7 协处理器指令 180
4.2.8 指令速查表 182
4.3 Thumb指令集 193
4.3.1 Thumb指令集 193
4.3.2 Thumb-2指令集 194
4.3.3 ThumbEE指令集 195
4.4 ARM伪指令 195
4.5 ARM伪操作 198
4.5.1 符号定义伪操作 199
4.5.2 数据定义伪操作 200
4.5.3 符号定义伪操作 203
4.5.4 杂项伪操作 205
4.5.5 GNU ARM汇编伪操作 209
4.6 汇编程序设计 213
4.6.1 汇编语言的语句格式 213
4.6.2 汇编语言的程序结构 219
4.7 C语言与汇编混合编程 220
4.7.1 ATPCS介绍 220
4.7.2 内嵌汇编 222
4.7.3 ARM中的汇编和C语言相互调用 227
第5章 开发环境详解 231
5.1 安装并配置Fedora15 231
5.2 安装交叉编译器 231
5.3 使用MiniTools烧写裸机程序 233
5.3.1 什么是MiniTools 233
5.3.2 安装MiniTools工具 233
5.3.3 如何使用MiniTools烧写裸机程序 234
5.4 跟我一起写Makefile 236
5.4.1 Makefile的组成结构 236
5.4.2 Makefile详解 241
5.4.3 书写规则 243
5.4.4 书写命令 249
5.4.5 使用变量 252
5.4.6 使用条件判断 258
5.4.7 使用函数 261
5.4.8 make的运行 267
5.4.9 隐含规则 271
5.4.10 使用make更新函数库文件 279
5.5 系统引导程序综述 280
5.5.1 系统引导程序含义 280
5.5.2 系统引导程序的功能 281
5.5.3 BootLoader的操作模式 281
5.5.4 BootLoader的启动 282
5.5.5 几个流行的BootLoader 282
5.5.6 U-Boot分析 285
5.5.7 移植U-Boot到开发板 286
第6章 GPIO端口 289
6.1 GPIO原理分析 289
6.1.1 GPIO类型 290
6.1.2 GPIO特性 290
6.1.3 端口功能定义 291
6.1.4 GPIO寄存器 301
6.1.5 I/O操作步骤 303
6.2 点亮LED 303
6.2.1 原理图 303
6.2.2 汇编点亮LED 303
6.2.3 C语言点亮LED 308
6.3 控制蜂鸣器 311
6.3.1 原理图 311
6.3.2 程序相关讲解 311
6.3.3 编译代码和烧写运行 313
6.3.4 实验现象 313
6.4 查询方式检测按键 313
6.4.1 原理图 313
6.4.2 程序相关讲解 314
6.4.3 编译代码和烧写运行 315
6.4.4 实验现象 316
第7章 存储器管理 317
7.1 存储器概述 317
7.1.1 存储器组织结构 317
7.1.2 随机存储器和只读存储器 317
7.2 S5PV210的存储系统 320
7.2.1 S5PV210的虚拟内存映射 320
7.2.2 S5PV210微处理器的启动过程 322
7.3 S5PV210的内存控制器 325
7.3.1 DRAM控制器 325
7.3.2 SROM控制器 327
7.3.3 OneNAND控制器 327
7.3.4 NANDFLASH控制器 328
7.4 控制iCache 329
7.4.1 什么是Cache 329
7.4.2 程序相关讲解 329
7.4.3 编译代码和烧写运行 330
7.4.4 编译代码和烧写运行 330
7.5 重定位代码到IRAM+0x4000 330
7.5.1 重定位 330
7.5.2 程序相关讲解 330
7.5.3 编译代码和烧写运行 333
7.5.4 实验现象 333
7.6 重定位代码到DRAM 333
7.6.1 关于DRAM 333
7.6.2 程序相关讲解 335
7.6.3 编译代码和烧写运行 343
7.6.4 实验现象 343
7.7 NANDFlash的读写擦除 343
7.7.1 关于NANDFlash 343
7.7.2 程序相关讲解 348
7.7.3 编译代码和烧写运行 359
7.7.4 实验现象 359
第8章 中断机制 361
8.1 中断的基本概念 361
8.1.1 中断的概念 361
8.1.2 中断源、中断信号和中断向量 362
8.1.3 中断优先级 364
8.1.4 中断操作 366
8.2 S5PV210的中断系统 366
8.2.1 向量中断控制器 366
8.2.2 S5PV210的中断源 367
8.2.3 中断相关寄存器 370
8.3 中断编程示例 377
8.3.1 程序相关讲解 378
8.3.2 编译代码和烧写运行 381
8.3.3 实验现象 381
第9章 系统时钟和定时器 383
9.1 系统时钟 383
9.1.1 时钟域 383
9.1.2 时钟声明 384
9.1.3 时钟关系 385
9.1.4 时钟的产生 386
9.1.5 时钟配置过程 389
9.1.6 系统时钟相关寄存器 389
9.1.7 系统时钟示例 395
9.2 PWM定时器 398
9.2.1 PWM定时器概述 398
9.2.2 PWM定时器特点 399
9.2.3 PWM定时器的操作 399
9.2.4 PWM定时器相关寄存器 403
9.2.5 PWM定时器编程示例 406
9.3 看门狗定时器 408
9.3.1 看门狗定时器概述 408
9.3.2 看门狗定时器相关寄存器 409
9.3.3 看门狗定时器编程示例1 410
9.3.4 看门狗定时器编程示例2 412
9.4 RTC实时时钟 415
9.4.1 RTC实时时钟概述 415
9.4.2 RTC相关寄存器 416
9.4.3 RTC编程示例 418
第10章 串行通信接口 423
10.1 串行通信概述 423
10.1.1 通信的概念 423
10.1.2 通信的分类 423
10.1.3 串行通信和并行通信 424
10.1.4 同步通信和异步通信 425
10.2 UART接口 425
10.2.1 基本术语 425
10.2.2 异步串行通信协议 426
10.2.3 S5PV210的UART接口 430
10.2.4 S5PV210的UART相关寄存器 434
10.2.5 UART编程示例1 441
10.2.6 UART编程示例2 445
10.3 IIC接口 448
10.3.1 IIC总线接口概述 448
10.3.2 S5PV210的I2C接口 449
10.3.3 S5PV210的IIC相关寄存器 454
10.4 SPI接口 457
10.4.1 SPI接口概述 457
10.4.2 S5PV210的SPI操作 458
10.4.3 S5PV210的SPI相关寄存器 461
10.4.4 特殊功能寄存器的设置顺序 466
第11章 人机接口技术 467
11.1 LCD接口 467
11.1.1 LCD概述 467
11.1.2 S5PV210的LCD控制器 469
11.1.3 S5PV210的LCD相关寄存器 497
11.1.4 LCD示例1 503
11.1.5 LCD示例2 508
11.2 IIS多音频接口 510
11.2.1 概述 510
11.2.2 S5PV210的IIS相关寄存器 516
11.2.3 示例1 520
11.2.4 示例2 523
11.3 ADC和触摸屏接口 528
11.3.1 概述 528
11.3.2 S5PV210的ADC和触摸屏接口 529
11.3.3 S5PV210的ADC相关寄存器 533
11.3.4 示例 537
11.4 键盘接口 538
11.4.1 概述 538
11.4.2 S5PV210的键盘相关寄存器 542
第12章 嵌入式系统开发流程与设计方法 545
12.1 常用开发模型 545
12.1.1 边开发边修改模型 545
12.1.2 瀑布模型 546
12.1.3 快速原型模型 546
12.1.4 增量模型 547
12.1.5 螺旋模型 548
12.1.6 演化模型 548
12.2 需求分析阶段 549
12.2.1 系统分析 550
12.2.2 用户需求 550
12.2.3 系统需求 552
12.2.4 概要设计 554
12.3 详细设计阶段 556
12.3.1 体系结构设计 556
12.3.2 硬件设计 556
12.3.3 软件设计 558
12.3.4 设计检查 558
12.4 科研开发阶段 559
12.4.1 建模工具 559
12.4.2 开发平台 561
12.4.3 软件开发过程 561
12.5 测试阶段 562
12.5.1 测试计划目标 562
12.5.2 测试类型 563
参考文献 565