《ARM Cortex-M3权威指南 第2版》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(英)姚文祥著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2014
  • ISBN:9787302361800
  • 页数:395 页
图书介绍:本书全面深入论述ARM Cortex-M3的体系结构、编程语言及工程项目开发方法,适合作为高年级本科生、研究生的教学参考书;也非常适合作为从事相关产品研发的工程技术人员的参考用书。

第1章 介绍 1

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

1.2 ARM和ARM架构的背景 2

1.2.1 历史简介 2

1.2.2 架构版本 3

1.2.3 处理器命名 5

1.3 指令集开发 6

1.4 Thumb-2技术和指令集架构 7

1.5 Cortex-M3处理器应用 7

1.6 本书的组织结构 8

1.7 深入阅读 8

第2章 Cortex-M3综述 10

2.1 基础 10

2.2 寄存器 11

2.2.1 R0~R12:通用目的寄存器 11

2.2.2 R13:栈指针 11

2.2.3 R14:链接寄存器 12

2.2.4 R15:程序计数器 12

2.2.5 特殊寄存器 12

2.3 操作模式 13

2.4 内置的嵌套向量中断控制器 13

2.4.1 支持嵌套中断 14

2.4.2 支持向量中断 14

2.4.3 支持动态修改优先级 14

2.4.4 中断等待减小 14

2.4.5 中断屏蔽 14

2.5 存储器映射 14

2.6 总线接口 15

2.7 MPU 16

2.8 指令集 16

2.9 中断和异常 17

2.10 调试支持 19

2.11 特点概括 19

2.11.1 高性能 20

2.11.2 中断处理的高级特性 20

2.11.3 低功耗 21

2.11.4 系统特性 21

2.11.5 调试支持 21

第3章 Cortex-M3基础 22

3.1 寄存器 22

3.1.1 通用目的寄存器R0~R7 22

3.1.2 通用目的寄存器R8~R12 22

3.1.3 栈指针R13 22

3.1.4 链接寄存器R14 24

3.1.5 程序计数器R15 25

3.2 特殊寄存器 25

3.2.1 程序状态寄存器 26

3.2.2 PRIMASK、FAULTMASK和BASEPRI寄存器 27

3.2.3 控制寄存器 28

3.3 操作模式 29

3.4 异常和中断 31

3.5 向量表 32

3.6 栈存储操作 32

3.6.1 栈的基本操作 33

3.6.2 Cortex-M3栈的应用 34

3.6.3 Cortex-M3的双栈模型 35

3.7 复位流程 36

第4章 指令集 38

4.1 汇编基础 38

4.1.1 汇编语言:基本语法 38

4.1.2 汇编语言:后缀的使用 39

4.1.3 汇编语言:统一汇编语言 40

4.2 指令列表 41

4.3 指令描述 46

4.3.1 汇编语言:传送数据 47

4.3.2 LDR和ADR伪指令 50

4.3.3 汇编语言:处理数据 51

4.3.4 汇编语言:调用和无条件跳转 54

4.3.5 汇编语言:决断和条件跳转 56

4.3.6 汇编语言:组合比较和条件跳转 59

4.3.7 汇编语言:指令屏障和存储器屏障指令 60

4.3.8 汇编语言:饱和运算 61

4.4 Cortex-M3上一些有用的指令 63

4.4.1 MSR和MRS 63

4.4.2 进一步了解IF-THEN指令块 64

4.4.3 SDIV和UDIV 66

4.4.4 REV、REVH和REVSH 66

4.4.5 位反转 66

4.4.6 SXTB、SXTH、UXTB和UXTH 67

4.4.7 位域清除和位域插入 67

4.4.8 UBFX和SBFX 68

4.4.9 LDRD和STRD 68

4.4.10 表格跳转字节和表格跳转半字 69

第5章 存储器系统 71

5.1 存储器系统特性概述 71

5.2 存储器映射 71

5.3 存储器访问属性 73

5.4 默认的存储器访问权限 75

5.5 位段操作 75

5.5.1 位段操作的优势 78

