第1章 可重构嵌入式系统设计导论 1
1.1 可重构嵌入式系统的背景和优势 1
1.1.1 传统的嵌入式系统构建方法 1
1.1.2 可重构嵌入式系统构建方法 2
1.1.3 PSoC性能比MCU更优越 4
1.2 可重构嵌入式系统的设计重用 5
1.3 PSoC4 BLE的结构及功能 6
1.4 PSoC4 BLE设计流程 9
1.4.1 硬件设计流程 9
1.4.2 软件设计流程 10
1.5 PSoC4 BLE的硬件连接 11
第2章 可重构嵌入式系统基本设计流程 13
2.1 软件的下载和安装 13
2.2 建立新的设计工程 16
2.3 在原理图中添加嵌入式硬件设计 18
2.3.1 在原理图中添加数字输出端口 18
2.3.2 在原理图中添加片外外设注解 19
2.3.3 对硬件设计进行处理 24
2.3.4 查看分配的引脚位置 25
2.4 为嵌入式硬件开发软件应用 26
2.5 下载设计到目标系统 27
第3章 Cortex-M0 CPU结构 28
3.1 ARM处理器类型 28
3.2 Cortex-M系列处理器概述 29
3.2.1 Cortex-M系列处理器的特点 29
3.2.2 Cortex-M系列处理器的性能参数 29
3.3 Cortex-M0处理器的性能和结构 30
3.3.1 Cortex-M0处理器的性能 30
3.3.2 Cortex-M0处理器的结构 31
3.4 Cortex-M0处理器的寄存器组 33
3.4.1 通用寄存器 33
3.4.2 堆栈指针 34
3.4.3 程序计数器 34
3.4.4 链接寄存器 34
3.4.5 组合程序状态寄存器 35
3.4.6 中断屏蔽特殊寄存器 36
3.4.7 特殊寄存器 36
3.5 Cortex-M0存储器空间映射 37
3.6 Cortex-M0程序镜像原理及生成方法 39
3.7 Cortex-M0处理器的端及分配 40
3.8 Cortex-M0处理器异常及处理 41
3.8.1 异常处理 41
3.8.2 异常优先级 41
3.8.3 向量表 42
3.8.4 异常类型 43
3.8.5 PSoC4中断源 44
3.8.6 PSoC4中断触发方式 45
3.8.7 固定功能模块和UDB的中断布线 46
第4章 Cortex-M0指令集 48
4.1 Thumb指令集 48
4.2 Cortex-M0汇编语言格式 49
4.3 寄存器访问指令:MOVE 50
4.4 存储器访问指令:LOAD 51
4.5 存储器访问指令:STORE 54
4.6 多数据访问指令:LDM和STM 55
4.7 堆栈访问指令:PUSH和POP 56
4.8 算术运算指令 57
4.8.1 加法指令 57
4.8.2 减法指令 59
4.8.3 乘法指令 60
4.8.4 比较指令 60
4.9 逻辑操作指令 61
4.10 移位操作指令 62
4.10.1 右移指令 62
4.10.2 左移指令 64
4.11 反序操作指令 65
4.12 扩展操作指令 66
4.13 程序流控制指令 67
4.14 存储器屏蔽指令 68
4.15 异常相关指令 69
4.16 休眠相关指令 69
4.17 其他指令 69
4.18 数据插入和对齐操作 70
第5章 AHB-Lite总线结构分析 71
5.1 总线及分类 71
5.1.1 总线的概念 71
5.1.2 总线的分类 71
5.2 ARM AMBA系统总线 72
5.3 AMBA3 AHB-Lite总线 73
5.3.1 AHB-Lite概述 73
5.3.2 AHB-Lite总线操作 73
5.4 AHB-Lite总线结构 74
5.4.1 全局信号 75
5.4.2 AHB-Lite主设备接口 75
5.4.3 AHB-Lite从设备接口 77
5.4.4 地址译码器和多路选择器 78
5.5 AHB-Lite总线时序 79
5.5.1 无等待基本读传输 80
5.5.2 有等待基本读传输 80
5.5.3 无等待基本写传输 81
5.5.4 有等待基本写传输 81
5.6 硬件实现 82
第6章 Cortex-M0低功耗特性 83
6.1 低功耗要求 83
6.2 Cortex-M0低功耗特性及优势 83
6.2.1 Cortex-M0低功耗特性概述 83
6.2.2 Cortex-M0低功耗结构 84
6.3 Cortex-M0休眠模式 84
6.4 唤醒中断控制器 86
6.5 降低功耗的其他方法 87
6.6 PSoC4 BLE低功耗特性 87
6.6.1 休眠模式 88
6.6.2 深度休眠模式 89
6.6.3 冬眠模式 90
6.6.4 停止模式 91
6.7 功耗降低技术 91
6.7.1 关闭未使用的组件 92
6.7.2 以较低速度运行组件 92
6.7.3 降低供电电压 92
6.7.4 使用PSoC器件控制电流路径 92
6.7.5 使用DMA传输数据 93
6.8 其他功耗模式中需要注意的事项 93
6.8.1 时钟 93
6.8.2 看门狗定时器 94
6.8.3 GPIO 95
6.8.4 深度休眠模式和冬眠模式下的电压调节器 96
6.8.5 调试接口 96
第7章 Cortex-M0汇编语言编程基础 97
7.1 Keil MDK开发套件 97
7.1.1 下载MDK开发套件 97
7.1.2 安装MDK开发套件 99
7.1.3 MDK程序处理流程 100
7.2 Cortex-M0汇编语言程序设计 102
7.2.1 建立新设计工程 102
7.2.2 修改编译器设置 102
7.2.3 添加汇编文件 103
7.2.4 汇编语言语法说明 106
7.2.5 添加C设计代码 111
7.3 设计的硬件调试和运行 111
7.4 汇编语言其他常用语法介绍 114
7.4.1 标识符的命名规则 114
7.4.2 变量 114
7.4.3 常数 115
7.4.4 EQU命令 116
7.4.5 IMPORT/EXTERN命令 116
7.4.6 子程序调用 117
7.4.7 宏定义和使用 117
第8章 中断系统的构建和实现 119
8.1 设计定时器中断系统 119
8.1.1 建立新的设计工程 119
8.1.2 构建定时器中断硬件系统 120
8.1.3 配置定时器中断组件 120
8.1.4 设置定时器中断优先级 121
8.1.5 使用自动生成的ISR 121
8.1.6 创建自定义的ISR 123
8.2 设计GPIO中断系统 125
8.2.1 建立新的设计工程 125
8.2.2 构建GPIO中断硬件系统 126
8.2.3 配置GPIO中断组件 126
8.2.4 添加引脚约束 128
8.2.5 编写GPIO的ISR 128
8.2.6 设计下载 129
8.3 有关中断的高级主题 129
8.3.1 异常事件 129
8.3.2 中断延迟 130
8.3.3 优化中断代码 131
8.3.4 带有内置中断的组件 131
8.3.5 强制中断向量编号 131
8.3.6 SysTick定时器 133
8.3.7 中断嵌套 134
第9章 C语言代码设计与优化方法 135
9.1 全局和本地变量 135
9.1.1 全局变量 135
9.1.2 局部变量 136
9.1.3 静态变量 136
9.2 编译器优化设置选项 137
9.3 属性——attribute 139
9.4 LDR和STR指令 139
9.5 函数参数和结果 141
9.6 C语言和汇编混合编程 142
9.6.1 内嵌汇编的语法 142
9.6.2 自动变量 144
9.6.3 全局和静态变量 144
9.6.4 函数参数 146
9.7 特殊功能指令 148
9.8 结构体的对齐处理 148
9.9 编译器库 149
9.9.1 使用标准的C语言库 150
9.9.2 使用MicroLIB库进行编译 151
9.9.3 不使用库进行编译 151
9.10 放置代码和变量 152
9.10.1 链接脚本文件 152
9.10.2 放置程序 156
9.10.3 一般性考虑 157
第10章 电容感应触摸控制模块原理及实现 159
10.1 CapSense基本原理 159
10.2 电容式触摸感应方法 161
10.3 CapSense部件 162
10.3.1 按键(零维) 162
10.3.2 滑条(一维) 163
10.3.3 触摸屏/触摸板(二维) 163
10.3.4 接近度传感器(三维) 164
10.4 屏蔽电极和保护传感器 165
10.5 PSoC4中的CSD模块 166
10.5.1 GPIO单元的电容-电流转换器 166
10.5.2 开关时钟发生器 168
10.5.3 电流-数字转换器 168
10.5.4 模拟多路器 169
10.5.5 屏蔽电极 169
10.5.6 CMOD的预充电 170
10.6 电容感应触摸的设计与实现 171
10.6.1 建立新的设计工程 171
10.6.2 在原理图中添加设计元件 171
10.6.3 配置元件参数 172
10.6.4 配置系统时钟 174
10.6.5 编写软件代码 175
10.6.6 配置引脚约束 177
第11章 低功耗蓝牙模块原理及实现 179
11.1 低功耗蓝牙子系统(BLESS) 179
11.1.1 BLESS特性 179
11.1.2 BLESS框架和构成 180
11.1.3 BLE状态 180
11.2 标准服务与自定义服务 181
11.3 健康温度计硬件系统的设计与实现 182
11.3.1 建立新的设计工程 182
11.3.2 添加并配置BLE组件 183
11.3.3 添加和配置数字引脚组件 187
11.3.4 添加中断组件 188
11.3.5 添加和配置温度测量元件 189
11.3.6 添加引脚约束 193
11.3.7 修改系统时钟频率 193
11.4 健康温度计软件的设计与实现 194
11.4.1 配置固件 194
11.4.2 系统初始化 196
11.4.3 BLE事件处理程序 197
11.4.4 系统的正常操作模式 199
11.4.5 系统的低功耗工作状态 199
11.4.6 传感器仿真 200
11.5 系统硬件配置 200
11.6 编程器件 200
11.7 更新编程器固件 201
11.8 使用CySmart中心仿真工具 201
11.9 CySmart手机应用 204
第12章 通用数字块原理及实现 206
12.1 通用数字块功能及特性 206
12.2 UDB内部功能块 207
12.2.1 PLD模块结构 208
12.2.2 PLD宏单元 209
12.3 数据通道模块 210
12.3.1 工作寄存器 210
12.3.2 动态数据通道配置RAM 211
12.4 状态和控制模块 212
12.5 基于UDB实现3位计数器设计 212
12.5.1 建立新的PSoC工程 213
12.5.2 添加自定义3位计数器IP核 213
12.5.3 调用自定义3位计数器元件 216
12.5.4 配置系统所用元件 217
12.5.5 连接设计中的所有元件 219
12.5.6 配置引脚 221
12.5.7 编程及调试 222
12.5.8 静态时序分析 222
第13章 模拟子系统原理及实现 224
13.1 模拟子系统框架及功能 224
13.1.1 模拟子系统框架 224
13.1.2 高精度参考 224
13.1.3 SARADC 225
13.1.4 低功耗比较器 226
13.1.5 微型连续时间模块 226
13.1.6 LCD直接驱动模块 226
13.1.7 温度传感器 228
13.2 同相模拟增益放大器的原理及实现 228
13.2.1 建立新的设计工程 228
13.2.2 在原理图中添加模拟组件 229
13.2.3 修改元件参数 230
13.2.4 连接系统中的所有元件 232
13.2.5 引脚分配 233
13.2.6 添加软件控制代码 235
13.2.7 设计下载与测试 235
第14章 FreeRTOS原理及应用 236
14.1 嵌入式和实时的概念 236
14.2 FreeRTOS架构概述 237
14.2.1 FreeRTOS的功能 237
14.2.2 硬件注意事项 237
14.3 任务调度概述 240
14.3.1 任务优先级和就绪列表 240
14.3.2 系统节拍器(时钟) 241
14.4 任务 242
14.4.1 任务控制块 242
14.4.2 任务设置 244
14.5 列表 245
14.6 队列 248
14.7 信号灯和互斥 250
14.8 实现 251
14.9 移植FreeRTOS到PSoC4 BLE 252
14.9.1 下载FreeRTOS源码 252
14.9.2 建立一个新的设计工程 252
14.9.3 修改编译器设置 253
14.9.4 添加FreeRTOS源文件到工程 254
14.9.5 在原理图中添加硬件组件 255
14.9.6 添加引脚约束文件 255
14.9.7 在主文件中添加应用代码 256
14.9.8 下载设计到目标器件 256