主页 详情

《ARM Cortex-M0与Cortex-M0+权威指南 第2版》_Jsoseph Yiu著;吴常玉,张淑,吴卫东译_14444032_9787302473

【书名】:《ARM Cortex-M0与Cortex-M0+权威指南 第2版》
【作者】:Jsoseph Yiu著;吴常玉,张淑,吴卫东译
【出版社】:北京:清华大学出版社
【时间】:2018
【页数】:608
【ISBN】:9787302473312
【SS码】:14444032

最新查询

内容简介

第1章 概论

1.1 欢迎来到嵌入式处理器的世界

1.1.1 处理器有什么作用

1.1.2 处理器、CPU、内核、微控制器及其命名

1.1.3 嵌入式系统的编程

1.1.4 学习微控制器需要了解什么

1.2 理解处理器的类型

1.2.1 处理器为什么有很多种类

1.2.2 ARM处理器家族概述

1.2.3 模糊边界

1.2.4 ARM Cortex-M处理器系列

1.2.5 ARM Cortex-M0和Cortex-M0+处理器简介

1.2.6 从Cortex-M0处理器到Cortex-M0+处理器

1.2.7 Cortex-M0和Cortex-M0+处理器的应用

1.3 微控制器内部有什么

1.3.1 微控制器内常见部件

1.3.2 微控制器应用的处理器的特点

1.3.3 硅片技术

1.4 ARM介绍

1.4.1 ARM生产芯片吗

1.4.2 ARM的产品是什么

1.4.3 芯片厂商为什么不设计自己的处理器

1.4.4 ARM生态系统有什么特殊之处

1.5 ARM处理器和ARM微控制器方面的资源

1.5.1 ARM主页

1.5.2 微控制器厂商提供的资源

1.5.3 工具厂商提供的资源

1.5.4 其他资源

第2章 技术综述

2.1 Cortex-M0和Cortex-M0+处理器

2.2 模块框图

2.3 典型系统

2.4 什么是ARMv6-M架构

2.5 Cortex-M处理器间的软件可移植性

2.6 ARM Cortex-M0和Cortex-M0+处理器的优势

2.6.1 低功耗和能耗效率

2.6.2 高代码密度

2.6.3 低中断等待和确定行为

2.6.4 易于使用

2.6.5 系统级特性和OS支持特性

2.6.6 调试特性

2.6.7 可配置性、灵活性和可扩展性

2.6.8 软件可移植性和可重用性

2.6.9 产品选择的多样性

2.6.10 生态系统支持

2.7 Cortex-M0和Cortex-M0+处理器的应用

2.7.1 微控制器

2.7.2 传感器

2.7.3 传感器集线器

2.7.4 电源管理IC

2.7.5 ASSP和ASIC

2.7.6 片上系统中的子系统

2.8 为什么要在微控制器应用中使用32位处理器

2.8.1 性能

2.8.2 代码密度

2.8.3 ARM架构的其他优势

2.8.4 软件可重用性

第3章 嵌入式软件开发介绍

3.1 欢迎进入嵌入式系统编程

3.2 基本概念

3.2.1 复位

3.2.2 时钟

3.2.3 电压

3.2.4 输入和输出

3.2.5 嵌入式软件程序流程介绍

3.2.6 编程语言选择

3.3 ARM Cortex-M编程介绍

3.3.1 C编程数据类型

3.3.2 用C访问外设

3.3.3 程序映像内有什么

3.3.4 SRAM中的数据

3.3.5 微控制器启动时会发生什么

3.4 软件开发流程

3.5 Cortex微控制器软件接口标准

3.5.1 CMSIS介绍

3.5.2 CMSIS-CORE所做的标准化

3.5.3 CMSIS-CORE的组织

3.5.4 使用CMSIS-CORE

3.5.5 CMSIS的优势

3.6 软件开发的其他信息

第4章 架构

4.1 ARMv6-M架构综述

4.1.1 架构的含义

4.1.2 ARMv6-M架构背景

4.2 编程模型

4.2.1 操作模式和状态

4.2.2 寄存器和特殊寄存器

4.2.3 APSR的行为

4.3 存储器系统

