图书介绍

清华开发者书库 ARM Cortex-M3与Cortex-M4权威指南PDF|Epub|txt|kindle电子书版本网盘下载

清华开发者书库 ARM Cortex-M3与Cortex-M4权威指南
  • (英)姚文祥著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302402923
  • 出版时间:2015
  • 标注页数:542页
  • 文件大小:110MB
  • 文件页数:570页
  • 主题词:微处理器-指南

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

清华开发者书库 ARM Cortex-M3与Cortex-M4权威指南PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 ARM Cortex-M处理器简介1

1.1 什么是ARM Cortex-M处理器1

1.1.1 Cortex-M3和Cortex-M4处理器1

1.1.2 Cortex-M处理器家族2

1.1.3 处理器和微控制器的区别3

1.1.4 ARM和微控制器供应商4

1.1.5 选择Cortex-M3和Cortex-M4微控制器4

1.2 Cortex-M处理器的优势6

1.2.1 低功耗6

1.2.2 性能6

1.2.3 能耗效率6

1.2.4 代码密度6

1.2.5 中断6

1.2.6 易于使用7

1.2.7 可扩展性7

1.2.8 调试特性7

1.2.9 OS支持7

1.2.10 多种系统特性7

1.2.11 软件可移植性和可重用性7

1.2.12 选择(设备、工具和OS等)7

1.3 MAR Cortex-M处理器应用8

1.4 ARM处理器和ARM微控制器的资源8

1.4.1 ARM网站上有什么8

1.4.2 微控制器供应商提供的文档10

1.4.3 工具供应商提供的文档10

1.4.4 其他资源10

1.5 背景和历史11

1.5.1 ARM简史11

1.5.2 ARM处理器的发展11

1.5.3 Thumb ISA的架构版本13

1.5.4 处理器命名15

1.5.5 关于ARM生态系统16

第2章 嵌入式软件开发简介18

2.1 ARM微控制器是怎样构成的18

2.2 开始时需要准备什么19

2.2.1 开发组件19

2.2.2 开发板19

2.2.3 调试适配器20

2.2.4 软件设备驱动21

2.2.5 例子21

2.2.6 文档和其他资源21

2.2.7 其他设备21

2.3 软件开发流程22

2.4 编译应用程序23

2.5 软件流程24

2.5.1 轮询24

2.5.2 中断驱动25

2.5.3 多任务系统27

2.6 C程序中的数据类型27

2.7 输入、输出和外设访问28

2.8 微控制器接口31

2.9 Cortex微控制器软件接口标准(CMSIS)32

2.9.1 CMSIS简介32

2.9.2 CMSIS-Core所做的标准化34

2.9.3 CMSIS-Core的组织结构34

2.9.4 如何使用CMSIS-Core35

2.9.5 CMSIS的优势36

2.9.6 CMSIS的多个版本38

第3章 技术综述40

3.1 Cortex-M3和Cortex-M4处理器的一般信息40

3.1.1 处理器类型40

3.1.2 处理器架构40

3.1.3 指令集41

3.1.4 模块框图43

3.1.5 存储器系统44

3.1.6 中断和异常支持45

3.2 Cortex-M3和Cortex-M4处理器的特性45

3.2.1 性能45

3.2.2 代码密度46

3.2.3 低功耗46

3.2.4 存储器系统47

3.2.5 存储器保护单元47

3.2.6 中断处理47

3.2.7 OS支持和系统级特性48

3.2.8 Cortex-M4的特殊特性48

3.2.9 易于使用49

3.2.10 调试支持49

3.2.11 可扩展性50

3.2.12 兼容性51

第4章 架构52

4.1 架构简介52

4.2 编程模型52

4.2.1 操作模式和状态52

4.2.2 寄存器54

4.2.3 特殊寄存器56

4.2.4 浮点寄存器62

4.3 应用程序状态寄存器65

4.3.1 整数状态标志65

4.3.2 Q状态标志66

4.3.3 GE位66

4.4 存储器系统67

4.4.1 存储器系统特性67

4.4.2 存储器映射68

4.4.3 栈存储69

4.4.4 存储器保护单元(MPU)72

4.5 异常和中断73

4.5.1 什么是异常73

4.5.2 嵌套向量中断控制器(NVIC)74

4.5.3 向量表75

4.5.4 错误处理76

4.6 系统控制块(SCB)76

4.7 调试76

4.8 复位和复位流程78

第5章 指令集80

5.1 ARM Cortex-M处理器指令集的背景简介80

5.2 ARM Cortex-M处理器间的指令集比较82