5.5.2 不同数据宽度的位段操作 81

5.5.3 C程序实现位段操作 81

5.6 非对齐传输 82

5.7 排他访问 84

5.8 端模式 85

第6章 Cortex-M3设计综述 88

6.1 流水线 88

6.2 详细框图 89

6.3 Cortex-M3上的总线接口 92

6.3.1 I-CODE总线 92

6.3.2 D-CODE总线 92

6.3.3 系统总线 92

6.3.4 外部PPB 93

6.3.5 DAP总线 93

6.4 Cortex-M3上的其他接口 93

6.5 外部PPB 94

6.6 典型连接 94

6.7 复位类型和复位信号 95

第7章 异常 97

7.1 异常类型 97

7.2 优先级定义 98

7.3 向量表 103

7.4 中断输入和挂起行为 104

7.5 错误异常 106

7.5.1 总线错误 106

7.5.2 存储器管理错误 107

7.5.3 使用错误 108

7.5.4 硬件错误 109

7.5.5 处理错误 110

7.6 请求管理调用和可挂起的服务调用 111

第8章 嵌套向量中断控制器和中断控制 114

8.1 嵌套向量中断控制器概述 114

8.2 基本的中断配置 114

8.2.1 中断使能和清除使能 115

8.2.2 中断设置挂起和清除挂起 116

8.2.3 优先级 117

8.2.4 活跃状态 117

8.2.5 PRIMASK和FAULTMASK特殊寄存器 118

8.2.6 BASEPRI特殊寄存器 118

8.2.7 其他异常的配置寄存器 119

8.3 设置中断的步骤实例 121

8.4 软件中断 123

8.5 SYSTICK定时器 123

第9章 中断行为 126

9.1 中断/异常流程 126

9.1.1 压栈 126

9.1.2 取向量 127

9.1.3 寄存器更新 127

9.2 异常退出 128

9.3 嵌套中断 128

9.4 末尾连锁中断 128

9.5 延迟到达 129

9.6 进一步了解异常返回值 130

9.7 中断等待 131

9.8 中断相关的错误 132

9.8.1 压栈 132

9.8.2 出栈 132

9.8.3 取向量 132

9.8.4 非法返回 132

第10章 Cortex-M3编程 133

10.1 概述 133

10.2 典型的开发流程 133

10.3 使用C 134

10.3.1 使用RealView开发组件的简单C程序实例 134

10.3.2 使用Keil MDK-ARM编译相同的例程 137

10.3.3 用C访问存储器映射的寄存器 138

10.3.4 内在函数 140

10.3.5 嵌入式汇编和内联汇编 141

10.4 CMSIS 142

10.4.1 CMSIS背景 142

10.4.2 标准化的问题 142

10.4.3 CMSIS的组织结构 143

10.4.4 使用CMSIS 143

10.4.5 CMSIS的优势 145

10.5 使用汇编 146

10.5.1 汇编和C的接口 147

10.5.2 汇编编程的第一步 147

10.5.3 生成输出 148

10.5.4 “Hello World”实例 149

10.5.5 使用数据存储器 153

10.6 在信号量中使用排他访问 153

10.7 在信号量中使用位段 156

10.8 使用位域提取和表格跳转 157

第11章 异常编程 159

11.1 使用中断 159

11.1.1 设置栈 159

11.1.2 设置向量表 160

11.1.3 设置中断优先级 160

11.1.4 使能中断 161

11.2 异常/中断处理 163

11.3 软件中断 165

11.4 向量表重定位实例 166

11.5 使用SVC 168

11.6 SVC实例:在文字消息输出函数中的应用 170

11.7 用C实现SVC 172

第12章 高级编程特性和系统行为 175

12.1 运行具有两个独立栈的系统 175

12.2 双字栈对齐 177

12.3 非基本线程使能 178

12.4 性能考虑 180

12.5 锁定的情况 181

12.5.1 锁定期间发生了什么 182

12.5.2 避免锁定 183

12.6 FAULTMASK 183

第13章 存储器保护单元 184