4.3.1 概述

4.3.2 单周期I/O接口

4.3.3 存储器保护单元

4.4 栈存储操作

4.5 异常和中断

4.6 嵌套向量中断控制器

4.6.1 灵活的中断管理

4.6.2 嵌套中断支持

4.6.3 向量异常入口

4.6.4 中断屏蔽

4.7 系统控制块

4.8 调试系统

4.9 程序映像和启动流程

第5章 指令集

5.1 指令集是什么

5.2 ARM和Thumb指令集背景

5.3 汇编基础

5.3.1 汇编语法一览

5.3.2 后缀的使用

5.3.3 统一汇编语言(UAL)

5.4 指令列表

5.4.1 处理器内传送数据

5.4.2 存储器访问

5.4.3 栈存储访问

5.4.4 算术运算

5.4.5 逻辑运算

5.4.6 移位和循环移位运算

5.4.7 展开和顺序反转运算

5.4.8 程序流控制

5.4.9 存储器屏障指令

5.4.10 异常相关指令

5.4.11 休眠模式特性相关指令

5.4.12 其他指令

5.5 伪指令

第6章 指令使用示例

6.1 概述

6.2 程序控制

6.2.1 if-then-else

6.2.2 循环

6.2.3 跳转指令

6.2.4 跳转指令的典型用法

6.2.5 函数调用和函数返回

6.2.6 跳转表

6.3 数据访问

6.3.1 简单数据访问

6.3.2 使用存储器访问指令的例子

6.4 数据类型转换

6.4.1 数据大小的转换

6.4.2 大小端转换

6.5 数据处理

6.5.1 64位/128位加法

6.5.2 64位/128位减法

6.5.3 整数除法

6.5.4 无符号整数开方根

6.5.5 位和位域计算

第7章 存储器系统

7.1 微控制器中的存储器系统

7.2 Cortex-M0和Cortex-M0+处理器中的总线系统

7.3 存储器映射

7.3.1 概述

7.3.2 系统级设计

7.4 程序存储器、Bootloader和存储器重映射

7.4.1 程序存储器和Bootloader

7.4.2 存储器映射

7.5 数据存储器

7.6 小端和大端支持

7.7 数据类型

7.8 存储器属性和存储器访问权限

7.9 硬件行为对编程的影响

7.9.1 数据对齐

7.9.2 访问非法地址

7.9.3 多加载和存储指令的使用

7.9.4 等待状态

第8章 异常和中断

8.1 异常和中断的含义

8.2 Cortex-M0和Cortex-M0+处理器内的异常类型

8.2.1 概述

8.2.2 不可屏蔽中断

8.2.3 HardFault

8.2.4 SVC

8.2.5 可挂起的系统调用

8.2.6 系统节拍

8.2.7 中断

8.3 NVIC简介

8.4 异常优先级定义

8.5 向量表

8.6 异常流程概述

8.6.1 接受异常

8.6.2 压栈和出栈

8.6.3 异常返回指令

8.6.4 末尾连锁

8.6.5 延迟到达

8.7 EXC RETURN

8.8 用于中断控制的NVIC控制寄存器

8.8.1 NVIC控制寄存器概述

8.8.2 中断使能和清除使能

8.8.3 中断挂起和清除挂起

8.8.4 中断优先级

8.9 异常屏蔽寄存器(PRIMASK)

8.10 中断输入和挂起行为

8.10.1 简单中断处理

8.10.2 简单的脉冲中断处理

8.10.3 中断挂起状态在得到服务前取消

8.10.4 外设在确认中断请求时清除挂起状态

8.10.5 ISR完成后中断请求保持为高

8.10.6 进入ISR前产生了多个中断请求脉冲

8.10.7 在ISR执行期间产生了中断请求脉冲

8.10.8 已禁止中断的中断请求确认

8.11 异常入口流程

8.11.1 压栈

8.11.2 取出向量并更新PC

8.11.3 更新寄存器

8.12 异常退出流程

8.12.1 寄存器出栈

8.12.2 从返回地址取指并执行

8.13 中断等待

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

9.1 系统控制寄存器简介