5.3 理解汇编语言语法83

5.4 指令后缀的使用87

5.5 统一汇编语言(UAL)88

5.6 指令集89

5.6.1 处理器内传送数据90

5.6.2 存储器访问指令92

5.6.3 算术运算100

5.6.4 逻辑运算101

5.6.5 移位和循环移位指令102

5.6.6 数据转换运算(展开和反序)103

5.6.7 位域处理指令105

5.6.8 比较和测试106

5.6.9 程序流控制106

5.6.10 饱和运算113

5.6.11 异常相关指令115

5.6.12 休眠模式相关指令116

5.6.13 存储器屏障指令117

5.6.14 其他指令118

5.6.15 不支持的指令119

5.7 Cortex-M4特有的指令120

5.7.1 Cortex-M4的增强DSP扩展简介120

5.7.2 SIMD和饱和指令121

5.7.3 乘法和MAC指令124

5.7.4 打包和解包127

5.7.5 浮点指令128

5.8 桶形移位器130

5.9 在编程中访问特殊寄存器和特殊指令131

5.9.1 简介131

5.9.2 内在函数132

5.9.3 内联汇编和嵌入汇编132

5.9.4 使用其他的编译器相关的特性132

5.9.5 访问特殊寄存器132

第6章 存储器系统134

6.1 存储器系统特性简介134

6.2 存储器映射134

6.3 连接处理器到存储器和外设137

6.4 存储器需求140

6.5 存储器的端140

6.6 数据对齐和非对齐数据访问支持142

6.7 位段操作143

6.7.1 简介143

6.7.2 位段操作的优势146

6.7.3 不同数据大小的位段操作148

6.7.4 C程序实现的位段操作148

6.8 默认的存储器访问权限149

6.9 存储器访问属性150

6.10 排他访问152

6.11 存储器屏障154

6.12 微控制器中的存储器系统154

第7章 异常和中断157

7.1 异常和中断简介157

7.2 异常类型158

7.3 中断管理简介159

7.4 优先级定义160

7.5 向量表和向量表重定位165

7.6 中断输入和挂起行为168

7.7 异常流程简介171

7.7.1 接受异常请求171

7.7.2 异常进入流程171

7.7.3 执行异常处理171

7.7.4 异常返回172

7.8 中断控制用的NVIC寄存器细节172

7.8.1 简介172

7.8.2 中断使能寄存器173

7.8.3 设置中断挂起和清除中断挂起174

7.8.4 活跃状态175

7.8.5 优先级176

7.8.6 软件触发中断寄存器176

7.8.7 中断控制器类型寄存器177

7.9 用于异常和中断控制的SCB寄存器细节177

7.9.1 SCB寄存器简介177

7.9.2 中断控制和状态寄存器(ICSR)178

7.9.3 向量表偏移寄存器(VTOR)179

7.9.4 应用中断和复位控制寄存器(AIRCR)179

7.9.5 系统处理优先级寄存器(SCB->SHP[0~11])180

7.9.6 系统处理控制和状态寄存器(SCB->SHCSR)181

7.10 用于异常或中断屏蔽的特殊寄存器细节182

7.10.1 PRIMASK182

7.10.2 FAULTMASK182

7.10.3 BASEPRI183

7.11 设置中断的步骤示例184

7.11.1 简单情况184

7.11.2 向量表重定位时的情况185

7.12 软件中断185

7.13 要点和提示186

第8章 深入了解异常处理188

8.1 简介188

8.1.1 关于本章188

8.1.2 C实现的异常处理188

8.1.3 栈帧189

8.1.4 EXC_RETURN191

8.2 异常流程192

8.2.1 异常进入和压栈192

8.2.2 异常返回和出栈193

8.3 中断等待和异常处理优化195

8.3.1 什么是中断等待195

8.3.2 多周期指令执行时的中断196

8.3.3 末尾连锁196

8.3.4 延迟到达196

8.3.5 出栈抢占197

8.3.6 惰性压栈197

第9章 低功耗和系统控制特性199

9.1 低功耗设计199

9.1.1 低功耗对微控制器有什么意义199

9.1.2 低功耗系统需求200

9.1.3 Cortex-M3和Cortex-M4处理器的低功耗特点201

9.2 低功耗特性201

9.2.1 休眠模式201

9.2.2 系统控制寄存器(SCR)202

9.2.3 进入休眠模式202

9.2.4 唤醒条件203

9.2.5 退出时休眠特性204

9.2.6 挂起发送事件(SEVONPEND)205

9.2.7 休眠扩展/唤醒延迟205

