当前位置:首页 > 工业技术
ARM系列处理器应用技术完全手册
ARM系列处理器应用技术完全手册

ARM系列处理器应用技术完全手册PDF电子书下载

工业技术

  • 电子书积分:17 积分如何计算积分?
  • 作 者:李佳编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2006
  • ISBN:7115153302
  • 页数:582 页
图书介绍:本书介绍了ARM处理器体系结构和开发方法。
《ARM系列处理器应用技术完全手册》目录

第1章 ARM系列微处理器简介 1

1.1 什么是ARM 1

1.1.1 ARM公司历史 1

1.1.2 ARM的商业模式 2

1.2 ARM体系结构的命名规则 2

1.3 初识ARM系列处理器 3

1.3.1 ARM7系列 4

1.3.2 ARM9系列 5

1.3.3 ARM9E系列 5

1.3.4 ARM10系列 5

1.3.5 ARM11系列 5

1.4.1 ARM7系列 6

1.4 ARM系列处理器的应用领域 6

1.3.8 Cortex-M3和MPCore 6

1.3.7 其他系列处理器 6

1.3.6 SecurCore系列 6

1.4.2 ARM9系列 7

1.4.3 ARM9E系列 7

1.4.4 ARM10E系列 7

1.4.5 SecureCore系列 7

1.5 ARM芯片的特点与选型 7

1.5.1 不同系列处理器间的比较 7

1.5.2 ARM芯片的选型 8

1.6 ARM开发工具 13

第2章 ARM体系结构 16

2.1 ARM体系结构的特点 16

2.2.2 流水线的分类 18

2.2 流水线 18

2.2.1 流水线的概念与原理 18

2.2.3 影响流水线性能的因素 25

2.3 ARM存储器 25

2.4 I/O管理 26

2.5 ARM开发调试方法 27

第3章 ARM微处理器的编程模型 29

3.1 数据类型 29

3.1.1 ARM的基本数据类型 29

3.1.2 浮点数据类型 30

3.1.3 存储器大/小端 30

3.2 处理器工作模式 31

3.3 ARM寄存器组织 32

3.3.1 通用寄存器 33

3.3.2 程序计数器r15 35

3.3.3 程序状态寄存器 36

3.4 异常中断处理 39

3.4.1 异常种类 39

3.4.2 异常优先级 44

3.4.3 处理器模式和异常 44

3.4.4 异常响应流程 45

3.4.5 从异常处理程序中返回 46

3.4.6 在应用程序中安装异常处理程序 48

3.4.7 FIQ和IRQ中断处理函数的设计 50

3.4.8 SWI异常处理函数的设计 54

4.1.1 数据处理指令的寻址方式概要 61

第4章 ARM指令寻址方式 61

4.1 数据处理指令的寻址方式 61

4.1.2 指令解码 62

4.1.3 移位操作 62

4.1.4 寻址方式分类详解 63

4.2 内存访问指令寻址 72

4.2.1 字及无符号字节的Load/Store指令的寻址方式 73

4.2.2 杂类Load/Store指令的寻址方式 83

4.2.3 批量Load/Store指令寻址方式 88

4.2.4 堆栈操作寻址方式 92

4.2.5 协处理器Load/Store寻址方式 93

第5章 数据传送指令 98

5.1 MOV指令 98

5.2 MVN指令 100

5.3 单寄存器的Load/Store指令 101

5.3.1 字数据传送指令 102

5.3.2 字节数据传送指令(LDRB/STRB) 105

5.3.3 半字数据传送指令(LDRH/STRH) 107

5.3.4 用户模式字数据传送指令(LDRT/STRT) 108

5.3.5 用户模式字节数据传送指令(LDRBT/STRBT) 110

5.3.6 有符号的字节/半字数据传送指令(LDRBT/STRBT) 112

5.4 多寄存器Load/Store内存访问指令 113

5.4.1 多寄存器内存字数据传送指令 114

5.4.2 用户模式多寄存器内存字数据传送指令 116

5.4.3 带状态寄存器的多寄存器内存字数据装载指令(LDM(3)) 118

