展开全部

主编推荐语

ARM处理器编程深度教学。

内容简介

本书基于X210开发板讲解了开发板的原理图、芯片的数据手册,以及开发板的刷机流程等,讲解了GPIO、LED、DDR、串口、定时器、看门狗、SD卡、NAND Flash、iNAND、I2C总线、LCD屏、A/D转换器、电阻式和电容式触摸屏等ARM CPU常见外设的原理,并使用汇编和C语言编程进行了外设及代码重定位、时钟体系等的原理和功能的编程实践。

本书还基于ARM Cortex-A8内核的三星S5PV210 CPU,主要讲解ARM CPU开发的全套相关技术,包括ARM体系的背景知识、常规开发方式、ARM体系结构和汇编指令集。

本书最后还利用X210平台结合部分外设写了一个裸机串口的Shell作为小项目,帮助读者理解什么是交互式Shell,为下一阶段U-Boot及Linux内核的学习打好基础。在具体讲解过程中,本书引用了产品的一部分原始英文图表,并有针对性地进行了适当的说明。

目录

  • 版权信息
  • 内容提要
  • 前言
  • 资源与支持
  • 第1章 ARM那些你需要知道的事
  • 1.1 ARM公司大事记
  • 1.2 ARM公司的商业模式和生态系统
  • 1.3 ARM处理器版本命名解析
  • 1.3.1 如何描述ARM处理器的版本号
  • 1.3.2 ARM处理器版本的发展历程
  • 1.4 CPU和SoC的区别及外围设备的概念
  • 1.4.1 CPU和SoC的区别
  • 1.4.2 外围设备
  • 1.5 学习平台的选择
  • 1.5.1 学习平台的选择要求
  • 1.5.2 为什么选择三星S5PV210
  • 1.6 X210开发板介绍
  • 1.7 基于单片机的嵌入式系统和基于复杂操作系统的嵌入式系统的区别
  • 1.7.1 芯片平台对比
  • 1.7.2 片上资源、价格、应用领域上的对比
  • 1.7.3 开发模式对比
  • 1.7.4 技术特征对比
  • 1.7.5 职业发展对比
  • 1.8 嵌入式开发学习和编程语言、英语水平等的关系
  • 1.8.1 嵌入式开发学习和编程语言的关系
  • 1.8.2 嵌入式开发学习和英语水平的关系
  • 1.8.3 嵌入式开发学习和数电、模电的关系
  • 1.8.4 嵌入式开发学习和专业的关系
  • 1.8.5 嵌入式开发学习和个人性格的关系
  • 1.9 嵌入式系统的构成、特点和发展方向
  • 1.9.1 嵌入式系统的构成
  • 1.9.2 嵌入式系统的特点
  • 1.9.3 嵌入式系统的发展方向
  • 1.10 交叉编译
  • 1.10.1 软件开发的两种模式
  • 1.10.2 交叉编译的特点
  • 1.11 CPU的设计原理、地址总线/数据总线/控制总线
  • 1.11.1 CPU的设计原理
  • 1.11.2 地址总线、数据总线和控制总线
  • 1.12 嵌入式辅助开发工具
  • 1.13 习题
  • 第2章 ARM CPU的体系结构与汇编指令
  • 2.1 可编程器件的编程原理
  • 2.2 指令集对CPU的意义
  • 2.3 CISC和RISC
  • 2.4 统一编址和独立编址、冯·诺依曼结构和哈佛结构
  • 2.4.1 I/O与内存的统一编址和独立编址
  • 2.4.2 冯·诺依曼结构和哈佛结构
  • 2.5 软件编程控制硬件的关键
  • 2.5.1 寄存器的含义及查看方法
  • 2.5.2 寄存器的分类
  • 2.6 S5PV210的地址映射详解
  • 2.7 CPU的外存储器和接口方式
  • 2.7.1 SoC外存储器分类与介绍
  • 2.7.2 S5PV210支持的外存储器
  • 2.8 S5PV210的启动过程详解
  • 2.8.1 不同计算机系统内存和外存配置的区别
  • 2.8.2 S5PV210启动方式详解
  • 2.8.3 X210开发板启动方式选择
  • 2.9 ARM CPU的编程模式和7种工作模式
  • 2.9.1 ARM CPU的编程模式
  • 2.9.2 ARM CPU的7种工作模式
  • 2.10 ARM CPU的37个寄存器详解
  • 2.11 ARM CPU的异常处理方式简介
  • 2.12 ARM汇编指令集详解
  • 2.12.1 ARM汇编指令集总述
  • 2.12.2 ARM汇编指令集中指令的分类及详细讲解
  • 2.12.3 ARM汇编指令中的伪指令
  • 2.13 习题
  • 第3章 开发板、原理图和数据手册
  • 3.1 开发板配置简介
  • 3.2 资料导读
  • 3.2.1 开发板硬件手册导读
  • 3.2.2 X210核心板、底板原理图导读
  • 3.2.3 S5PV210数据手册
  • 3.3 开发板刷系统
  • 3.3.1 刷机工具简介
  • 3.3.2 开发板刷系统方法介绍
  • 3.4 新开发板X210BV3S
  • 3.5 习题
  • 第4章 GPIO和LED
  • 4.1 交叉编译工具链
  • 4.2 Makefile
  • 4.3 mkv210_image.c
  • 4.3.1 mkv210_image.c的作用
  • 4.3.2 mkv210_image.c代码解析
  • 4.4 编写点亮LED程序前的相关准备工作
  • 4.5 点亮LED
  • 4.6 扩展:反汇编工具objdump
  • 4.7 习题
  • 第5章 SDRAM和重定位
  • 5.1 关闭看门狗
  • 5.2 设置栈和调用C程序
  • 5.3 用汇编语言编写启动代码之开/关iCache
  • 5.4 重定位引入与编程实现
  • 5.4.1 重定位引入和链接脚本
  • 5.4.2 重定位代码实现
  • 5.5 SDRAM初始化
  • 5.5.1 原理图中SDRAM相关部分分析
  • 5.5.2 数据手册中SDRAM相关部分分析
  • 5.5.3 代码实战
  • 5.6 习题
  • 第6章 时钟系统
  • 6.1 SoC时钟系统简介
  • 6.2 S5PV210的时钟系统
  • 6.3 时钟设置的关键寄存器分析
  • 6.4 实现时钟设置代码详解
  • 6.4.1 S5PV210时钟设置的步骤分析
  • 6.4.2 S5PV210时钟设置汇编语言代码分析
  • 6.4.3 S5PV210时钟设置C语言代码分析
  • 6.5 习题
  • 第7章 串口通信
  • 7.1 通信发展史及电子通信涉及的基础概念
  • 7.1.1 通信发展史
  • 7.1.2 电子通信中涉及的概念
  • 7.2 串口通信的基本概念
  • 7.3 串口通信的基本原理
  • 7.4 S5PV210串口通信详解
  • 7.4.1 原理框图与自动流控
  • 7.4.2 3种扩展模式
  • 7.4.3 串口通信中的中断与时钟
  • 7.5 S5PV210串口通信编程实战
  • 7.6 uart stdio的移植介绍
  • 7.7 习题
  • 第8章 按键和CPU中断系统
  • 8.1 按键
  • 8.2 S5PV210的中断体系介绍
  • 8.3 异常向量表的编程处理
  • 8.3.1 访问异常向量表
  • 8.3.2 中断处理过程中汇编代码的使用
  • 8.4 S5PV210中断处理的主要寄存器
  • 8.5 中断处理的代码实现步骤
  • 8.6 按键与外部中断
  • 8.6.1 外部中断寄存器配置
  • 8.6.2 外部中断实现按键
  • 8.7 习题
  • 第9章 定时器、看门狗和实时时钟等
  • 9.1 定时器
  • 9.2 S5PV210中的PWM定时器介绍
  • 9.2.1 S5PV210的PWM定时器原理图简介
  • 9.2.2 预分频器与分频器
  • 9.2.3 TCNT、TCNTB、TCON和TCNTO寄存器功能介绍
  • 9.2.4 自动重载和双缓冲
  • 9.3 PWM波形介绍
  • 9.3.1 什么是PWM
  • 9.3.2 PWM波形的生成原理
  • 9.3.3 输出电平翻转器
  • 9.3.4 死区生成器
  • 9.4 蜂鸣器和PWM定时器编程实战
  • 9.4.1 蜂鸣器的工作原理
  • 9.4.2 原理图和硬件信息
  • 9.4.3 驱动蜂鸣器的PWM定时器代码编写
  • 9.4.4 编写C语言主函数、子函数
  • 9.4.5 修改Makefile
  • 9.5 看门狗
  • 9.5.1 什么是看门狗及看门狗的作用
  • 9.5.2 S5PV210看门狗的结构原理图
  • 9.5.3 看门狗的主要寄存器
  • 9.6 看门狗的编程实战
  • 9.6.1 看门狗产生中断信号功能代码编写
  • 9.6.2 看门狗产生复位信号功能代码编写
  • 9.7 实时时钟介绍
  • 9.7.1 S5PV210实时时钟的结构框图
  • 9.7.2 S5PV210 RTC的主要寄存器
  • 9.7.3 BCD码介绍
  • 9.8 RTC编程实战
  • 9.8.1 编程注意事项
  • 9.8.2 实战步骤详解
  • 9.8.3 示例程序详解
  • 9.9 习题
  • 第10章 SD卡启动
  • 10.1 SD卡的特点和背景知识
  • 10.2 SD卡的编程接口
  • 10.2.1 物理接口
  • 10.2.2 SD协议与SPI协议
  • 10.3 S5PV210的SD卡启动详解
  • 10.3.1 SoC为何要支持SD卡启动
  • 10.3.2 SD卡启动的难点在哪里
  • 10.3.3 SD卡启动流程
  • 10.3.4 SoC支持SD卡启动的秘密
  • 10.3.5 扇区和块的概念
  • 10.3.6 用函数指针方式调用device copy function
  • 10.4 S5PV210的SD卡启动实战
  • 10.4.1 任务:大于16KB的.bin文件使用SD卡启动
  • 10.4.2 代码划分为两部分(BL1和BL2)编写
  • 10.4.3 BL1中的重定位
  • 10.4.4 BL2远跳转
  • 10.5 区别于将代码分为两部分的另一种启动方式
  • 10.5.1 代码分为两部分启动的缺陷
  • 10.5.2 U-Boot的SD卡启动
  • 10.5.3 分析U-Boot的SD卡启动细节
  • 10.6 习题
  • 第11章 外存芯片NAND Flash和iNAND
  • 11.1 NAND Flash的型号和命名
  • 11.1.1 NAND Flash的数据位
  • 11.1.2 NAND Flash的功能框图
  • 11.2 NAND Flash的单元组织:Block和Page
  • 11.2.1 带内数据和带外数据
  • 11.2.2 NAND Flash的地址时序和命令码
  • 11.3 NAND Flash的坏块检查
  • 11.3.1 NAND Flash的页写操作
  • 11.3.2 NAND Flash的擦除和页读操作
  • 11.4 SoC的NAND Flash控制器
  • 11.5 NAND Flash操作代码解析
  • 11.6 iNAND介绍
  • 11.7 SD卡/iNAND硬件接口
  • 11.7.1 SD卡命令相应的操作模式
  • 11.7.2 SD卡体系结构、内部寄存器
  • 11.8 SD/iNAND代码分析
  • 11.8.1 Hsmmc.h头文件CMD×和ACMD×命令码分析
  • 11.8.2 Hsmmc.c文件分析
  • 第12章 I2C通信
  • 12.1 I2C通信介绍
  • 12.2 I2C通信的时序
  • 12.2.1 I2C的空闲态/忙态、起始位/结束位
  • 12.2.2 I2C数据传输格式(数据位和ACK)
  • 12.2.3 数据在总线上的传输协议
  • 12.3 S5PV210的I2C控制器
  • 12.4 X210开发板的板载重力传感器介绍
  • 12.4.1 原理图
  • 12.4.2 重力传感器简介
  • 12.4.3 I2C从设备地址
  • 12.4.4 I2C从设备的通信速率
  • 12.5 I2C的通信流程
  • 12.5.1 I2C的通信流程寄存器分析
  • 12.5.2 重力传感器读/写寄存器流程分析
  • 12.6 I2C通信代码分析
  • 12.7 习题
  • 第13章 A/D转换器
  • 13.1 A/D转换器的引入
  • 13.1.1 模拟量和数字量
  • 13.1.2 什么是A/D转换器
  • 13.1.3 有A/D转换器自然就有D/A转换器
  • 13.2 A/D转换器的主要相关概念
  • 13.2.1 量程
  • 13.2.2 精度
  • 13.2.3 转换速率
  • 13.2.4 A/D转换器的工作时钟框图
  • 13.2.5 A/D转换器的通道数
  • 13.2.6 A/D转换器和电阻式触摸屏的关系
  • 13.3 S5PV210的A/D转换控制器
  • 13.4 硬件设计分析
  • 13.5 软件设计
  • 13.6 程序烧录与调试
  • 13.7 习题
  • 第14章 LCD屏
  • 14.1 LCD简介
  • 14.1.1 什么是LCD
  • 14.1.2 LCD的显示原理和特点
  • 14.1.3 LCD屏的种类
  • 14.1.4 其他类型的显示屏
  • 14.2 LCD设备的接口技术
  • 14.2.1 LCD设备通信接口中的电平转换
  • 14.2.2 RGB接口详解
  • 14.3 LCD的显像原理和相关概念
  • 14.3.1 像素及相关概念
  • 14.3.2 扫描
  • 14.3.3 驱动器和控制器
  • 14.3.4 显示内存(显存)
  • 14.3.5 LCD屏的6个主要时序参数
  • 14.4 颜色在计算机中的表示
  • 14.4.1 计算机中的颜色是离散的
  • 14.4.2 常见像素深度
  • 14.5 S5PV210的LCD控制器
  • 14.5.1 虚拟屏幕叠加
  • 14.5.2 虚拟显示
  • 14.6 LCD编程实战
  • 14.6.1 LCD控制器初始化
  • 14.6.2 显示像素、刷背景、横线竖线和画圆功能的实现
  • 14.6.3 写英文和中文字符
  • 14.6.4 画图
  • 14.7 习题
  • 第15章 触摸屏
  • 15.1 输入设备简介及触摸屏介绍
  • 15.1.1 触摸屏的特点
  • 15.1.2 触摸屏和显示屏的联系与区别
  • 15.2 电阻式触摸屏的原理
  • 15.3 S5PV210的电阻式触摸屏控制器
  • 15.3.1 控制器框图介绍
  • 15.3.2 控制器部件的工作模式选择
  • 15.3.3 控制器的主要寄存器
  • 15.4 电容式触摸屏的原理
  • 15.4.1 人体感知电流
  • 15.4.2 专用电路计算坐标
  • 15.4.3 多个区块支持多点触摸
  • 15.4.4 对外提供I2C的访问接口
  • 15.5 FT5x06电容触摸IC简介
  • 15.6 习题
  • 第16章 Shell原理和问答机制引入
  • 16.1 理解Shell
  • 16.1.1 什么是Shell
  • 16.1.2 Shell的运行原理
  • 16.1.3 Shell应用举例
  • 16.2 从零写最简单的Shell
  • 16.2.1 使用printf和scanf函数做输入回显
  • 16.2.2 定义简单命令集
  • 16.3 将简易Shell移植到开发板中
  • 16.3.1 工程选定、文件复制、Makefile编写
  • 16.3.2 printf和scanf函数的移植
  • 16.3.3 main.c和其余文件
  • 16.3.4 编译下载和调试验证
  • 16.4 定义标准命令集及解析
  • 16.4.1 添加cmd_parser和cmd_exec函数
  • 16.4.2 自己动手写strcmp和strcpy函数
  • 16.4.3 定义命令集、添加shell.h头文件
  • 16.4.4 修改代码
  • 16.4.5 烧录与测试
  • 16.5 添加第一个命令
  • 16.5.1 命令任务分析
  • 16.5.2 命令解析与命令执行
  • 16.5.3 修改代码
  • 16.5.4 第一个命令的测试
  • 16.6 添加其他命令
  • 16.6.1 添加pwm.c文件
  • 16.6.2 添加adc.c命令文件
  • 16.6.3 移植printf函数
  • 16.6.4 添加lcd.c文件
  • 16.6.5 修改代码
  • 16.6.6 编译测试
  • 16.7 实现开机倒计时自动执行命令
  • 16.7.1 添加计时功能
  • 16.7.2 修改代码
  • 16.7.3 测试运行
  • 16.7.4 构建BL1和BL2烧录
  • 16.8 初步实现环境变量
  • 16.8.1 添加env.c文件对环境变量进行设置、修改
  • 16.8.2 修改代码
  • 16.8.3 测试代码
  • 16.9 习题
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。