9.2.8 唤醒中断控制器(WIC)206

9.2.9 事件通信接口207

9.3 在编程中使用WFI和WFE211

9.3.1 何时使用WFI211

9.3.2 使用WFE212

9.4 开发低功耗应用212

9.4.1 降低动态功耗213

9.4.2 降低活跃周期214

9.4.3 减小休眠模式电流214

9.5 SysTick定时器215

9.5.1 为什么要有SysTick定时器215

9.5.2 SysTick定时器操作215

9.5.3 使用SysTick定时器217

9.5.4 其他考虑218

9.6 自复位219

9.7 CPU ID基本寄存器220

9.8 配置控制寄存器220

9.8.1 CCR简介220

9.8.2 STKALIGN位221

9.8.3 BFHFNMIGN位221

9.8.4 DIV_O_TRP位221

9.8.5 UNALIGN_TRP位221

9.8.6 USERSETMPEND位222

9.8.7 NONBASETHRDENA位222

9.9 辅助控制寄存器222

9.10 协处理器访问控制寄存器224

第10章 OS支持特性226

10.1 OS支持特性简介226

10.2 影子栈指针226

10.3 SVC异常228

10.4 PendSV异常232

10.5 实际的上下文切换234

10.6 排他访问和嵌入式OS243

第11章 存储器保护单元246

11.1 MPU简介246

11.1.1 关于MPU246

11.1.2 使用MPU246

11.2 MPU寄存器247

11.2.1 MPU类型寄存器248

11.2.2 MPU控制寄存器248

11.2.3 MPU区域编号寄存器249

11.2.4 MPU基地址寄存器249

11.2.5 MPU区域基本属性和大小寄存器250

11.2.6 MPU别名寄存器253

11.3 设置MPU253

11.4 存储器屏障和MPU配置259

11.5 使用子区域禁止260

11.5.1 允许高效的存储器划分260

11.5.2 减少所需的区域总数261

11.6 使用MPU时的注意事项261

11.6.1 程序代码261

11.6.2 数据存储器262

11.6.3 外设262

11.7 MPU的其他用法262

11.8 与Cortex-M0+处理器中的MPU间的差异262

第12章 错误异常和错误处理264

12.1 错误异常简介264

12.2 错误的原因265

12.2.1 存储器管理(MemManage)错误265

12.2.2 总线错误266

12.2.3 使用错误267

12.2.4 HardFault267

12.3 使能错误处理268

12.3.1 MemManage错误268

12.3.2 总线错误268

12.3.3 使用错误268

12.3.4 HardFault268

12.4 错误状态寄存器和错误地址寄存器269

12.4.1 简介269

12.4.2 MemManage错误信息269

12.4.3 总线错误信息270

12.4.4 使用错误信息271

12.4.5 HardFault状态寄存器271

12.4.6 调试错误状态寄存器(DFSR)271

12.4.7 错误地址寄存器MMFAR和BFAR272

12.4.8 辅助错误状态寄存器273

12.5 分析错误273

12.6 异常处理相关的错误275

12.6.1 压栈275

12.6.2 出栈275

12.6.3 惰性压栈276

12.6.4 取向量276

12.6.5 非法返回276

12.6.6 优先级和压栈或出栈错误276

12.7 锁定277

12.7.1 什么是锁定277

12.7.2 避免锁定278

12.8 错误处理279

12.8.1 用于调试的HardFault279

12.8.2 错误屏蔽282

12.9 其他信息282

12.9.1 运行具有两个栈的系统282

12.9.2 检测栈溢出283

第13章 浮点运算285

13.1 关于浮点数285

13.1.1 简介285

13.1.2 单精度浮点数285

13.1.3 半精度浮点数286

13.1.4 双精度浮点数287

13.1.5 Cortex-M处理器中的浮点支持288

13.2 Cortex-M4浮点单元(FPU)289

13.2.1 浮点单元简介289

13.2.2 浮点寄存器简介290

13.2.3 CPACR寄存器290

13.2.4 浮点寄存器组291

13.2.5 浮点状态和控制寄存器(FPSCR)291

13.2.6 浮点上下文控制寄存器(FPU->FPCCR)293

13.2.7 浮点上下文地址寄存器(FPU->FPCAR)294

13.2.8 浮点默认状态控制寄存器(FPU->FPDSCR)295

13.2.9 介质和浮点特性寄存器(FPU->MVFR0、FPU->MVFR1)296

13.3 惰性压栈详解296

13.3.1 惰性压栈特性的关键点296

13.3.2 第1种情况:被打断的任务中没有浮点上下文297