5.4.4 数据传送指令应用 120

5.5 单数据交换指令 122

5.5.1 字交换指令SWP 123

5.5.2 字节交换指令SWPB 124

5.5.3 交换指令SWP应用 125

5.6 程序状态寄存器指令 125

5.6.1 MRS 126

5.6.2 MSR 126

5.6.3 程序状态寄存器指令应用 128

第6章 数据处理指令 130

6.1 AND逻辑与指令 131

6.2 EOR逻辑异或指令 133

6.3 SUB减操作指令 135

6.4 RSB减翻转指令 136

6.5 ADD加操作指令 138

6.6 ADC带进位的加法指令 139

6.7 SBC带进位的减法指令 140

6.8 RSC带进位的翻转减指令 142

6.9 TST测试指令 143

6.10 TEQ测试相等指令 144

6.11 CMP比较指令 145

6.12 CMN负数比较指令 147

6.13 ORR逻辑或指令 148

6.14 BIC位清零指令 149

第7章 乘法指令 152

7.1 MUL乘法指令 153

7.2 MLA乘-累加指令 154

7.3 UMULL无符号数长乘指令 155

7.4 UMLAL无符号长乘-累加操作指令 156

7.5 SMULL无符号长乘-累加操作指令 158

7.6 SMLAL有符号长乘-累加操作指令 159

第8章 跳转指令 161

8.1 跳转指令B及带连接的跳转指令BL 162

8.2 带状态切换的跳转指令BX 164

8.3 带状态切换的连接跳转指令BLX(1) 165

8.4 带状态切换的连接跳转指令BLX(2) 167

第9章 协处理器及其他指令 169

9.1 协处理器指令 169

9.1.1 协处理器数据操作指令CDP 170

9.1.2 协处理器数据读取指令LDC 171

9.1.3 协处理器数据写入指令STC 173

9.1.4 ARM寄存器到协处理器寄存器的数据传送指令MCR 174

9.1.5 协处理器寄存器到ARM寄存器的数据传送指令MRC 176

9.2 状态寄存器访问指令 178

9.2.1 程序状态字内容送通用寄存器指令MRS 178

9.2.2 写状态寄存器指令MSR 180

9.3 零计数指令CLZ 182

9.4 交换指令 183

9.4.1 寄存器和存储器字数据交换指令SWP 184

9.4.2 寄存器和存储器字节数据交换指令SWPB 185

9.5 异常产生指令 186

9.5.1 软中断指令SWI 186

9.5.2 断点中断指令BKPT 189

10.1 ARM汇编器所支持的伪操作 191

第10章 ARM汇编程序设计 191

10.1.1 符号定义(Symbol Definition)伪操作 192

10.1.2 数据定义(Data Definition)伪操作 197

10.1.3 汇编控制(Assembly Control)伪操作 206

10.1.4 信息报告(Reporting)伪操作 211

10.1.5 指令集选择(Instruction Set Selection)伪操作 215

10.1.6 杂项(Miscellaneous)伪操作 217

10.1.7 结构描述伪操作 228

10.2 ARM汇编器所支持的伪指令 235

10.2.1 ADR伪指令 235

10.2.2 ADRL伪指令 236

10.2.3 MOV32伪指令 237

10.2.4 LDR伪指令 237

10.3.1 ARM汇编语言语句格式 238

10.3 汇编语言文件格式 238

10.3.2 ARM汇编语言中的符号 239

10.3.3 汇编语言程序中的表达式和运算符 242

10.3.4 汇编语言预定义寄存器和协处理器 248

10.3.5 汇编语言内置变量 249

10.3.6 汇编语言的程序结构 250

10.3.7 汇编语言子程序调用 250

10.4 ARM汇编编译器的使用 251

10.4.1 选项说明列表 253

10.4.2 过程调用标准AAPCS 253

10.5.1 条件跳转及循环 254

10.5 ARM汇编程序设计举例 254

10.4.5 为FPU命名选项 254

10.4.3 浮点模式选项 254

10.4.4 为CPU命名选项 254

10.5.2 传送指令程序设计 257

