一口Linux

电子技术应用专栏作家——一口Linux。一起学习嵌入式、Linux、网络、驱动、arm知识

我的新书上线了!

0
阅读(857)

我的新书《从零开始学ARM》

终于在各大平台(京东、当当、淘宝)上架了!!  



image.png


亲笔签名购买链接,见文章底部



编写初衷


彭老师从事嵌入式开发工作已经16年,接触过非常多的嵌入式产品:

路由器、交换机、胖AP、瘦AP、手持终端、自组网设备、无线模组、物联网模组等


接触过嵌入式操作系统:

vxworks、Linux、ThreadX等;


开发调试过的模块也遍布应用层和驱动层:

网络通信协议、Linux应用程序、驱动、web页面、数据库


也写过多篇专利和软著,但是很长一段时间内,这些知识点始终都没能融会贯通起来:


硬件上电之后程序到底是如何运行的?

道如何关闭中断?

道c语言和汇编是如何互相调用?

那几万个内核文件为什么能有条不紊的编译到一个镜像文件?

如何用程序与外设交互?

操作系统是如何响应中断的?

为什么指针跑飞了会出现段错误?

uboot为什么可以下载镜像、设备树文件?

为什么开发板可以从usb、sdcard、eMMC、网络启动?

内核是如何启动的?

等等。


和大部分工程师一样,


每日疲于应付公司的项目,


而嵌入式底层的知识点很多、很杂,


想抽出完整的业余时间系统学习,难度很大。


机缘巧合,我系统学习了ARM汇编指令、ARM架构、GNU编译、裸机驱动、uboot、系统移植,


以及Linux系统程序开发+Linux驱动之后,


量变到质变,顿时豁然开朗,


回头再看之前开发的模块,


终于理解他们之间的关系,


不同平台的模块相似性和差异性,


众多看似独立的知识点终于融合在了一起,


对嵌入式系统的理解也提升了一个段位,


后面工作学习接触的新技术,


就像海绵吸水一样,很轻松融入到自己的知识体系中。


出版社找我约稿,


最终我选择了ARM这个主题。


将多年的开发和培训经验做了总结,


编写此书,同时录制了配套学习视频,


让想入门底层开发的朋友快速入门、少走弯路。


image.png



面向人群


本书主要面向想学习ARM开发技术、嵌入式底层开发的初学者,


大部分内容是从事单片机、Linux驱动开发工程师甚至硬件工程师必备知识。


内容的组织由浅入深,关键知识点均有源码实例,资料详尽,


配合B站视频学习效果更佳。



目录

上下滑动查看

第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




资料获取


本书涉及的开发环境,和文中所有资料、源代码,均无偿提供。


公众号后台回复:arm



image.png



配套视频



为了更好的让各位读者学习本书内容,


彭老师正在录制本书配套的视频,并免费发布在B站

(全网同名:一口Linux),


https://space.bilibili.com/661326452


目前已经录制了第一期视频,


第二期视频对应ppt已经制作完毕,后续会陆续更新。


第一期视频:

image.png


第二期部分ppt(暂时320页):



image.png


购买链接



为了感谢众多粉丝多年支持,


暂定以7折的折扣,


用于回馈粉丝,


并有彭老师亲笔签名,


暂定300本,先购先得。


购买链接


#小程序://一口Linux/0AJJqRZQzyovtsl



最后


为感谢各位粉丝的支持,


后面会不定期在B站直播,


现场会送出一定数量的Linux知识图谱


凡购买本书的读者,均可以参加该活动。


image.png


为不错过活动,


建议大家加我好友:yikoupeng


一起讨论学习嵌入式、Linux、网络、ARM、驱动!


望大家支持知识创作者,理性下单。



原文链接:https://mp.weixin.qq.com/s/hEc83TbFGDjlWad6yPJE-g


微信图片_20220701092006.jpg

电子技术应用专栏作家  一口Linux