13.3.3 第2种情况:被打断的任务中有浮点上下文,ISR中没有298

13.3.4 第3种情况:被打断的任务和ISR中都有浮点上下文298

13.3.5 第4种情况:中断嵌套,且第2个中断处理中存在浮点上下文299

13.3.6 第5种情况:中断嵌套,且两个中断处理中都存在浮点上下文299

13.3.7 惰性压栈的中断299

13.3.8 浮点指令的中断300

13.4 使用浮点单元301

13.4.1 CMSIS-Core中的浮点支持301

13.4.2 用C语言实现浮点编程302

13.4.3 编译器命令行选项302

13.4.4 ABI选项:Hard-vfp和Soft-vfp303

13.4.5 特殊的FPU模式304

13.5 浮点异常305

13.6 要点和提示307

13.6.1 微控制器的运行时库307

13.6.2 调试操作308

第14章 调试和跟踪特性309

14.1 调试和跟踪特性简介309

14.1.1 什么是调试特性309

14.1.2 什么是跟踪特性310

14.1.3 调试和跟踪特性总结311

14.2 调试架构312

14.2.1 CoreSight调试架构312

14.2.2 处理器调试接口313

14.2.3 调试端口(DP)、访问端口(AP)和调试访问端口(DAP)314

14.2.4 跟踪接口315

14.2.5 CoreSight的特点316

14.3 调试模式317

14.4 调试事件318

14.5 断点特性320

14.6 调试部件简介320

14.6.1 处理器调试支持320

14.6.2 Flash补丁和断点(FPB)单元323

14.6.3 数据监视点和跟踪(DWT)单元326

14.6.4 指令跟踪宏单元328

14.6.5 嵌入式跟踪宏单元(ETM)331

14.6.6 跟踪端口接口单元(TPIU)332

14.6.7 ROM表333

14.6.8 AHB访问端口(AHB-AP)335

14.7 调试操作336

14.7.1 调试连接336

14.7.2 Flash编程336

14.7.3 断点336

第15章 Keil ARM微控制器开发套件入门337

15.1 简介337

15.2 典型的程序编译流程338

15.3 μVision入门339

15.4 工程选项347

15.4.1 Device选项348

15.4.2 Target选项348

15.4.3 Output选项349

15.4.4 Listing选项350

15.4.5 User选项350

15.4.6 C/C++选项350

15.4.7 Asm选项351

15.4.8 Linker选项352

15.4.9 Debug选项353

15.4.10 Utilities选项354

15.5 使用IDE和调试器354

15.6 使用指令集模拟器357

15.7 在SRAM中运行程序358

15.8 优化选项362

15.9 其他信息和要点363

15.9.1 栈和堆存储大小配置363

15.9.2 其他信息363

第16章 IAR Embedded Workbench for ARM入门364

16.1 IAR Embedded Workbench for ARM简介364

16.2 典型的程序编译流程364

16.3 创建简单的blinky工程366

16.4 工程选项371

16.5 提示和要点373

第17章 GCC入门374

17.1 GCC工具链374

17.2 典型开发流程374

17.3 创建简单的blinky工程376

17.4 命令行选项简介377

17.5 Flash编程379

17.5.1 使用Keil MDK-ARM379

17.5.2 使用第三方Flash编程工具380

17.6 Keil MDK-ARM和ARM嵌入式处理器GNU工具一起使用381

17.7 CoIDE和ARM嵌入式处理器GNU工具一起使用383

17.8 基于gcc的商业版开发组件388

17.8.1 Atollic TrueSTUDIO for ARM388

17.8.2 Red Suite389

17.8.3 CrossWorks for ARM389

第18章 输入和输出软件实例390

18.1 产生输出390

18.2 重定向到指令跟踪宏单元(ITM)390

18.2.1 简介390

18.2.2 Keil MDK-ARM391

18.2.3 IAR Embedded Workbench394

18.2.4 GCC395

18.3 半主机396

18.4 重定向到外设399

第19章 使用嵌入式操作系统407

19.1 嵌入式OS简介407

19.1.1 什么是嵌入式OS407

19.1.2 何时使用嵌入式OS407

19.1.3 CMSIS-RTOS的作用408

19.2 Keil RTX Real-Time Kernel409

19.2.1 关于RTX409

19.2.2 特性简介410

19.2.3 RTX和CMSIS-RTOS410

19.2.4 线程411

19.3 CMSIS-RTOS实例412

19.3.1 具有两个线程的简单CMSIS-RTOS412

19.3.2 线程间通信简介418

19.3.3 信号事件通信418