10.5.3 宏的使用 267

10.5.4 使用MAP和FIELD命令描述数据结构 269

第11章 Thumb指令集 273

11.1 Thumb指令的特点及实现 273

11.2 Thumb编程模型 275

11.3 Thumb跳转指令 276

11.3.1 跳转指令B 276

11.3.2 带返回的无条件跳转指令BL 278

11.3.3 带返回链接的无条件跳转指令BLX(1) 279

11.3.5 带返回链接的无条件跳转指令BLX(2) 281

11.3.4 带状态切换的跳转指令BX 281

11.3.6 Thumb指令集中跳转指令举例 282

11.4 Thumb数据处理指令 282

11.4.1 ADC指令 284

11.4.2 小立即数加法指令ADD(1) 285

11.4.3 大立即数加法指令ADD(2) 285

11.4.4 寄存器加法指令ADD(3) 286

11.4.5 寄存器加法指令ADD(4) 287

11.4.6 PC相关加法指令ADD(5) 287

11.4.7 SP相关加法指令ADD(6) 288

11.4.8 SP相关加法指令ADD(7) 288

11.4.9 逻辑与指令AND 289

11.4.10 算术右移指令ASR(1) 290

11.4.11 算术右移指令ASR(2) 291

11.4.12 位清零指令BIC 291

11.4.13 比较指令CMN 292

11.4.14 比较指令CMP(1) 293

11.4.15 比较指令CMP(2) 294

11.4.16 比较指令CMP(3) 294

11.4.17 异或指令EOR 295

11.4.18 逻辑左移指令LSL(1) 296

11.4.19 逻辑左移指令LSL(2) 296

11.4.20 逻辑右移指令LSR(1) 297

11.4.21 逻辑右移指令LSR(2) 298

11.4.22 移位指令MOV(1) 299

11.4.23 移位指令MOV(2) 300

11.4.24 移位指令MOV(3) 301

11.4.25 乘法指令MUL 301

11.4.26 传送指令MVN 302

11.4.27 取反指令NEG 303

11.4.28 逻辑或指令ORR 303

11.4.29 循环右移指令ROR 304

11.4.30 带进位的减指令SBC 305

11.4.31 减法指令SUB(1) 306

11.4.32 减法指令SUB(2) 306

11.4.33 减法指令SUB(3) 307

11.4.34 减法指令SUB(4) 308

11.4.35 位测试指令TST 309

11.4.36 Thumb指令集中数据操作指令举例 309

11.5.1 寄存器装载指令LDR(1) 310

11.5 单寄存器数据传送指令 310

11.5.2 寄存器装载指令LDR(2) 311

11.5.3 寄存器装载指令LDR(3) 312

11.5.4 寄存器装载指令LDR(4) 313

11.5.5 字节加栽指令LDRB(1) 313

11.5.6 字节加载指令LDRB(2) 314

11.5.7 半字加载指令LDRH(1) 315

11.5.8 半字数据加载指令LDRH(2) 315

11.5.9 有符号字节数据加载指令LDRSB 316

11.5.10 有符号半字数据加载指令LDRSH 317

11.5.11 寄存器存储指令STR(1) 318

11.5.12 寄存器存储指令STR(2) 318

11.5.13 寄存器存储指令STR(3) 319

11.5.14 字节存储指令STRB(1) 320

11.5.15 寄存器存储指令STRB(2) 320

11.5.16 半字存储指令STRH(1) 321

11.5.17 寄存器存储指令STRH(2) 322

11.5.18 数据传送指令举例 323

11.6 多寄存器数据传送指令 323

11.6.1 多寄存器数据加载指令LDMIA 323

11.6.2 多寄存器数据存储指令STMIA 324

11.6.3 多寄存器压栈指令PUSH 325

11.6.4 多寄存器出栈指令POP 326

11.6.5 多寄存器数据传送指令举例 327

11.7 异常中断产生指令(断点指令) 328

11.7.1 软中断指令SWI 328

11.7.2 断点中断指令BKPT 329

11.8 未定义的指令空间 330

11.9 Thumb指令应用 330