9.2 SCB中的寄存器

9.2.1 SCB中的寄存器列表

9.2.2 CPU ID寄存器

9.2.3 用于系统异常管理的控制寄存器

9.2.4 向量表偏移寄存器

9.2.5 应用中断和复位控制寄存器

9.2.6 系统控制寄存器

9.2.7 配置和控制寄存器

9.2.8 系统处理控制和状态寄存器

9.3 使用自复位特性

9.4 使用向量表重定位特性

9.5 低功耗特性

9.5.1 概述

9.5.2 休眠模式

9.5.3 等待事件和等待中断

9.5.4 唤醒条件

9.5.5 退出时休眠特性

9.5.6 唤醒中断控制器

第10章 操作系统支持特性

10.1 支持OS的特性概述

10.2 嵌入式系统的操作系统介绍

10.3 SysTick定时器

10.3.1 SysTick寄存器

10.3.2 设置SysTick

10.3.3 SysTick用于时间测量

10.3.4 将SysTick用作单发定时器

10.4 进程栈和 PSP

10.5 SVCall异常

10.6 PendSV

10.7 高级话题:在编程中使用SVC和PendSV

10.7.1 使用SVC异常

10.7.2 使用PendSV异常

10.8 高级话题:实际的上下文切换

第11章 错误处理

11.1 错误异常概述

11.2 错误是如何产生的

11.3 分析错误

11.4 意外切换至ARM状态

11.5 实际应用中的错误处理

11.6 软件开发期间的错误处理

11.7 锁定

11.7.1 锁定的原因

11.7.2 锁定期间发生了什么

11.8 避免锁定

11.9 和ARMv7-M架构中错误处理的对比

第12章 存储器保护单元

12.1 MPU是什么

12.2 MPU适用的情形

12.3 技术介绍

12.4 MPU寄存器

12.4.1 MPU类型寄存器

12.4.2 MPU控制寄存器

12.4.3 MPU区域编号寄存器

12.4.4 MPU区域基地址寄存器

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

12.5 设置MPU

12.6 存储器屏障和MPU配置

12.7 使用子区域禁止

12.7.1 允许高效的存储器划分

12.7.2 减少所需的区域总数

12.8 使用MPU时的注意事项

12.8.1 程序代码

12.8.2 数据存储器

12.9 和Cortex-M3/M4/M7处理器的MPU间的差异

第13章 调试特性

13.1 软件开发和调试特性

13.2 调试接口

13.2.1 JTAG和串行线调试通信协议

13.2.2 Cortex-M处理器和CoreSight调试架构

13.2.3 调试接口的设计考虑

13.3 调试特性一览

13.4 调试系统

13.5 暂停模式和调试事件

13.6 利用MTB实现指令跟踪

第14章 Keil微控制器开发套件入门

14.1 Keil微控制器开发套件介绍

14.1.1 概述

14.1.2 工具

14.1.3 Keil MDK的优势

14.1.4 安装

14.2 典型的程序编译流程

14.3 硬件介绍

14.3.1 Freescale Freedom开发板(FRDM-KL25Z)

14.3.2 STMicroelectronics STM32L0 Discovery

14.3.3 STMicroelectronics STM32F0 Discovery

14.3.4 NXP LPC1114FN28

14.4 μVision IDE入门

14.4.1 如何开始

14.4.2 启动Keil MDK

14.4.3 Freescale FRDM-KL25Z工程设置步骤

14.4.4 ST Microelectronics STM32L0 Discovery工程设置步骤

14.4.5 STMicroelectronice STM32F0 Discovery工程设置步骤

14.4.6 NXP LPC1114FN28工程设置步骤

14.5 使用IDE和调试器

14.6 底层内容

14.6.1 CMSIS文件

14.6.2 时钟设置

14.6.3 栈和堆的设置

14.6.4 编译

14.7 工程环境的优化

14.7.1 目标选项

14.7.2 优化选项

14.7.3 运行时环境选项

14.7.4 工程管理

14.8 使用模拟器

14.9 在SRAM中执行程序

14.10 使用MTB指令跟踪

第15章 IAR embedded workbench for ARM入门

