- ISBN:9787115606884
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:330
- 出版时间:2023-05-01
- 条形码:9787115606884 ; 978-7-115-60688-4
本书特色
适读人群 :从事嵌入式开发的工程师 有一定计算机基础和C语言编程经验的初学者1.循序渐进,由浅入深:本书从开发环境的安装和配置及ARM基本指令等相关基础知识开始讲解,再详细说明硬件的功能原理,*后介绍U-Boot的使用及启动程序,使读者将ARM相关知识点融会贯通。2.实例丰富,内容翔实:包含大量汇编实例,且所有汇编指令都在KEIL软件中测试过;硬件裸机驱动源程序均在开发板上调试过,并有详细的分析注解;U-Boot的启动源程序和U-Boot中的网络协议栈也有详细的程序注解,结合硬件原理图、用户手册说明硬件功能原理,逐个分析9种硬件驱动编程方法,方便读者复现实例并进行学以致用。3.提供配套电子资源:本书提供了配套的安装工具、源程序、PPT课件等电子资源,方便读者学习和使用。4.作者团队专业:本书作者团队具有嵌入式软件开发多年的经验和丰富的计算机网络、ARM、基于Linux的驱动开发等专业技能,得到了广泛认可和好评。5.参考价值高:ARM架构已成为全球重要的科技公司之一,基于ARM架构开发产品的相关工作非常热门,本书介绍的相关知识点对于对嵌入式开发感兴趣的人员非常有参考价值。
内容简介
本书主要介绍ARM开发的相关知识,详细讲解常用的ARM指令及如何基于ARM架构的外设编写驱动程序,并分析了开源软件U-Boot的启动源代码和网络协议栈。 本书第1~4章为基础篇,主要介绍CPU与ARM、搭建环境、ARM编程、异常等;第5~13章为编程篇,主要介绍基于Exynos 4412的常用外设的工作原理及驱动程序编写等;第14~17章为应用篇,主要介绍开源软件U-Boot的使用及启动程序,并分析网卡DM9000AE的驱动和网络协议栈;以及关于汇编的两点补充。 本书适合从事嵌入式开发的工程师和有一定计算机基础和C语言编程经验的初学者学习参考。
目录
1.1 ARM公司 1
1.2 ARM内核与架构 4
1.2.1 ARM内核 4
1.2.2 ARM架构 5
1.2.3 指令集 7
1.2.4 ARM处理器分类 9
1.2.5 什么是SoC? 11
1.2.6 Exynos 4412 SCP 15
1.2.7 ARM授权 17
1.2.8 总结 18
1.3 计算机重要贡献者 18
1.4 CPU架构 22
1.4.1 冯诺依曼架构 22
1.4.2 哈佛架构 23
1.4.3 CPU组成 25
1.5 指令的运行 30
1.6 ARM技术特征 31
1.7 ARM工作模式 32
1.8 ARM寄存器 33
1.8.1 寄存器分类 33
1.8.2 CPSR格式详解 36
1.9 协处理器 37
1.10 Jzelle 38
1.11 指令流水线 39
1.11.1 3级流水线 39
1.11.2 指令对流水线影响 40
第 2章 搭建环境 44
2.1 KEIL安装 44
2.1.1 ARM集成开发环境 44
2.1.2 KEIL、MDK、uVision、ARM之间的关系 45
2.1.3 安装Keil 46
2.1.4 创建第 一个工程 49
2.1.5 编译代码 52
2.1.6 如何debug代码? 53
2.2 GNU编译环境搭建 56
2.2.1 安装VMware Workstation 57
2.2.2 安装ubuntu 62
2.3 交叉编译工具安装 67
第3章 ARM编程 70
3.1 ARM指令格式 71
3.2 数据处理指令 72
3.2.1 MOV指令 72
3.2.2 移位操作 75
3.2.3 CMP指令 76
3.2.4 TST指令 77
3.2.5 算数运算指令 78
3.3 跳转指令 81
3.4 程序状态寄存器访问 84
3.4.1 MRS指令 84
3.4.2 MSR指令 85
3.4.3 举例 85
3.5 LDR/STR指令 91
3.5.1 LDR指令 91
3.5.2 STR指令 92
3.5.3 LDRB指令 93
3.5.4 LDRH指令 93
3.6 ARM寻址方式 94
3.7 LDREX/STREX指令 103
3.8 MDK与GNU 106
3.9 GNU书写风格 108
3.9.1 标号symbol(或label) 108
3.9.2 常数 109
3.9.3 特殊字符和语法 109
3.9.4 语句格式 110
3.9.5 分段 110
3.9.6 定义入口点 112
3.10 伪操作 112
3.10.1 数据定义伪操作 112
3.10.2 .align .end .include .incbin伪操作 113
3.10.3 .rept伪操作 114
3.10.4 macro宏定义 114
3.10.5 .if伪操作 115
3.10.6 .global/.type/.title/.list伪操作 115
3.10.7 杂项伪操作标识符 116
3.10.8 伪指令 118
3.13 GNU代码的编译 119
3.13.1 交叉编译工具 119
3.13.2. 交叉编译工具命名规则 119
3.13.3 代码编译过程 120
3.13.3 编译选项 122
3.13.4 ELF与bin 126
3.13.5 编译举例 127
3.14 ATPCS和AAPCS 132
3.15 内联汇编 135
3.16 C语言和汇编相互调用举例 137
第4章 异常(Exception) 139
4.1 异常基础知识 139
4.2 异常处理 141
4.2.1 异常发生后硬件操作 141
4.2.2 异常向量表 142
4.2.3 保存执行现场 143
4.2.4 异常处理的返回 144
4.2.5 异常恢复 146
4.3 IRQ中断异常 146
4.3.1 中断概念 146
4.3.2 中断处理流程 147
4.4 软中断 148
4.4.1 SWI指令 148
4.4.2 BKPT指令 148
4.4.3 举例 149
4.4.4 如何同时跳转并切换模式? 151
4.4.5 如何获取中断号? 151
第5章 GPIO及LED 152
5.1 GPIO 153
5.1.1 Exynos 4412 GPIO特性 153
5.1.2 LED灯电路图 154
5.1.3 如何操作GPIO? 155
5.2 LED驱动编写 157
5.2.1 汇编代码 157
5.2.2 c语言实现 158
5.2.3 烧写代码 161
第6章 PWM 162
6.1 PWM基础知识 162
6.2 Exynos 4412 PWM 164
6.2.1 Exynos 4412 PWM特性 165
6.2.2 PWM工作步骤 166
6.3 蜂鸣器驱动编写 167
6.3.1 参考电路 167
6.3.2 寄存器 168
6.3.3 代码实现 172
第7章 中断、key 173
7.1 GIC 173
7.1.1 分发器 174
7.1.2 CPU接口 176
7.1.3 中断分类 176
7.1.4 中断处理 179
7.2 key驱动编写 180
7.2.1 电路图 180
7.2.2 配置按键为中断触发方式 181
7.2.3 寄存器 183
7.2.4 代码实现 188
7.3 轮询方式 190
第8章 UART 192
8.1 UART概述 192
8.1.1 UART通信方式 192
8.1.2 UART帧格式 195
8.2 Exynos 4412 UART控制器 196
8.2.1 UART特性 197
8.2.2 UART内部功能模块 197
8.2.3 时钟源 200
8.4 驱动编写 200
8.4.1 参考电路 200
8.4.2 UART寄存器 202
8.4.3 代码实现 206
8.5 移植printf() 209
第9章 RTC详解 209
9.1 Exynos 4412 RTC 210
9.1.1 Exynos 4412 RTC特性 210
9.1.2 RTC Block 210
9.1.3 备用电池 211
9.1.4 晶振 211
9.2 RTC寄存器 212
9.3 RTC操作 214
9.4 代码实现 219
第 10章 看门狗 222
10.1 Exynos 4412 看门狗 222
10.1.1 看门狗定时器模块图 223
10.1.2 工作原理 223
10.2 驱动编写 224
10.2.1 看门狗软件程序设计流程 224
10.2.2 看门狗寄存器 224
10.2.3 代码实现 226
第 11章 ADC 227
11.1 信号基础知识 228
11.1.1 信号分类 228
11.1.2 数字信号优点 229
11.1.4 PCM脉冲编码调制 229
11.2 Exynos 4412 ADC控制器 231
11.2.1 Exynos 4412 ADC控制器特性 231
11.2.2 寄存器 232
11.2.3 Combiner中断控制器 234
11.2.4 A/D转换的转换时间计算 236
11.3 驱动编写 236
11.3.1 参考电路 236
11.3.2 代码实例 238
第 12章 I2C 241
12.1 I2C协议 241
12.1.1 开始和停止条件 241
12.1.2 数据有效性 243
12.1.3 数据传输格式 243
12.1.4 数据传输格式 245
12.2 Exynos 4412 I2C控制器 245
12.2.1 Exynos 4412 I2C控制器综述 245
12.2.2 Exynos 4412 I2C总线接口特性 246
12.2.3 I2C数据读写格式 247
12.2.3 数据读写流程 248
12.2.4 寄存器 252
12.2.5 寄存器使用规则 255
12.3 MPU6050及驱动编写 255
12.3.1 MPU6050 255
12.3.2 参考电路 258
12.3.3 MPU6050内部寄存器 259
12.3.4 代码实例: 260
第 13章 SPI 264
13.1 SPI基础知识 264
13.1.1 SPI特点 264
13.1.2 极性和相位 268
13.1.3 采样波形 268
13.1.4 如何设置极性和相位 270
13.1.5 数据交换(Data Exchanges) 271
13.2 Exynos 4412 SPI控制器 272
13.3 SPI操作 274
13.3.1 参考电路 274
13.3.2 寄存器 275
13.3.3 SPI初始化流程 278
13.3.4 收发数据流程 282
13.4 MCP2515 283
13.4.1 MCP2515简介 283
13.4.2 MCP2515特性 283
13.4.3 结构框图 284
13.4.4 SPI 协议模块 285
13.4.5 SPI 指令集 285
13.4.6 CAN初始化 289
13.4.7 CAN缓冲区 296
13.4.8 数据发送 296
13.4.9 CAN数据的接收 298
17.6.7 MCP2515驱动实现 300
第 14章 U-Boot 304
14.1 Bootloader 304
14.1.1 概念 304
14.1.2 分类 305
14.1.3 Bootloader对不同CPU架构支持 306
14.2 U-Boot概述 307
14.2.1 U-Boot概念 307
14.2.2 U-Boot的特性 307
14.2.3 工作模式 308
14.2.4 U-Boot常用命令 309
14.2.5 配置举例 312
14.3 U-Boot移植步骤 313
14.3.1 U-Boot源码简介 313
14.3.2 U-boot源码配置 316
14.3.3 U-Boot源码编译 319
14.4 U-Boot硬件驱动移植 321
14.4.1 实现串口输出 321
14.4.2 网卡驱动移植 322
14.4.3 FLASH移植 (EMMC) 325
14.5 SD卡制作 331
14.5.1 编写脚本 331
14.5.2 sd卡制作 334
14.5.3 通过sd卡启动烧写U-Boot 334
14.5.4 网络烧写U-Boot 336
第 15章、U-Boot代码启动分析 337
15.1 内核启动流程概述 337
15.1.1 U-boot启动加载linux内核一般流程 337
15.1.2 Exynos 4412内存布局 339
15.1.3 Booting Sequence 340
15.1.4 SD卡镜像布局 342
15.1.5 lds文件 343
15.2 U-Boot启动流程代码详解 344
15.2.1 U-Boot启动代码流程 344
15.2.2 U-Boot启动详解 346
15.3 U-Boot启动的几个关键问题 364
第 16章 网卡DM9000x 365
16.1 网卡概述 365
16.2 DM9000AE 366
16.2.1 DM9000AE概述 366
16.2.2 模块图 367
16.2.3 引脚说明 368
16.2.4 DM9000AE内部寄存器 372
16.3 SROM 控制器 378
16.3.1 概念 378
16.3.2 寄存器SROM_BW、SROM_BC1 378
16.3.3 配置为SROM模式 383
16.3.4 SROM初始化 388
16.4 DM9000AE驱动分析 392
16.4.1 网卡注册 392
16.4.2 网卡注册代码分析 394
16.4.5 网卡的初始化 398
16.4.6 数据的发送 402
16.4.7 数据的接收 404
16.4.4 网卡注销 406
16.5 U-Boot中网络协议栈 407
16.5.1 网络协议栈架构 407
16.5.2 DNS协议详解 408
第 17章 关于汇编的两点补充 420
17.1 为什么使用结构体效率会高? 420
17.1.1 定义多个全局变量 420
17.1.2 使用结构体 423
17.1.3 literal pool 424
17.1.4 继续优化 425
17.2 位置无关码 426
17.2.1 为什么需要位置无关码? 426
17.2.2 如何编写位置无关码 427
17.2.3 举例 427
17.2.4 总结 431
17.2.5 思考题 432
作者简介
彭丹,硕士,“一口Linux”公众号创始人,南京六九零二科技有限公司高级嵌入式驱动工程师。从事嵌入式软件开发工作16年。精通计算机网络、ARM、基于Linux的驱动开发。获得多项科技发明授权、多篇软件文章等。 周海涛,硕士,长期从事网络安全和信息化建设相关工作,著有多篇论文,江苏省第六期333高层次人才培养工程培养对象。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥31.9¥65.0 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥48.2¥79.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0