19.3.4 互斥体(MUTEX)420

19.3.5 信号量422

19.3.6 消息队列424

19.3.7 邮件队列425

19.3.8 内存池管理特性427

19.3.9 通用等待函数和超时数值428

19.3.10 定时器特性429

19.3.11 访问非特权设备431

19.4 OS感知调试432

19.5 疑难解答434

19.5.1 栈大小和栈对齐434

19.5.2 特权等级434

19.5.3 其他问题434

第20章 汇编和混合语言工程435

20.1 汇编代码在工程中的使用435

20.2 C和汇编间的交互435

20.3 汇编函数的结构437

20.4 例子438

20.4.1 ARM工具链的简单例子(Keil MDK-ARM、DS-5)438

20.4.2 ARM嵌入式处理器GNU工具的简单例子440

20.4.3 访问特殊寄存器441

20.4.4 数据存储器442

20.4.5 Hello world443

20.4.6 显示十六进制和十进制的数据444

20.4.7 NVIC中断控制446

20.4.8 无符号整数平方根447

20.5 混合语言工程448

20.5.1 从汇编中调用C函数448

20.5.2 从C中调用汇编函数449

20.5.3 嵌入汇编(Keil MDK-ARM/ARM DS-5 professional)449

20.5.4 内联汇编450

20.6 内在函数451

20.7 习语识别452

第21章 ARM Cortex-M4和DSP应用454

21.1 微控制器上的DSP454

21.2 点积实例454

21.3 传统DSP处理器的架构456

21.4 Cortex-M4的DSP指令459

21.4.1 寄存器和数据类型459

21.4.2 小数运算460

21.4.3 SIMD数据461

21.4.4 加载和存储指令462

21.4.5 算术指令462

21.4.6 Cortex-M4的一般优化策略469

21.4.7 指令限制471

21.5 为Cortex-M4编写优化的DSP代码471

21.5.1 Biquad滤波器471

21.5.2 快速傅里叶变换475

21.5.3 FIR滤波器479

第22章 使用ARM CMSIS-DSP库486

22.1 DSP库简介486

22.2 预构建的二进制代码486

22.3 函数命令规则487

22.4 获得帮助487

22.5 例1:DTMF解调487

22.5.1 产生正弦波488

22.5.2 使用FIR滤波器进行解析488

22.5.3 使用FFT进行解析490

22.5.4 使用Biquad滤波器进行解析492

22.5.5 DTMF示例代码493

22.6 例2:最小二乘法运动跟踪495

第23章 高级话题500

23.1 决断和跳转500

23.1.1 条件跳转500

23.1.2 复杂的判决树502

23.2 性能考虑503

23.3 双字栈对齐505

23.4 信号量设计的各种方法506

23.4.1 用SVC服务实现信号量506

23.4.2 使用位段实现信号量507

23.5 非基本线程使能507

23.6 中断服务的重入510

23.7 C语言实现的位数据处理513

23.8 启动代码515

23.9 栈溢出检测516

23.9.1 工具链的栈分析516

23.9.2 栈的测试分析516

23.9.3 根据栈布局检测栈溢出516

23.9.4 使用MPU517

23.9.5 使用DWT和调试监控异常517

23.9.6 OS上下文切换中的栈检查517

23.10 Flash补丁特性517

23.11 Cortex-M3和Cortex-M4处理器的版本520

23.11.1 简介520

23.11.2 Cortex-M3 r0p0到r1p0/r1p1的变动520

23.11.3 Cortex-M3 r1p1到r2p0的变动521

23.11.4 Cortex-M3 r2p0到r2p1的变动523

23.11.5 Cortex-M4 r0p0到r0p1的变动523

第24章 软件移植524

24.1 简介524

24.2 从8位/16位MCU移植到Cortex-M MCU524

24.2.1 架构差异524

24.2.2 一般调整525

24.2.3 存储器大小需求526

24.2.4 8位或16位微控制器不再适用的优化527

24.2.5 例子:从8051移植到ARM Cortex-M527

24.3 从ARM7 TDMI到Cortex-M3/M4的软件移植529

24.3.1 硬件差异简介529

24.3.2 汇编语言文件531

24.3.3 C语言文件533

24.3.4 预编译的目标文件和库533

24.3.5 优化534

24.4 不同Cortex-M处理器间的软件移植534

24.4.1 不同Cortex-M处理器间的差异534

24.4.2 所需的软件变动539

24.4.3 嵌入式OS539

24.4.4 创建Cortex-M处理器的可移植程序代码539

参考文献541

热门推荐