15.1 IAR embedded workbench for ARM概述

15.2 典型的程序编译流程

15.3 创建简单的blinky工程

15.4 工程选项

15.5 在IAR EWARM中使用MTB指令跟踪

15.6 提示和要点

第16章 GCC入门

16.1 GCC工具链

16.2 关于本章中的例子

16.3 典型开发流程

16.4 创建简单的Blinky工程

16.5 命令行选项概述

16.6 Flash编程

16.7 在Keil MDK-ARM中使用ARM嵌入式处理器GNU工具

16.8 在CooCox IDE中使用ARM嵌入式处理器GNU工具

16.8.1 概述和设置

16.8.2 创建新的工程

16.8.3 使用IDE和调试器

第17章 mbed入门

17.1 什么是mbed

17.2 mbed系统是怎么工作的

17.3 mbed的优势

17.4 设置FRDM-KL25Z板和mbed账号

17.4.1 检查mbed Web网页

17.4.2 注册mbed账号

17.4.3 个入计算机的设置

17.5 创建blinky程序

17.5.1 只开关红色LED的简单版本

17.5.2 利用脉宽调试控制LED

17.6 支持的常用外设对象

17.7 使用printf

17.8 应用实例:火车模型控制器

17.9 中断

17.10 要点和提示

第18章 编程实例

18.1 利用通用异步收发器来产生输出

18.1.1 通用异步收发器通信概述

18.1.2 微控制器上的UART配置概述

18.1.3 配置FRDM-KL25Z中的UART

18.1.4 配置STM32L0 Discovery板中的UART

18.1.5 配置STM32F0 Discovery板上的UART

18.1.6 配置LPC1114FN28上的UART

18.2 实现printf

18.2.1 概述

18.2.2 Keil MDK的重定向

18.2.3 IAR EWARM的重定向

18.2.4 GNU编译器套件的重定向

18.2.5 IAR EWARM的半主机

18.2.6 CoIDE的半主机

18.3 开发输入和输出函数

18.3.1 为何要重新开发

18.3.2 其他接口

18.3.3 有关scanf的其他信息

18.4 中断编程实例

18.4.1 中断处理概述

18.4.2 中断控制函数概述

18.5 应用实例:火车模型用的另一个控制器

18.6 CMSIS-CORE的不同版本

第19章 超低功耗设计

19.1 超低功耗使用示例

19.1.1 概述

19.1.2 进入休眠模式

19.1.3 WFE与WFI

19.1.4 利用退出时休眠特性

19.1.5 利用挂起发送事件特性

19.1.6 利用唤醒中断控制器

19.1.7 利用事件通信接口

19.2 低功耗设计要求

19.3 能量去哪里了

19.4 开发低功耗应用

19.4.1 低功耗设计概述

19.4.2 降低功耗的各种方法

19.4.3 选择正确的方法

19.5 调试考虑

19.5.1 调试和低功耗

19.5.2 调试和Flash编程的“安全模式”

19.5.3 低电压引脚和调试接口

19.6 低电压设备的检测

19.6.1 ULPBench的背景

19.6.2 ULPBench-CP概述

19.7 Freescale KL25Z低功耗特性使用示例

19.7.1 目标

19.7.2 测试设置

19.7.3 KL25Z的低功耗模式

19.7.4 时钟设计

19.7.5 测试设置

19.7.6 测量结果

19.8 LPC1114低功耗特性使用示例

19.8.1 LPC1114FN28概述

19.8.2 实验1:使用12MHz内部和外部晶振

19.8.3 实验2:使用降频1MHz和100kHz

19.8.4 其他改进

19.8.5 利用LPC1114的深度休眠

第20章 嵌入式OS编程

20.1 介绍

20.1.1 背景

20.1.2 嵌入式OS和RTOS

20.1.3 为什么要使用嵌入式OS

20.1.4 CMSIS-RTOS的作用

20.1.5 关于Keil RTX Kernel

20.1.6 在Keil MDK中构建一个简单RTX实例

20.2 RTX Kernel概述

20.2.1 线程

20.2.2 RTX配置

20.2.3 深入研究第一个例子

20.2.4 线程间通信概述

