第一部分 ARM嵌入式系统设计 2
第1章 嵌入式系统概要 2
1.1 嵌入式系统概要 2
1.1.1 嵌入式系统简介 2
1.1.2 嵌入式系统微处理器 2
1.1.3 嵌入式操作系统 5
1.1.4 嵌入式系统的应用模式 9
1.1.5 嵌入式系统选型 9
1.2 ARM处理器 9
1.2.1 ARM处理器简介 9
1.2.2 ARM处理器类型 10
1.2.2 几种典型的ARM处理器 16
第2章 ARM7嵌入式系统硬件基础 22
2.1 AT91SAM7S64微处理器介绍 22
2.1.1 AT91SAM7S64的特点 22
2.1.2 AT91SAM7S64内部结构 23
2.1.3 AT91SAM7S64存储器映射 27
2.1.4 系统控制器映射 28
2.1.5 外设映射 29
2.2 AT91SAM7S64嵌入式系统硬件设计 29
2.2.1 硬件结构 29
2.2.2 基本电路 30
2.3 AT91SAM7S64嵌入式系统外围硬件设计 31
2.3.1 I/O接口电路 31
2.3.2 Key接口电路 32
2.3.3 LED接口电路 32
2.3.4 USB接口电路 33
2.3.5 稳压电源电路 33
2.3.6 模拟信号调理电路 34
2.3.7 JTAG接口电路 35
2.3.8 串行EEPROM接口电路 36
2.3.9 复位与看门狗电路 36
2.3.10 DEBUG接口/通用串口电路 37
2.3.11 RS-232转RS-485接口电路 39
第3章 简单的Key_LED程序设计 41
3.1 AT91SAM7S系列ARM处理器通用I/O口的特点与连接 41
3.2 HelloWorld程序 42
3.2.1 建立一个简单的HelloWord程序 42
3.2.2 HelloWorld源程序 43
3.2.3 程序编译 44
3.2.4 通过JTAG口烧写Flash 45
3.2.5 通过USB接口及SAM-BA烧写Flash 45
3.3 Key_LED程序 47
3.4 深入分析Key_LED程序 48
3.4.1 I/O口常用配置与操作函数 48
3.4.2 常规系统参数设置 55
3.4.3 系统启动初始化程序 56
3.4.4 AT91SAM7S64的系统参数及系统函数 56
3.5 GCC项目编译 57
3.5.1 make常用命令 57
3.5.2 makefile文件 58
3.5.3 Key_LED项目中的makefile文件 62
3.6 WinARM介绍 65
3.6.1 WinARM介绍 65
3.6.2 WinARM提供的常用工具 66
第4章 Debug接口及USART通用串口通信 67
4.1 Debug口概述 67
4.2 Debug口编程 68
4.2.1 Debug口初始化 68
4.2.2 Debug口发送数据 71
4.2.3 Debug口中断响应 73
4.2.4 软件复位的实现 75
4.2.5 Debug口程序代码 76
4.3 通用串口基础 79
4.4 通用串口编程 81
4.4.1 通用串口初始化 81
4.4.2 通用串口发送数据 82
4.4.3 通用串口中断响应 83
4.4.4 通用串口读取接收数据 84
第5章 中断处理及ADC数模转换 85
5.1 AT91SAM7S中断基础 85
5.1.1 AT91SAM7S中断处理内部结构 85
5.1.2 AT91SAM7S中断处理过程 86
5.2 外部中断 86
5.2.1 中断初始化 86
5.2.2 中断处理 92
5.3 AT91SAM7S ADC概要 94
5.4 ADC初始化 95
5.5 ADC数据读取 102
5.6 ADC应用实例 104
第6章 USB及TWI两线接口 108
6.1 AT91SAM7S USB接口概要 108
6.1.1 USB接口标准 108
6.1.2 AT91SAM7S USB接口 111
6.2 USB接口初始化 112
6.2.1 打开USB驱动 112
6.2.2 CDC结构的成员函数 113
6.3 USB数据收发 115
6.3.1 USB数据的接收示例 115
6.3.2 USB数据的发送示例 115
6.4 PC端USB接口程序 117
6.4.1 关于INF文件 117
6.4.2 USB转串口驱动安装文件 118
6.5 TWI两线接口介绍 119
6.6 TWI初始化 120
6.6.1 TWI初始化函数 120
6.6.2 TWI读数据函数 123
6.6.3 TWI写数据函数 124
6.7 TWI应用示例 125
第7章 定时器及PWM脉宽调制 127
7.1 AT91SAM7S定时器概要 127
7.1.1 实时定时器 127
7.1.2 定时器/计数器 128
7.2 定时器初始化 128
7.2.1 定时器初始化 128
7.2.2 定时器的打开 132
7.3 定时器中断响应 132
7.4 频率测量 133
7.5 看门狗定时器 134
7.5.1 看门狗定时器介绍 134
7.5.2 看门狗定时器初始化 134
7.5.3 看门狗定时器的喂狗 136
7.5.4 看门狗定时器库函数 137
7.6 PWM脉宽调制介绍 138
7.6.1 AT91SAM7S脉宽调制介绍 138
7.6.2 外设A与外设B的设置及PWM输出 138
7.6.3 PWM初始化 140
7.6.4 PWM输出 141
第8章 WinARM C++程序设计 142
8.1 C++的特点 142
8.1.1 C++介绍 142
8.1.2 兼容C语言 142
8.1.3 面向对象语言 144
8.1.4 泛型编程语言 145
8.1.5 STL编程 145
8.2 WinARM中对C++的支持 147
8.2.1 WinARM中的C++编译器 147
8.2.2 在C++程序中调用C函数 147
8.3 WinARM C++程序实例 148
第二部分 FPGA嵌入式设计 152
第9章 FPGA硬件设计 152
9.1 Cyclone系列FPGA器件的特点 152
9.1.1 Cyclone系列FPGA器件简介 152
9.1.2 Cyclone器件的特点 153
9.1.3 Cyclone Ⅱ器件介绍 154
9.1.4 Cyclone Ⅲ器件介绍 156
9.1.5 Altera串行配置器件简介 157
9.2 EP1C3 FPGA硬件设计 157
9.2.1 EP1C3引脚图 158
9.2.2 稳压电源设计 159
9.2.3 JTAG接口 160
9.2.4 Byteblaster Ⅱ下载线 161
9.2.5 复位电路 163
9.3 Quartus II开发平台应用 165
9.3.1 安装Quartus II 166
9.3.2 Quartus II的基本应用 167
9.4 简单的LED测试程序 170
第10章 FPGA Verilog HDL编程基础 172
10.1 Verilog HDL简介 172
10.1.1 Verilog HDL历史 172
10.1.2 Verilog HDL的特点 172
10.2 Verilog HDL模块 173
10.2.1 模块 173
10.2.2 区块 174
10.2.3 空白与注解 175
10.3 Verilog HDL输入/输出端口 175
10.4 Verilog HDL变量 176
10.4.1 变量的声明 176
10.4.2 数字格式 177
10.5 Verilog HDL数据类型 177
10.5.1 线网类型 178
10.5.2 寄存器类型 178
10.5.3 整数与实数类型 179
10.5.4 标量和向量类型 179
10.5.5 时间类型 180
10.5.6 参数类型 180
10.5.7 数组的表示方法 180
10.5.8 存储器的表示方法 181
10.5.9 字符串的表示方法 181
10.6 运算符 181
10.6.1 逻辑运算符 181
10.6.2 算术运算符 182
10.6.3 关系运算符 182
10.6.4 相等运算符 182
10.6.5 按位运算符 183
10.6.6 缩减运算符 183
10.6.7 移位运算符 184
10.6.8 拼接运算符 184
10.6.9 条件运算 184
10.7 always过程 184
10.7.1 always过程 185
10.7.2 触发方式 185
10.7.3 事件及敏感信号列表 186
10.8 赋值 187
10.8.1 持续赋值 187
10.8.2 阻塞式赋值 188
10.8.3 非阻塞式语句 188
10.9 行为描述 190
10.9.1 if条件语句 190
10.9.2 case多路选择语句 190
10.9.3 if语句与case语句的比较 190
10.9.4 循环语句 190
10.10 Verilog HDL任务及函数定义 191
10.10.1 函数 191
10.10.2 任务 192
10.10.3 函数与任务间的比较 193
10.11 编译预处理 193
10.11.1 文件包含命令 193
10.11.2 条件编译 193
10.11.3 文件输出/输入 194
10.11.4 时延精度预处理 194
10.12 设计风格 195
10.12.1 锁存器的使用 195
10.12.2 避免产生锁存器 195
10.12.3 设计时注意事项 195
第11章 FPGA Verilog HDL编程实例 197
11.1 3-8译码器 197
11.2 十字路口红绿灯控制电路设计 200
11.3 LED数码显示 201
11.4 扫频电路设计 203
11.5 频率测量电路设计 204
11.6 简易软件CPU的实现 205
第12章 FPGA SOPC嵌入式系统开发基础 214
12.1 SOP嵌入式系统 214
12.1.1 SOPC嵌入式系统简介 214
12.1.2 SOPC嵌入式系统类型 214
12.2 Nios II软CPU核 215
12.2.1 Nios II软CPU核简介 215
12.2.2 Nios II软CPU核的结构 215
12.2.3 三种类型的Nios II内核 216
12.3 SOPC开发流程 218
12.4 Nios II开发实例 218
12.4.1 安装开发软件 219
12.4.2 建立新项目 219
12.4.3 Nios II CPU配置 220
12.4.4 存储器与端口配置 224
12.4.5 Nios II内核配置 226
12.4.6 在QuartusII中使用Nios II处理器 228
12.4.7 在Nios II IDE中编写应用程序 230
12.4.8 返回QuartusII中重新编译 234
第三部分 ARM与FPGA综合设计在工业控制中的应用第13章 ARM与FPGA综合设计 236
13.1 ARM与FPGA综合设计思路 236
13.2 ARM与FPGA的比较 237
13.3 ARM与FPGA综合设计实例 238
13.3.1 ARM与FPGA综合设计的优点 238
13.3.2 常用的ARM与FPGA综合设计的功能划分 238
13.3.3 ARM与FPGA通信方式 239
13.4 Verilog HDL通用串口程序 240
13.4.1 UART数据发送程序 240
13.4.2 UART数据接收程序 242
13.5 ARM与FPGA综合设计简单实例 244
第14章 ARM与上位机的通信 249
14.1 ARM与上位机的连接方式 249
14.2 简单通信协议的设计 249
14.3 基于GCC的上位机串口通信程序设计 250
14.3.1 SmartWin++介绍 250
14.3.2 在Obtain_Studio平台上建立SmartWin++项目 251
14.3.3 GCC下的串口通信类 251
14.3.4 打开串口通信 252
14.3.5 修改或获取串口参数 252
14.3.6 串口的读/写 254
14.3.7 CSerial类代码 254
14.3.8 SmartWin++串口通信程序 258
14.3.9 编译与运行SmartWin++串口通信程序 262
14.4 基于VC++的上位机串口通信程序设计 263
14.5 Obtain_AutoControl测控组态软件应用 270
14.5.1 Obtain_AutoControl软件简介 270
14.5.2 Obtain_AutoControl用法 271
14.5.3 Obtain_AutoControl应用实例 273
第15章 ARM与短信模块的接口与应用 277
15.1 短信模块介绍 277
15.2 与短信收发相关的AT命令 277
15.3 短信模块的初始化 281
15.3.1 一个短信数据收发桥的设计 281
15.3.2 短信模块的初始化 281
15.4 短信的发送 283
15.5 短信的接收与处理 285
15.5.1 短信数据接收 286
15.5.2 短信数据处理 287
15.6 GPRS模块介绍 293
15.7 ARM与GPRS模块的连接 295
15.8 GPRS通信的服务软件设计 297
15.8.1 建立CFormView视图类单文档项目 297
15.8.2 编写服务器Socket类和客户Socket类 298
第16章 ARM在变频器控制中的应用 315
16.1 变频器原理 315
16.1.1 变频器介绍 315
16.1.2 变频调速原理 315
16.1.3 变频器系统结构 316
16.2 富士PllS系列变频器远程控制的数据格式 317
16.3 变频器指令的发送 321
16.3.1 固定参数的变频器指令的发送 321
16.3.2 需要传递参数的变频器指令的发送 322
16.4 变频器返回数据的接收 326
16.4.1 接收数据 326
16.4.2 变频器返回数据的处理 327
第17章 ARM与FPGA综合设计在自动供水系统中的应用 331
17.1 基于嵌入式的水处理自动监控系统方案设计 331
17.1.1 系统结构图 332
17.1.2 PC主控制软件 334
17.1.3 微处理器模块 334
17.1.4 测量模块 334
17.1.5 控制模块 336
17.1.6 中央模拟屏 338
17.1.7 通信模块 339
17.2 简易通信协议的设计与实现 340
17.2.1 简易通信协议的设计 340
17.2.2 简易通信协议的实现 343
第18章 ARM与FPGA综合设计在真空干燥系统中的应用 350
18.1 真空干燥系统的结构 350
18.2 温度与真空度控制模型 351
18.2.1 恒温或按某预定温度曲线的控制模型 351
18.2.2 恒真空度或按某预定真空度曲线的控制模型 352
18.2.3 人工神经网络的选择 352
18.2.4 由ARM与FPGA构成的嵌入式微处理器模块 353
18.2.5 测控软件设计 354
18.3 温度与真空度变化曲线的测量 355
18.3.1 量程控制的设计 355
18.3.2 利用FPGA内存模块存储数据 364
18.3.3 数据的实时采集 368
参考文献 380