成功加入购物车
图书条目标准图
全新正版未拆封
彭丹 周海涛 / 人民邮电出版社 / 2023-05 / 平装
售价 ¥ 39.89 4.0折
定价 ¥99.80
品相 全新
优惠 满包邮
延迟发货说明
上书时间2023-05-28
卖家超过10天未登录
从零开始学ARM
本书主要介绍ARM开发的相关知识,详细讲解常用的ARM指令及如何基于ARM架构的外设编写驱动程序,并分析了开源软件U-Boot的启动源代码和网络协议栈。 本书第1~4章为基础篇,主要介绍CPU与ARM、搭建环境、ARM编程、异常等;第5~13章为编程篇,主要介绍基于Exynos 4412的常用外设的工作原理及驱动程序编写等;第14~17章为应用篇,主要介绍开源软件U-Boot的使用及启动程序,并分析网卡DM9000AE的驱动和网络协议栈;以及关于汇编的两点补充。 本书适合从事嵌入式开发的工程师和有一定计算机基础和C语言编程经验的初学者学习参考。
彭丹,硕士,“一口Linux”公众号创始人,南京六九零二科技有限公司高级嵌入式驱动工程师。从事嵌入式软件开发工作16年。精通计算机网络、ARM、基于Linux的驱动开发。获得多项科技发明授权、多篇软件文章等。 周海涛,硕士,长期从事网络安全和信息化建设相关工作,著有多篇论文,江苏省第六期333高层次人才培养工程培养对象。
第 1章 ARM与CPU1 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 SCP15 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 Jzelle38 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 安装Keil46 2.1.4 创建第 一个工程49 2.1.5 编译代码52 2.1.6 如何debug代码?53 2.2 GNU编译环境搭建56 2.2.1 安装VMware Workstation57 2.2.2 安装ubuntu62 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与GNU106 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与bin126 3.13.5 编译举例127 3.14 ATPCS和AAPCS132 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及LED152 5.1 GPIO153 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章 PWM162 6.1PWM基础知识162 6.2 Exynos 4412 PWM164 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章 中断、key173 7.1 GIC173 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章 UART192 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 RTC210 9.1.1 Exynos 4412 RTC特性210 9.1.2 RTC Block210 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章 ADC227 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章 I2C241 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 MPU6050255 12.3.2 参考电路258 12.3.3 MPU6050内部寄存器259 12.3.4 代码实例:260 第 13章 SPI264 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 MCP2515283 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-Boot304 14.1 Bootloader304 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-Boot334 14.5.4 网络烧写U-Boot336 第 15章、U-Boot代码启动分析337 15.1 内核启动流程概述337 15.1.1 U-boot启动加载linux内核一般流程337 15.1.2 Exynos 4412内存布局339 15.1.3 Booting Sequence340 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章 网卡DM9000x365 16.1 网卡概述365 16.2 DM9000AE366 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_BC1378 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 pool424 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
展开全部
配送说明
...
相似商品
为你推荐
开播时间:09月02日 10:30