20.2.5 信号事件通信

20.2.6 互斥体(Mutex)

20.2.7 信号量

20.2.8 消息队列

20.2.9 邮件队列

20.2.10 内存池管理特性

20.2.11 通用等待函数和超时数值

20.2.12 定时器特性

20.2.13 给非特权线程增加SVC服务

20.3 在应用中使用RTX

20.4 调试RTX应用

20.5 疑难解答

20.5.1 栈大小需求

20.5.2 优先级

20.5.3 利用OS错误报告

20.5.4 OS特性配置

20.5.5 其他问题

20.6 其他要点和提示

20.6.1 修改RTX_Config_CM.c

20.6.2 线程优先级

20.6.3 缩短等待时间

20.6.4 其他信息

第21章 混合语言工程

21.1 汇编在工程开发中的应用

21.2 汇编编程实践和AAPCS

21.3 汇编函数概述

21.3.1 ARM工具链

21.3.2 GCC工具链

21.3.3 IAR Embedded Workbench for ARM

21.3.4 汇编函数结构

21.4 内联汇编

21.4.1 ARM工具链

21.4.2 GNU编译器组件

21.5 嵌入汇编特性(ARM工具链)

21.6 混合语言工程

21.6.1 概述

21.6.2 在汇编代码中调用C函数

21.6.3 在C代码中调用汇编函数

21.7 在Keil MDK-ARM中创建汇编工程

21.7.1 一个简单的工程

21.7.2 Hello World

21.7.3 其他文本输出函数

21.8 用于中断控制的通用汇编代码

21.8.1 使能和禁止中断

21.8.2 设置和清除中断挂起状态

21.8.3 设置中断优先级

21.9 汇编语言的其他编程技巧

21.9.1 为变量分配数据空间

21.9.2 复杂跳转处理

21.10 使用特殊指令

21.10.1 CMSIS-CORE

21.10.2 习语识别

第22章 软件移植

22.1 概述

22.2 从8位/16位微控制器向ARM Cortex-M移植软件

22.2.1 通用改动

22.2.2 存储器需求

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

22.2.4 实例:从8051移植到ARM Cortex-M0/Cortex-M0+

22.3 ARM7TDMI和Cortex-M0/M0+处理器间的差异

22.3.1 经典ARM处理器概述

22.3.2 操作模式

22.3.3 寄存器

22.3.4 指令集

22.3.5 中断

22.4 从ARM7TDMI向Cortex-M0/Cortex-M0+处理器移植软件

22.4.1 启动代码和向量表

22.4.2 中断

22.4.3 C程序代码

22.4.4 汇编代码

22.4.5 原子访问

22.4.6 优化

22.5 各种Cortex-M处理器间的差异

22.5.1 概述

22.5.2 系统模型

22.5.3 NVIC和异常

22.5.4 指令集

22.5.5 系统级特性

22.5.6 调试和跟踪特性

22.6 在Cortex-M处理器间移植时的通用改动

22.7 Cortex-M0/M0+和Cortex-M1间的软件移植

22.8 Cortex-M0/M0+和Cortex-M3间的软件移植

22.9 Cortex-M0/M0+和Cortex-M4/M7间的软件移植

第23章 高级话题

23.1 C语言实现的位数据处理

23.2 C实现的启动代码

23.3 栈溢出检测

23.3.1 什么是栈溢出

23.3.2 工具链的栈分析

23.3.3 栈的测试分析

23.3.4 利用存储器保护单元对栈进行限制

23.3.5 OS上下文切换期间的栈检测

23.4 中断服务程序重入

23.5 信号量设计

23.6 存储器顺序和存储器屏障

附录A 指令集快速参考

附录B 异常类型快速参考

B.1 异常类型

B.2 异常压栈后栈的内容

附录C CMSIS-CORE快速参考

C.1 数据类型

C.2 异常枚举

C.3 嵌套向量中断控制器访问函数

C.4 系统和SysTick操作函数

C.5 内核寄存器操作函数

C.6 特殊指令操作函数

附录D NVIC、SCB和SysTick寄存器快速参考

D.1 NVIC寄存器一览

