免费送书|好书推荐第三弹——从零开始学ARM
2023-05-17
2023-05-19
电子技术应用网的朋友们大家好,好书推荐活动第三弹来啦!
本次给大家带来的是电子技术应用专栏作家 一口Linux公众号号主彭丹老师最新书籍
( 彭老师亲笔签名版 本次活动仅此一本先到先得)
本期送书规则:
1.将本活动转发至朋友圈,截止至5月19号中午12点,朋友圈获得点赞数目最多的用户可免费获得本书。
2.收到书一个月之内需要在电子技术应用技术专栏发布一篇该书的读书心得体会,不少于500字。
注:心得体会中至少要回答以下问题中的任意四个。
1.ARM有哪些工作模式?
2.各设备驱动使用的寄存器有哪些?功能是什么?
3.系统上电后,执行的第一条指令是什么?
4.在C语言环境下调用函数时,参数是如何传递的?
5.当实现同样的功能时,为什么有些C语言程序的执行效率比汇编语言的高?
6.异常源有哪些?
7.什么是异常向量表?
8.如何使能关闭中断?
9.中断发生后CPU是如何处理的?
10.CPU 如何操作LED、按键、蜂鸣器、滑动变阻器、RTC、看门狗、MPU6050等常见外设并使它们有条不紊地工作?
11.U-Boot的启动流程是什么?如何实现程序自搬移?
12.U-Boot是如何实现一个简单的网络协议栈的?
请将朋友圈点赞截图发给电子技术应用网站小编,微信如下:
书籍介绍:
《从零开始学ARM》彭丹 周海涛 著 官方售价:99.8元
彭丹:公众号『一口Linux』号主彭老师,拥有15年嵌入式开发经验和培训经验。曾任职ZTE,某研究所,华清远见教学总监。拥有多篇网络协议相关专利和软件著作。精通计算机网络、Linux系统编程、ARM、Linux驱动、龙芯、物联网。
本书主要介绍ARM开发的相关知识,详细讲解常用的ARM指令及如何基于ARM架构的外设编写驱动程序,并分析了开源软件U-Boot的启动程序和网络协议栈。
本书第1~4章为基础篇,主要介绍CPU与ARM、搭建环境、ARM编程、异常等;
第5~13章为编程篇,主要介绍基于Exynos 4412的常用外设的工作原理及驱动程序等;
第14~17章为应用篇,主要介绍开源软件U-Boot的使用及启动程序、网卡DM9000AE的驱动和网络协议栈,以及关于汇编的两点补充。
本书适合从事嵌入式开发的工程师和有一定计算机基础和C语言编程经验的初学者学习参考。
本书推荐语
本书特点
一是循序渐进,由浅入深。本书针对零基础的初学者,以FS4412开发板(基于ARMCortex-A9架构)为例,首先从开发环境的安装和配置及ARM基本指令等相关基础知识开始讲解,然后详细说明常见硬件的功能原理,进而结合硬件原理图、用户手册逐个分析这些硬件的驱动编程方法,最后介绍开源项目U-Boot的使用及启动程序,使读者将ARM相关知识点融会贯通。
二是实例丰富,内容翔实。本书中包含大量汇编实例,且所有汇编指令都在KEIL软件中测试过;硬件裸机驱动源程序均在开发板上调试过,并有详细的分析注解;U-Boot的启动源程序和U-Boot中的网络协议栈也有详细的程序注解,使读者能够复现实例,学以致用。
三是提供配套电子资源。本书的配套资源包含安装工具、源程序、PPT课件等。
面向人群
本书主要面向想学习ARM开发技术、嵌入式底层开发的初学者,
大部分内容是从事单片机、Linux驱动开发工程师甚至硬件工程师必备知识。
内容的组织由浅入深,关键知识点均有源码实例,资料详尽,
配合B站视频学习效果更佳。
资料获取
本书涉及的开发环境,和文中所有资料、源代码,均无偿提供。
一口Linux 公众号后台回复:arm
(电子技术应用专栏作家 一口Linux微信公众号二维码)
配套视频
为了更好的让各位读者学习本书内容,彭老师正在录制本书配套的视频,并免费发布在B站(全网同名:一口Linux)
https://space.bilibili.com/661326452
目前已经录制了第一期视频,第二期视频对应ppt已经制作完毕,后续会陆续更新。
本书目录:
第1章 CPU与ARM 2
1.1 CPU 2
1.1.1 CPU概述 2
1.1.2 计算机结构 4
1.1.3 CPU的组成 5
1.1.4 指令的运行 9
1.2 ARM 10
1.2.1 ARM的发展史 10
1.2.2 ARM架构 11
1.2.3 ARM处理器 13
1.3 SoC 26
第2章 搭建环境 30
2.1 KEIL软件安装 30
2.1.1 KEIL、µVision、MDK之间的关系 30
2.1.2 安装KEIL 31
2.1.3 创建工程 32
2.1.4 编译程序 34
2.1.5 如何debug程序 34
2.2 编译环境搭建 36
2.2.1 安装VMware Workstation 37
2.2.2 安装ubuntu 38
2.3 交叉编译工具安装 41
第3章 ARM编程 44
3.1 ARM指令格式 44
3.2 数据处理指令 45
3.2.1 mov指令 45
3.2.2 移位操作 47
3.2.3 cmp比较指令 49
3.2.4 tst条件指令 49
3.2.5 运算指令 50
3.3 跳转指令 52
3.4 访问程序状态寄存器指令 55
3.4.1 mrs指令 55
3.4.2 msr指令 55
3.4.3 综合实例 56
3.5 访问外部寄存器指令 60
3.5.1 ldr指令 60
3.5.2 str指令 60
3.5.3 ldrb指令 61
3.5.4 ldrh指令 62
3.6 ARM寻址方式 62
3.7 GNU书写风格 69
3.7.1 MDK书写风格与GNU书写风格 69
3.7.2 标号symbol(或label)70
3.7.3 语句格式 71
3.7.4 分段 72
3.8 伪操作 73
3.8.1 数据定义伪操作 74
3.8.2 汇编控制伪操作 75
3.8.3 .if.else.end if 75
3.8.4 杂项伪操作 76
3.9 GNU程序的编译 77
3.9.1 交叉编译工具 77
3.9.2 交叉编译工具命名规则 77
3.9.3 程序编译过程 77
3.9.4 编译选项 79
3.9.5 elf与bin文件 82
3.9.6 编译举例 83
3.10 ATPCS和AAPCS 87
3.11 内联汇编 89
3.12 C语言和汇编语言相互调用举例 91
第4章 异常 93
4.1 异常基础知识 93
4.2 异常处理 95
4.2.1 异常发生后硬件操作 95
4.2.2 异常向量表 95
4.2.3 保存执行现场 97
4.2.4 异常处理的返回 97
4.2.5 异常恢复 98
4.3 中断异常 99
4.3.1 中断概念 99
4.3.2 中断处理流程 99
4.4 软中断 100
4.4.1 swi指令 100
4.4.2 bkpt指令 101
4.4.3 举例 101
4.4.4 同时执行跳转指令并切换模式 103
4.4.5 获取中断号 103
编程篇
第5章 GPIO及LED 106
5.1 GPIO 106
5.1.1 Exynos 4412 GPIO的特性 107
5.1.2 LED电路图 108
5.1.3 如何操作GPIO 108
5.2 LED驱动程序编写 110
5.2.1 汇编程序 110
5.2.2 C语言程序实现 111
5.2.3 烧写程序 113
第6章 PWM 114
6.1 Exynos 4412 PWM 114
6.1.1 PWM基础知识 114
6.1.2 Exynos 4412 PWM的特性 115
6.1.3 PWM的工作步骤 116
6.2 蜂鸣器驱动程序编写 117
6.2.1 参考电路 117
6.2.2 寄存器 118
6.2.3 程序实现 120
第7章 中断 122
7.1 GIC 122
7.1.1 分发器 123
7.1.2 CPU接口 124
7.1.3 中断处理 125
7.2 按键驱动程序编写 125
7.2.1 电路图 125
7.2.2 配置按键为中断触发方式 126
7.2.3 寄存器 127
7.2.4 程序实现 131
7.3 轮询方式 133
第8章 UART 135
8.1 UART概述 135
8.1.1 UART通信方式 135
8.1.2 UART数据帧格式 137
8.2 Exynos 4412 UART控制器 138
8.2.1 UART的特性 138
8.2.2 UART内部功能模块 139
8.2.3 时钟源 140
8.3 UART的操作 141
8.3.1 参考电路 141
8.3.2 寄存器 142
8.3.3 程序实现 145
8.3.4 移植printf 148
第9章 RTC 149
9.1 Exynos 4412 RTC 149
9.1.1 Exynos 4412 RTC的特性 149
9.1.2 RTC模块 149
9.1.3 备用电池 150
9.1.4 晶体振荡器 150
9.2 RTC寄存器 151
9.3 RTC的操作 153
9.4 程序实现 157
第10章 看门狗 160
10.1 Exynos 4412 看门狗 160
10.1.1 看门狗模块图 160
10.1.2 工作原理 161
10.2 驱动编写 161
10.2.1 看门狗软件程序设计流程 161
10.2.2 看门狗寄存器设置 161
10.2.3 程序实现 163
第11章 ADC 165
11.1 信号基础知识 165
11.1.1 信号分类 165
11.1.2 脉冲编码调制(PCM)166
11.2 Exynos 4412 ADC控制器 166
11.2.1 Exynos 4412 ADC控制器的特性 166
11.2.2 ADC控制器寄存器 167
11.2.3 中断组合器 169
11.2.4 A/D转换时间计算 171
11.3 程序实现 171
11.3.1 参考电路 171
11.3.2 程序实现 172
第12章 I2C 175
12.1 I2C总线 175
12.1.1 开始条件和停止条件 175
12.1.2 数据有效性 176
12.1.3 数据传输格式 176
12.2 Exynos 4412 I2C控制器 177
12.2.1 Exynos 4412 I2C控制器概述 177
12.2.2 Exynos 4412 I2C总线接口的特点 178
12.2.3 数据读写格式 178
12.2.4 数据读写流程 179
12.2.5 I2C总线控制器寄存器 181
12.3 MPU6050及驱动程序编写 184
12.3.1 MPU6050 184
12.3.2 MPU6050参考电路 186
12.3.3 MPU6050内部寄存器 187
12.3.4 程序实现 188
第13章 SPI 192
13.1 SPI基础知识 192
13.1.1 SPI的特点 192
13.1.2 极性和相位 194
13.1.3 数据交换 196
13.2 Exynos 4412 SPI控制器 197
13.3 SPI的操作 198
13.3.1 参考电路 198
13.3.2 寄存器 200
13.3.3 初始化流程 202
13.3.4 收发数据流程 205
13.4 MCP2515 206
13.4.1 MCP2515简介 207
13.4.2 MCP2515的特点 207
13.4.3 结构框图 207
13.4.4 SPI 协议模块 208
13.4.5 SPI 指令集 208
13.4.6 MCP2515初始化 211
13.4.7 数据发送 217
13.4.8 数据接收 219
13.4.9 MCP2515驱动程序实现 221
应用篇
第14章 U-Boot 226
14.1 U-Boot概述 226
14.1.1 U-Boot的特性 227
14.1.2 工作模式 227
14.1.3 U-Boot常用命令228
14.1.4 配置举例 230
14.2 U-Boot源程序 231
14.2.1 U-Boot源程序简介 231
14.2.2 U-Boot源程序配置 234
14.2.3 U-Boot源程序编译 236
14.3 移植硬件驱动 238
14.3.1 实现串口输出 238
14.3.2 移植网卡驱动 239
14.3.3 移植Flash 241
14.4 制作SD卡 246
14.4.1 烧写脚本 246
14.4.2 制作SD卡的步骤 247
14.4.3 通过SD卡启动烧写U-Boot 248
14.4.4 网络烧写U-Boot 250
第15章 U-Boot程序启动分析 251
15.1 内核启动流程概述251
15.1.1 U-Boot启动Linux内核一般流程 251
15.1.2 Exynos 4412内存映射 252
15.1.3 启动顺序 252
15.1.4 SD卡镜像布局 254
15.1.5 lds文件 255
15.2 U-Boot启动流程程序详解 256
15.2.1 U-Boot启动程序流程 256
15.2.2 U-Boot启动详解 257
第16章 网卡DM9000AE 273
16.1 网卡概述 273
16.2 DM9000AE 274
16.2.1 DM9000AE概述 274
16.2.2 引脚说明 275
16.2.3 DM9000AE内部寄存器 279
16.3 SROM 控制器 284
16.3.1 SROM控制器概述 284
16.3.2 寄存器SROM_BW和SROM_BC 284
16.3.3 配置SROM功能 288
16.3.4 SROM初始化 293
16.4 DM9000AE驱动分析 297
16.4.1 网卡注册 297
16.4.2 相关结构体 298
16.4.3 网卡的初始化 301
16.4.4 数据的发送 305
16.4.5 数据的接收 306
16.4.6 网卡注销 309
16.5 U-Boot中的网络协议栈 309
第17章 关于汇编的两点补充 321
17.1 为什么使用结构体效率会高 321
17.1.1 定义多个全局变量 321
17.1.2 使用结构体 323
17.1.3 文字池 325
17.1.4 继续优化 325
17.2 位置无关码 326
17.2.1 为什么需要位置无关码 326
17.2.2 如何编写位置无关码 326
17.2.3 举例 327