13.1 概述 184

13.2 MPU寄存器 184

13.3 设置MPU 189

13.4 典型设置 196

第14章 Cortex-M3的其他特性 199

14.1 SYSTICK定时器 199

14.2 电源管理 201

14.2.1 休眠模式 201

14.2.2 退出休眠特性 203

14.2.3 唤醒中断控制器 203

14.3 多处理器通信 205

14.4 自复位控制 209

第15章 调试架构 211

15.1 调试特性概述 211

15.2 CoreSight概述 211

15.2.1 处理器调试接口 212

15.2.2 调试主机接口 212

15.2.3 DP模块、AP模块和DAP 213

15.2.4 跟踪接口 213

15.2.5 CoreSight特点 214

15.3 调试模式 215

15.4 调试事件 217

15.5 Cortex-M3 中的断点 219

15.6 调试时访问寄存器内容 219

15.7 其他的内核调试特性 221

第16章 调试部件 222

16.1 概述 222

16.2 跟踪部件:DWT 223

16.3 跟踪部件:ITM 224

16.3.1 使用ITM的软件跟踪 225

16.3.2 使用ITM和DWT的硬件跟踪 226

16.3.3 ITM时间戳 226

16.4 跟踪部件:ETM 226

16.5 跟踪部件:TPIU 227

16.6 Flash补丁和断点单元 229

16.6.1 断点特性 229

16.6.2 Flash补丁特性 229

16.6.3 比较器 229

16.7 高级高性能总线访问端口 231

16.8 ROM表 232

第17章 Cortex-M3处理器入门 235

17.1 选择一款Cortex-M3产品 235

17.2 开发工具 236

17.2.1 C编译器和调试器 236

17.2.2 嵌入式OS支持 236

17.3 Cortex-M3版本0和版本1之间的区别 238

17.4 Cortex-M3版本1和版本2之间的区别 240

17.4.1 双字栈对齐的默认配置 240

17.4.2 辅助控制寄存器 240

17.4.3 ID寄存器数值更新 241

17.4.4 调试特性 241

17.4.5 休眠特性 241

17.5 版本2新特性的优势和效果 242

17.6 Cortex-M3和Cortex-M0之间的区别 243

17.6.1 编程模型 243

17.6.2 异常和NVIC 243

17.6.3 指令集 244

17.6.4 存储器系统特性 245

17.6.5 调试特性 245

17.6.6 兼容性 245

第18章 ARM7到Cortex-M3的应用程序移植 247

18.1 概述 247

18.2 系统特性 247

18.2.1 存储器映射 247

18.2.2 中断 248

18.2.3 MPU 248

18.2.4 系统控制 249

18.2.5 操作模式 249

18.3 汇编语言文件 250

18.3.1 Thumb状态 250

18.3.2 ARM状态 250

18.4 C程序文件 252

18.5 重编译的目标文件 252

18.6 优化 252

第19章 使用GNU工具链开发Cortex-M3 254

19.1 背景 254

19.2 获得GNU工具链 255

19.3 开发流程 255

19.4 程序实例 256

19.4.1 实例1:第一个程序 256

19.4.2 实例2:链接多个文件 258

19.4.3 实例3:简单的“Hello World”程序 260

19.4.4 实例4:RAM中的数据 261

19.4.5 实例5:C程序 262

19.4.6 实例6:C实现的重定向 265

19.4.7 实例7:编写自己的向量表 267

19.5 访问特殊寄存器 267

19.6 使用不支持的指令 268

19.7 GNU C编译器中的内联汇编 268

第20章 Keil RealView微控制器开发套件入门 270

20.1 概述 270

20.2 μVision入门 270

20.3 通过UART输出“Hello World”消息 275

20.4 软件测试 278

20.5 使用调试器 280

20.6 指令集模拟器 284

20.7 修改向量表 286

20.8 使用CMSIS的秒表中断实例 286

20.9 移植现有程序使用CMSIS 292

第21章 用NI LabVIEW编程Cortex-M3 293

21.1 概述 293