D.2 中断设置使能寄存器(NVIC->ISER)

D.3 中断清除使能寄存器(NVIC->ICER)

D.4 中断设置挂起寄存器(NVIC->ISPR)

D.5 中断清除挂起寄存器(NVIC->ICPR)

D.6 中断优先级寄存器(NVIC->IRQ[0]到NVIC->IRQ[7])

D.7 SCB寄存器一览

D.8 CPU ID寄存器(SCB->CPUID)

D.9 中断控制状态寄存器(SCB->ICSR)

D.10 向量表偏移寄存器(SCB->VTOR,0xE000ED08)

D.11 应用中断和控制状态寄存器(SCB->AIRCR)

D.12 系统控制寄存器(SCB->SCR)

D.13 配置控制寄存器(SCB->CCR)

D.14 系统处理优先级寄存器2(SCB->SHR[0])

D.15 系统处理优先级寄存器3(SCB->SHR[1])

D.16 系统处理控制和状态寄存器

D.17 SysTick寄存器一览

D.18 SysTick控制和状态寄存器(SysTick->CTRL)

D.19 SysTick重装载值寄存器(SysTick->LOAD)

D.20 SysTick当前值寄存器(SysTick->VAL)

D.21 SysTick校准值寄存器(SysTick->CALIB)

附录E 调试寄存器快速参考

E.1 内核调试寄存器

E.2 断点单元

E.3 数据监视点单元

E.4 ROM表寄存器

E.5 微跟踪缓冲

E.6 POSITION寄存器

E.7 MASTER寄存器

E.8 FLOW寄存器

E.9 BASE寄存器

E.10 包格式

E.11 实例

附录F 调试接头分配

F.1 10针Cortex调试连接头

F.2 20针Cortex调试+ETM接头

F.3 老式的20针IDC接头排列

附录G 疑难解答

G.1 程序不运行/启动

G.1.1 向量表丢失或位置错误

G.1.2 使用了错误的C启动代码

G.1.3 复位向量中的值错误

G.1.4 程序映像没有被正确地编程到Flash中

G.1.5 错误的工具链配置

G.1.6 错误的栈指针初始值

G.1.7 错误的大小端设置

G.2 程序启动,却进入了硬件错误

G.2.1 非法存储器访问

G.2.2 非对齐数据访问

G.2.3 存储器访问权限(只限于Cortex-M0+处理器)

G.2.4 从总线返回错误

G.2.5 异常处理中的栈被破坏

G.2.6 程序在某些C函数中崩溃

G.2.7 意外地试图切换至ARM状态

G.2.8 在错误的优先级上执行SVC

G.3 休眠问题

G.3.1 执行WFE不进入休眠

G.3.2 退出时休眠过早地引起休眠

G.3.3 中断已经在挂起态时SEVONPEND不工作

G.3.4 由于休眠模式可能禁止了某些时钟,处理器无法唤醒

G.3.5 竞态

G.4 中断问题

G.4.1 执行了多余的中断处理

G.4.2 执行了多余的SysTick处理

G.4.3 在中断处理中禁止中断

G.4.4 错误的中断返回指令

G.4.5 异常优先级设置的数值

G.5 其他问题

G.5.1 错误的SVC参数传递方法

G.5.2 调试连接受到I/O设置或低功耗模式的影响

G.5.3 调试协议选择/配置

G.5.4 使用事件输出作为脉冲I/O

G.5.5 向量表和代码位置的设备实际需求

G.6 其他可能的编程陷阱

G.6.1 中断优先级

G.6.2 同时使用主栈和进程栈时的栈溢出

G.6.3 数据对齐

G.6.4 丢失volatile关键字

G.6.5 函数指针

G.6.6 读-修改-写

G.6.7 中断禁止

G.6.8 SystemInit函数

G.6.9 断点和内联

附录H ARM Cortex-M0微控制器面包板工程

H.1 背景

H.2 硬件设计

附录I 参考文档


书查询(www.shuchaxun.com)本网页唯一编码:
0129502d2f36ee8b0999b44bc32ecb23#bcc168fef5ba62c338f24b2f036b3efc#100588749#14444032.zip