图书介绍
ARM Cortex M0权威指南PDF|Epub|txt|kindle电子书版本下载
- (英)JosephYiu著;吴常玉,魏军译 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302330042
- 出版时间:2013
- 标注页数:434页
- 文件大小:687MB
- 文件页数:454页
- 主题词:微控制器-指南
PDF下载
下载说明
ARM Cortex M0权威指南PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 绪论1
1.1 为什么要选择Cortex-M01
1.1.1 能耗效率1
1.1.2 代码密度1
1.1.3 易于使用2
1.2 Cortex-M0处理器的应用2
1.3 ARM和ARM处理器的背景3
1.4 Cortex-M0处理器说明和ARM体系结构5
1.5 ARM处理器和ARM生态系统8
1.6 开始使用Cortex-M0处理器9
1.7 本书的结构和资源9
第2章 Cortex-M0技术综述10
2.1 Cortex-M0处理器简介10
2.2 ARM Cortex-M0处理器的特性11
2.2.1 系统特性11
2.2.2 应用特性12
2.2.3 调试特性12
2.2.4 其他特性13
2.3 Cortex-M0处理器的优势13
2.3.1 能耗效率13
2.3.2 8位和16位架构的局限性15
2.3.3 易于使用,软件可移植16
2.3.4 选择多样化16
2.4 低功耗应用16
2.4.1 门数量低17
2.4.2 高效率17
2.4.3 低功耗特性17
2.4.4 逻辑单元提升17
2.5 Cortex-M0的软件可移植性18
第3章 体系结构19
3.1 概述19
3.2 系统模型19
3.2.1 操作模式和状态19
3.2.2 寄存器和特殊寄存器20
3.2.3 R0-R1221
3.2.4 R13,栈指针(SP)21
3.2.5 R14,链接寄存器(LR)21
3.2.6 R15,程序计数器(PC)21
3.2.7 xPSR,组合程序状态寄存器22
3.2.8 应用程序状态寄存器(APSR)的行为23
3.2.9 PRIMASK:中断屏蔽特殊寄存器24
3.2.1 0 CONTROL:特殊寄存器24
3.3 存储器系统25
3.4 栈空间操作26
3.5 异常和中断27
3.6 嵌套向量中断控制器(NVIC)28
3.6.1 灵活的中断管理28
3.6.2 支持嵌套中断29
3.6.3 向量化的异常入口29
3.6.4 中断屏蔽29
3.7 系统控制块(SCB)29
调试系统29
3.8 程序映像和启动流程30
第4章 Cortex-M0编程入门33
4.1 嵌入式系统编程入门33
4.1.1 微控制器是如何启动的33
4.1.2 嵌入式程序设计34
4.2 输入和输出37
4.3 开发流程38
4.4 C编程和汇编编程41
4.5 什么是程序映像42
4.5.1 向量表42
4.5.2 C启动代码44
4.5.3 程序代码44
4.5.4 C库代码45
4.5.5 RAM中的数据45
4.6 C编程:数据类型46
4.7 用C语言操作外设47
4.8 Cortex微控制器软件接口标准(CMSIS)51
4.8.1 CMSIS介绍51
4.8.2 CMSIS中有什么是标准化的52
4.8.3 CMSIS的组织结构52
4.8.4 使用CMSIS53
4.9 CMSIS的优势55
第5章 指令集57
5.1 ARM和Thumb指令集的背景57
5.2 汇编基础59
5.2.1 汇编语法一览59
5.2.2 后缀的使用61
5.2.3 Thumb代码和统一汇编语言(UAL)62
5.2.4 指令列表62
5.2.5 处理器内移动数据63
5.2.6 存储器访问65
5.2.7 栈空间访问68
5.2.8 算术运算69
5.2.9 逻辑运算73
5.2.10 移位和循环操作74
5.2.11 展开和顺序反转操作76
5.2.12 程序流控制78
5.2.13 存储器屏障指令80
5.2.14 异常相关指令81
5.2.15 休眠模式特性相关指令82
5.2.16 其他指令83
5.3 伪指令84
第6章 指令集使用实例85
6.1 概述85
6.2 程序控制85
6.2.1 If-Else85
6.2.2 循环86
6.2.3 进一步了解跳转指令86
6.2.4 跳转条件的典型用法87
6.2.5 函数调用和函数返回88
6.2.6 跳转表89
6.3 数据访问90
6.3.1 简单数据访问90
6.3.2 使用存储器访问指令的例子91
6.4 数据类型转换93
6.4.1 数据大小的转换93
6.4.2 大小端转换94
6.5 数据处理94
6.5.1 64位/128位加法94
6.5.2 64位/128位减法95
6.5.3 整数除法95
6.5.4 无符号整数开方根97
6.5.5 位和位域运算98
第7章 存储器系统100
7.1 概述100
7.2 存储器映射101
7.3 程序存储器,Boot Loader和存储器重映射104
7.4 数据存储器105
7.5 支持小端和大端106
7.5.1 数据类型107
7.5.2 硬件行为对编程的影响108
7.5.3 数据对齐108
7.5.4 访问非法地址109
7.5.5 多寄存器加载和存储指令的使用109
7.6 存储器属性110
第8章 异常和中断112
8.1 什么是异常和中断112
8.2 Cortex-M0处理器的异常类型112
8.2.1 不可屏蔽中断(NMI)113
8.2.2 硬件错误113
8.2.3 SVC(请求管理调用)113
8.2.4 PendSV(可挂起的系统调用)113
8.2.5 系统节拍114
8.2.6 中断114
8.3 异常优先级定义114
8.4 向量表116
8.5 异常流程概述117
8.5.1 接受异常请求117
8.5.2 压栈和出栈117
8.5.3 异常返回指令118
8.5.4 末尾连锁118
8.5.5 延迟到达119
8.6 EXC_RETURN119
8.7 异常入口流程的细节121
8.7.1 压栈121
8.7.2 取出向量并更新PC123
8.7.3 寄存器更新123
8.8 异常退出流程的细节123
8.8.1 寄存器出栈123
8.8.2 从返回地址取值并执行123
第9章 中断控制和系统控制125
9.1 NVIC和系统控制块特性125
9.2 中断使能和清除使能125
9.3 中断挂起和清除挂起127
9.4 中断优先级128
9.5 中断控制的通用汇编代码130
9.5.1 使能和禁止中断130
9.5.2 设置和清除中断挂起状态131
9.5.3 设置中断优先级132
9.6 异常屏蔽寄存器(PRIMASK)133
9.7 中断输入和挂起行为134
简单的中断处理134
9.8 中断等待137
9.9 系统异常的控制寄存器138
9.10 系统控制寄存器140
9.10.1 CPU ID基址寄存器140
9.10.2 应用中断和复位控制寄存器140
9.10.3 配置和控制寄存器142
第10章 支持操作系统的特性143
10.1 支持操作系统的特性概述143
为什么要使用嵌入式操作系统143
10.2 SysTick定时器145
10.3 SysTick寄存器145
10.3.1 设置SysTick147
10.3.2 SysTick用于时间测量148
10.4 进程栈和进程栈指针148
10.5 SVC152
10.6 PendSV153
第11章 低功耗特性155
11.1 低功耗嵌入式系统概述155
11.2 Cortex-M0处理器的低功耗优势156
11.3 低功耗特性概述157
11.4 休眠模式158
11.5 等待事件(WFE)和等待中断(WFI)160
11.5.1 等待事件(WFE)160
11.5.2 等待中断(WFI)161
11.5.3 唤醒条件162
11.6 退出休眠特性164
11.7 唤醒中断控制器165
第12章 错误处理167
12.1 错误异常概述167
错误是怎么发生的167
12.2 分析错误168
12.3 意外切换至ARM状态169
12.4 实际应用中的错误处理170
12.5 锁定172
12.5.1 锁定的原因172
12.5.2 锁定期间发生了什么173
12.6 防止锁定173
第13章 调试特性175
13.1 软件开发和调试特性175
13.2 调试特性一览176
13.3 调试接口176
13.4 暂停模式和调试事件179
13.5 调试系统180
第14章 Keil MDK入门182
14.1 Keil MDK介绍182
14.2 使用Keil MDK的第一步183
14.2.1 创建Blinky工程183
14.2.2 创建工程代码185
14.2.3 工程设置190
14.2.4 编译和建立程序194
14.2.5 使用调试器195
14.3 其他的工程配置197
14.3.1 目标,源文件组197
14.3.2 编译器和代码生成选项198
14.3.3 模拟器199
14.3.4 在RAM中运行201
14.4 定制Keil中的启动代码204
14.5 使用Keil中的分散加载特性204
第15章 简单应用程序开发206
15.1 使用CMSIS206
15.2 将SysTick用作单发定时器209
15.3 UART示例211
15.3.1 简单的输入和输出211
15.3.2 重定向214
15.3.3 开发自己的输入和输出函数219
15.4 简单中断编程222
15.4.1 中断编程概述222
15.4.2 度盘控制接口实例223
15.4.3 中断控制函数229
15.5 CMSIS的不同版本231
第16章 汇编工程和C与汇编混合工程233
16.1 用汇编开发工程233
16.2 汇编编程的建议规则233
16.3 汇编函数的结构235
16.4 简单的汇编工程实例236
16.5 为变量分配数据空间244
16.6 用汇编实现UART246
16.7 其他的文字输出函数247
复杂的跳转处理249
16.8 混合语言工程249
16.8.1 在汇编中调用C函数250
16.8.2 在C代码中调用汇编函数250
16.9 嵌入汇编251
16.10 使用特殊指令252
16.11 习语识别253
第17章 在编程中使用低功耗特性255
17.1 概述255
17.2 Cortex-M0处理器的休眠模式回顾255
17.3 在程序中使用WFE和WFI256
17.4 使用挂起发送事件特性257
17.5 使用退出休眠特性258
17.6 唤醒中断控制器(WIC)特性259
17.7 事件通信接口260
17.8 开发低功耗应用程序262
17.9 LPC111x的低功耗特性使用示例263
第18章 使用SVC、PendSV和Keil RTX Kernel272
18.1 概述272
18.2 使用SVC异常272
18.3 使用PendSV异常276
18.4 使用嵌入式OS278
18.5 Keil RTX实时内核278
18.6 OS启动流程280
18.6.1 简单的OS实例281
18.6.2 任务间通信284
18.6.3 事件通信285
18.6.4 互斥体287
18.6.5 信号量288
18.6.6 信箱消息289
18.6.7 周期时间间隔292
18.6.8 其他的RTX特性294
18.6.9 应用程序实例294
第19章 ARM RealView开发组件入门299
19.1 概述299
19.2 简单的应用程序实例300
19.3 使用分散加载文件303
19.4 用C实现的含有向量表的实例304
19.5 在RVDS中使用MicroLIB308
19.6 在RVDS中使用汇编进行应用程序开发309
19.7 Flash编程311
19.8 使用RealView调试器进行调试312
19.9 使用RealView调试器的串行线调试317
19.10 RVDS中的重定向319
第20章 GNU C编译器入门321
20.1 概述321
20.2 典型的开发流程322
20.3 简单的C程序开发323
20.4 CodeSourcery通用启动代码326
20.5 使用用户定义的向量表327
20.6 在gcc中使用Printf331
20.7 内联汇编332
20.8 gcc中的SVC实例333
20.9 硬件错误异常实例336
20.10 Flash编程和调试339
第21章 软件移植340
21.1 概述340
21.2 ARM处理器340
21.3 ARM7TDMI和Cortex-M0之间的差异341
21.3.1 操作模式341
21.3.2 寄存器341
21.3.3 指令集343
21.3.4 中断343
21.4 从ARM7TDMI向Cortex-M0移植软件343
21.4.1 启动代码和向量表343
21.4.2 中断344
21.4.3 C程序代码344
21.4.4 汇编代码345
21.4.5 原子操作345
21.4.6 优化345
21.5 Cortex-M1和Cortex-M0之间的差异346
21.5.1 指令集346
21.5.2 NVIC346
21.5.3 系统级特性346
21.6 在Cortex-M0和Cortex-M1之间移植软件346
21.7 Cortex-M3和Cortex-M0之间的差异347
21.7.1 系统模型347
21.7.2 NVIC和异常347
21.7.3 指令集349
21.7.4 系统级特性349
21.7.5 调试特性350
21.8 在Cortex-M0和Cortex-M3之间移植软件350
21.9 在Cortex-M0和Cortex-M4处理器之间移植软件351
21.10 从8位机/16位机往Cortex-M0移植程序353
21.10.1 通用改动353
21.10.2 存储器需求354
21.10.3 8位机和16位机不再适用的优化355
21.10.4 实例:从8051移植到ARM Cortex-M0355
第22章 Cortex-M0产品358
22.1 概述358
22.2 微控制器产品和专用标准产品(ASSP)358
22.2.1 NXP Cortex-M0微控制器358
22.2.2 NuMicro微控制器359
22.2.3 Mocha-1 ARM Cortex-M0可配置阵列360
22.2.4 Melfas MCS-7000系列触摸屏控制器361
22.3 编译器和软件开发组件361
22.3.1 Keil微控制器开发套件(MDK)361
22.3.2 TASKING VX-Toolset for ARM362
22.3.3 IAR Embedded Workbench for ARM362
22.3.4 CrossWorksforARM362
22.3.5 Red Suite362
22.3.6 LabVIEW C代码生成器363
22.4 开发板365
22.4.1 LPCXpresso365
22.4.2 IAR的LPC1114入门套件365
22.4.3 LPC1114 Cortex-M0模块365
22.4.4 Keil Cortex-M0开发板366
附录A Cortex-M0指令集367
附录B Cortex-M0异常类型快速参考371
B.1 异常类型371
B.2 异常压栈后的栈内容371
附录C 软件接口标准(CMSIS)快速参考373
C.1 数据类型373
C.2 异常枚举373
C.3 NVIC操作函数374
C.4 系统和SysTick操作函数376
C.5 内核寄存器操作函数376
C.6 特殊指令操作函数377
附录D NVIC、SCB以及SysTick寄存器快速参考378
D.1 NVIC寄存器一览378
D.2 中断设置使能寄存器(NVIC—>ISER)378
D.3 中断清除使能寄存器(NVIC—>ICER)378
D.4 中断设置挂起寄存器(NVIC—>ISPR)379
D.5 中断清除挂起寄存器(NVIC—>ICPR)379
D.6 中断优先级寄存器(NVIC—>IRP[0]到NVIC—>IRP[7])379
D.7 SCB寄存器一览380
D.8 CPU ID基地址寄存器(SCB—>CPUID)380
D.9 中断控制状态寄存器(SCB—>ICSR)381
D.10 应用中断和控制状态寄存器(SCB—>AIRCR)381
D.11 系统控制寄存器(SCB—>SCR)382
D.12 配置控制寄存器(SCB—>CCR)382
D.13 系统处理优先级寄存器2(SCB—>SHR[0])383
D.14 系统处理优先级寄存器3(SCB—>SHR[1])383
D.15 系统处理控制和状态寄存器383
D.16 SysTick寄存器一览383
D.17 SysTick控制和状态寄存器(SysTick—>CTRL)384
D.18 SysTick重装载值寄存器(SysTick—>LOAD)384
D.19 SysTick当前值寄存器(SysTick—>VAL)384
D.20 SysTick校准值寄存器(SysTick—>CALIB)385
附录E 调试寄存器快速参考386
E.1 概述386
E.2 内核调试寄存器386
E.3 断点单元388
E.4 数据监视点单元389
E.5 ROM表寄存器391
附录F 调试接头分配394
F.1 10针Cortex调试连接头394
F.2 20针Cortex调试+ETM接头394
F.3 老式的20针IDC接头排列395
附录G CodeSourcery G++Lite的链接器脚本396
附录H 实例代码文件401
H.1 system_LPC11xx.c401
H.2 system_LPC11xx.h411
H.3 LPC11xx.hs412
H.4 uart_test.s418
H.5 RTX_config.c423
附录I 疑难解答428
I.1 程序不运行/启动428
I.1.1 向量表丢失或位置错误428
I.1.2 使用了错误的C启动代码428
I.1.3 复位向量中的值错误428
I.1.4 程序映像没有正确地编程到Flash中428
I.1.5 错误的工具链配置429
I.1.6 错误的栈指针初始值429
I.1.7 错误的大小端设置429
I.2 程序启动,却进入了硬件错误429
I.2.1 非法存储器访问429
I.2.2 非对齐数据访问429
I.2.3 从总线返回错误429
I.2.4 异常处理中的栈被破坏429
I.2.5 程序在某些C函数中崩溃430
I.2.6 意外地试图切换至ARM状态430
I.2.7 在错误的优先级上执行SVC430
I.3 休眠问题430
I.3.1 执行WFE不进入休眠430
I.3.2 退出休眠过早地引起休眠430
I.3.3 中断已经在挂起态时SEVONPEND不工作430
I.3.4 由于休眠模式可能禁止了某些时钟,处理器无法唤醒431
I.3.5 竞态431
I.4 中断问题432
I.4.1 执行了多余的中断处理432
I.4.2 执行了额外的SysTick处理432
I.4.3 在中断处理中禁止中断432
I.4.4 错误的中断返回指令432
I.4.5 异常优先级设置的数值432
I.5 其他问题433
I.5.1 错误的SVC参数传递方法433
I.5.2 调试连接受到I/O设置或低功耗模式的影响433
I.5.3 调试协议选择433
I.5.4 使用事件输出作为脉冲I/O433
附录J 实用参考文档434