11.9.1 Thumb的实现 330

11.9.2 Thumb的特点 332

11.10 ARM和Thumb的混合编程 333

11.10.1 互交工作基础 333

11.10.2 互交子程序 335

第12章 混合使用C、C++和汇编语言 345

12.1 内联汇编和嵌入型汇编的使用 345

12.1.1 内联汇编 345

12.1.2 嵌入式汇编 356

12.1.3 内联汇编中使用SP、LR和PC寄存器的遗留问题 362

12.1.4 内联汇编代码与嵌入式汇编代码之间的差异 363

12.2 从汇编代码访问C全局变量 364

12.3 在C++中使用C头文件 364

12.3.1 在C++中使用系统C头文件 365

12.3.2 在C++中使用自定义的C头文件 365

12.4 C、C++和ARM汇编语言之间的调用 366

12.4.1 相互调用的一般规则 366

12.4.2 C++的特定信息 367

12.4.3 混合编程调用举例 367

第13章 嵌入式软件开发 374

13.1 基于ARM处理器的嵌入式系统设计 374

13.1.1 未对齐的数据指针 374

13.1.2 结构体中未对齐字段 375

13.1.4 移植代码并检测非对齐内存访问 377

13.1.3 用于半字存取的非对齐LDR指令 377

13.2 编译器的缺省行为 378

13.2.1 Semihosting 379

13.2.2 C库结构 381

13.2.3 默认存储器映射 382

13.2.4 链接程序放置规则 382

13.2.5 应用程序启动 383

13.3 调整C库使其适应目标硬件 384

13.3.1 C库函数重定向 384

13.3.2 从最终代码映像中去掉Semihosting 385

13.4 映像文件存储器映射调整 385

13.4.1 关于分散加载 385

13.4.2 Scatter文件语法 389

13.4.3 Scatter文件典型用法 396

13.4.4 等效的简单映像分散载入描述 401

13.5 复位和初始化 405

13.5.1 初始化序列 405

13.5.2 向量表 406

13.5.3 ROM/RAM重映射 406

13.5.3 局部存储器设置有关的考虑事项 409

13.5.4 栈指针初始化 409

13.5.5 硬件初始化 411

13.6 进一步存储器映射考虑事项 411

13.6.1 在Scatter文件中定位目标外设 412

13.6.2 在Scatter文件中放置堆和栈 412

14.1.1 为编译器选择处理器结构 416

14.1 C编译器及其优化 416

第14章 高效的C编程 416

14.1.2 调试选项 417

14.1.3 优化选项 417

14.1.4 AAPCS选项 418

14.1.5 编译选项对代码生成影响示例 418

14.2 除法运算 422

14.2.1 合并除法和求余运算 422

14.2.2 使用2的整数次幂做除数 423

14.2.3 求余运算 423

14.2.4 除数是常数的除法 424

14.3 条件执行 424

14.4.1 范围检测 425

14.4 布尔表达式 425

14.4.2 和零的比较操作 426

14.5 C循环结构 427

14.5.1 循环中止 428

14.5.2 循环展开 429

14.6 Switch语句 430

14.7 寄存器分配 432

14.7.1 变量寄存器分配 432

14.7.2 指针别名 433

14.8 变量类型 438

14.8.1 局部变量 438

14.8.2 有符号数和无符号数 439

14.8.3 全局变量 439

14.9.1 减少函数调用开销 443

14.9 函数调用 443

14.9.2 使用_value_in_regs返回结构体 445

14.9.3 叶子函数 446

14.9.4 嵌套优化 447

14.9.5 单纯子函数 448

14.9.6 内嵌函数 449

14.9.7 函数定义 450

14.10 浮点运算 451

14.11 移植问题 452

第15章 ARM存储器 453

15.1 协处理器CP15 454

15.1.1 CP15寄存器访问指令 455

15.1.2 CP15中的寄存器 457

15.1.3 寄存器c0 458

15.1.4 寄存器c1 462

15.2 片上存储器 465

15.3 高速缓冲存储器Cache 465

15.3.1 Cache的分类 466