21.2 什么是LabVIEW 293

21.2.1 典型应用领域 294

21.2.2 如何使用LabVIEW和 ARM 295

21.3 开发流程 295

21.4 LabVIEW工程实例 297

21.4.1 创建工程 297

21.4.2 定义输入和输出 297

21.4.3 创建程序 299

21.4.4 构建设计并测试应用程序 300

21.5 LabVIEW如何工作 302

21.6 LabVIEW的其他特性 302

21.7 移植到另外一个ARM处理器 304

附录A Cortex-M3指令集和参考资料 305

A.1 指令集总结 305

A.2 关于指令集介绍 308

A.2.1 操作数 308

A.2.2 使用PC或SP的限制 309

A.2.3 灵活的第二个操作数 309

A.2.4 移位操作 310

A.2.5 地址对齐 312

A.2.6 PC相关语句 313

A.2.7 条件执行 313

A.2.8 指令宽度选择 315

A.3 存储器访问指令 316

A.3.1 ADR 316

A.3.2 LDR和STR,立即数偏移 317

A.3.3 LDR和STR,寄存器偏移 319

A.3.4 LDR和STR,非特权 320

A.3.5 LDR,PC相关 321

A.3.6 LDM和STM 322

A.3.7 PUSH和POP 324

A.3.8 LDREX和STREX 325

A.3.9 CLREX 326

A.4 普通数据处理指令 327

A.4.1 ADD、ADC、SUB、SBC和RSB 328

A.4.2 AND、ORR、EOR、BIC和ORN 330

A.4.3 ASR、LSL、LSR、ROR和RRX 331

A.4.4 CLZ 332

A.4.5 CMP和CMN 332

A.4.6 MOV和MOVN 333

A.4.7 MOVT 335

A.4.8 REV、REV16、REVSH和RBIT 335

A.4.9 TST和TEQ 336

A.5 乘法和除法指令 337

A.5.1 MUL、MLA和MLS 337

A.5.2 UMULL、UMLAL、SMULL和SMLAL 338

A.5.3 SDIV和UDIV 339

A.6 饱和指令 340

A.7 位域指令 341

A.7.1 BFC和BFI 342

A.7.2 SBFX和UBFX 342

A.7.3 SXT和UXT 343

A.8 跳转和控制指令 344

A.8.1 B、BL、BX和BLX 344

A.8.2 CBZ和CBNZ 346

A.8.3 IT 347

A.8.4 TBB和TBH 349

A.9 其他指令 350

A.9.1 BKPT 350

A.9.2 CPS 351

A.9.3 DMB 352

A.9.4 DSB 352

A.9.5 ISB 352

A.9.6 MRS 353

A.9.7 MSR 353

A.9.8 NOP 354

A.9.9 SEV 355

A.9.10 SVC 355

A.9.11 WFE 355

A.9.12 WFI 356

附录B 16位Thumb指令和架构版本 357

附录C Cortex-M3异常快速参考 358

附录D 嵌套向量中断控制器和系统控制块寄存器快速参考 359

附录E Cortex-M3疑难解答 370

E.1 概述 370

E.2 开发错误处理 371

E.2.1 报告错误状态寄存器 371

E.2.2 报告压栈PC和其他压栈寄存器 372

E.2.3 读取错误地址寄存器 374

E.2.4 清除错误状态位 374

E.2.5 其他问题 374

E.3 了解错误的原因 374

E.4 其他可能的问题 377

附录F CodeSourcery G++链接器脚本实例 380

附录G CMSIS内核访问函数参考 385

G.1 异常和中断编号 385

G.2 NVIC访问函数 386

G.3 系统和SYSTICK函数 388

G.4 内核寄存器访问函数 389

G.5 CMSIS内在函数 389

G.6 调试消息输出函数 390

附录H 调试和跟踪接头 391

H.1 概述 391

H.2 20针Cortex调试+ETM接头 391

H.3 10针Cortex调试接头 392

H.4 老式的20针IDC接头 392

H.5 老式的38针Mictor接头 393

参考文献 395