15.3.2 Cache性能的衡量 466

15.3.3 Cache工作原理 467

15.3.4 Cache与主存的关系 468

15.3.5 Cache的写策略 470

15.3.6 Cache的替换策略 471

15.3.7 与Cache相关的编程接口 472

15.3.8 内存一致性 476

15.3.9 Cache初始化子程序示例 478

15.4 存储保护单元MPU 480

15.4.1 保护域(Protection Regions) 481

15.4.2 内存访问顺序 482

15.4.3 使能MPU 482

15.4.4 重叠域 483

15.4.5 与MPU相关的CP15寄存器 483

15.5 存储管理单元MMU 487

15.5.1 MMU概述 487

15.5.2 MMU与MPU 488

15.5.3 内存访问过程 488

15.5.4 MMU的使能与禁止 489

15.5.5 虚拟地址到物理地址的转换 490

15.5.7 与TLB相关的操作 500

15.5.6 域(domain)和存储器访问权限 500

15.5.8 存储访问失效 502

15.5.9 快速上下文切换扩展(FCSE,Fast Context Switch Extension) 506

第16章 ARM体系结构的发展 510

16.1 ARM体系结构的发展过程 510

16.2 ARMv6增加的系统支持 511

16.2.1 存储管理 511

16.2.2 多处理单元支持 513

16.2.3 异常处理和中断 513

16.2.4 混和大小端支持 513

16.2.5 对媒体处理的支持 513

A.1.1 基本数据类型 515

A.1.2 字节顺序 515

A.1 数据类型 515

附录A ARM体系结构过程调用标准(AAPCS) 515

A.1.3 混和数据类型 516

A.2 基本过程调用标准 516

A.2.1 寄存器 516

A.2.2 进程、内存和栈 519

A.2.3 子程序调用标准 521

A.2.4 结果返回 521

A.2.5 参数传递 521

A.2.6 互交代码 522

A.3 C/C++语言数据类型 523

A.3.1 基本数据类型 523

A.3.2 结构、联合、枚举和位字段 525

A.4 浮点操作编译选项 527

附录B ARM指令速查(按字母顺序) 529

附录C Thumb指令速查(按字母顺序) 538

附录D ARM汇编伪操作速查手册(按字母顺序) 548

附录E 向量浮点编程 558

E.1 向量浮点协处理器 558

E.2 浮点寄存器 558

E.2.1 寄存器组 558

E.2.2 向量 559

E.3 向量和标量运算 560

E.4 VFP和条件码 560

E.5 VFP系统寄存器 561

E.5.1 浮点状态和控制寄存器FPSCR 561

E.6 清零模式(Flush—to—Zero) 563

E.5.3 浮点系统标识寄存器FPSID 563

E.5.2 浮点异常寄存器FPEXC 563

E.6.1 清零模式的适用范围 564

E.6.2 使用清零模式的影响 564

E.7 VFP指令 564

E.7.1 FABS、FCPY和FNEG 564

E.7.2 FADD和FSUB 565

E.7.3 FCMP 566

E.7.4 FCVTDS 567

E.7.5 FCVTSD 567

E.7.6 FDIV 568

E.7.7 FLD和FST 568

E.7.8 FLDM和FSTM 569

E.7.9 FMAC、FNMAC、FMSC和FNMSC 570

E.7.10 FMDRR和FMRRD 571

E.7.11 FMDHR、FMDLR、FMRDH和FMRDL 572

E.7.12 FMRS和FMSR 573

E.7.13 FMRRS和FMSRR 573

E.7.14 FMRX、FMXP和FMSTAT 574

E.7.15 FMUL和FNMUL 575

E.7.16 FSITO和FUITO 575

E.7.17 FSQRT 576

E.7.18 FTOSI和FTOUI 577

E.8 浮点操作伪指令(pseudo—instruction) 577

E.9 浮点运算伪操作和向量记号 578

E.9.1 VFPASSERT SCALAR 578

E.9.2 VFPASSERT VECTOR 579

E.10 浮点运算指令一览表 580

参考文献 582

相关图书
作者其它书籍
返回顶部