第1章 如何开始DSP的学习和开发 1
1.1 DSP基础知识 1
1.1.1 什么是DSP 1
1.1.2 DSP的特点 2
1.1.3 DSP与MCU、ARM、FPGA的区别 2
1.1.4 学习开发DSP所需要的知识 3
1.2 如何选择DSP 4
1.2.1 DSP厂商介绍 4
1.2.2 TI公司各个系列DSP的特点 5
1.2.3 TI DSP具体型号的含义 6
1.2.4 C2000系列DSP选型指南 7
1.3 DSP开发所需要准备的工具以及开发平台的搭建 9
1.3.1 CCS的版本 10
1.3.2 CCS3.3 的安装 10
1.3.3 仿真器的安装 15
1.3.4 Setup Code Composer Studio v3.3 的配置 23
1.3.5 基于HDSP-Super2812开发平台的搭建 25
1.4 如何学好DSP 26
1.4.1 众多工程师的讨论和经验 27
1.4.2 作者的建议 33
1.5 C2000助手软件介绍 34
第2章 TMS320X2812的结构、资源及性能 36
2.1 TMS320X2812的片内资源 36
2.1.1 TMS320X2812的性能 38
2.1.2 TMS320X2812的片内外设 39
2.2 TMS320X2812的引脚分布及引脚功能 41
2.2.1 TMS320X2812的引脚分布 41
2.2.2 TMS320X2812的引脚功能 42
第3章 TMS320X281x的硬件设计 51
3.1 如何保证X2812系统的正常工作 51
3.2 常用硬件电路的设计 52
3.2.1 TMS320X2812最小系统设计 52
3.2.2 电源电路的设计 52
3.2.3 复位电路及JATG下载口电路的设计 52
3.2.4 外扩RAM的设计 53
3.2.5 外扩Flash的设计 55
3.2.6 PWM电路的设计 56
3.2.7 串口电路的设计 56
3.2.8 A/D保护及校正电路的设计 57
3.2.9 CAN电路的设计 58
3.3 D/A电路的设计以及波形发生器的实现 59
第4章 如何构建一个完整的工程 61
4.1 一个完整的工程由哪些文件构成 61
4.1.1 头文件 63
4.1.2 库文件 67
4.1.3 源文件 69
4.1.4 CMD文件 69
4.2 通用扩展语言GEL 69
4.2.1 GEL语法 71
4.2.2 GEL函数 71
4.2.3 GEL语句 73
4.2.4 加载或卸载GEL函数 75
4.2.5 使用关键字在GEL菜单中添加GEL函数 76
4.2.6 CCS自带的GEL函数 79
4.2.7 解读c2812.gel文件 88
4.2.8 体验有趣的GEL函数 90
4.3 手把手教你创建新的工程 92
第5章 CCS3.3 的常用操作 97
5.1 了解CCS3.3 的布局和结构 97
5.2 编辑代码时的常用操作 98
5.2.1 创建新的工程 99
5.2.2 打开已存在的工程 100
5.2.3 新建一个文件 101
5.2.4 向工程添加文件 102
5.2.5 移除工程中的文件 103
5.2.6 给工程添加库文件 104
5.2.7 查找变量 105
5.2.8 替换变量 106
5.2.9 查看源码 107
5.3 编辑完成后常用的操作 107
5.3.1 生成可执行代码 107
5.3.2 链接目标板上的DSP 108
5.3.3 将可执行文件下载入DSP 109
5.3.4 运行、暂停程序 110
5.4 调试时常用的操作 111
5.4.1 添加、移除断点 111
5.4.2 单步调试 112
5.4.3 使用Watch Window观察变量 114
5.4.4 保存并导出变量的值 116
5.4.5 观察指定存储空间内的数据 118
5.4.6 统计代码的运行时间 119
5.4.7 在CCS3.3 中显示图形 121
第6章 使用C语言操作DSP的寄存器 127
6.1 寄存器的C语言访问 127
6.1.1 了解SCI的寄存器 127
6.1.2 使用位定义的方法定义寄存器 129
6.1.3 声明共同体 131
6.1.4 创建结构体文件 132
6.2 寄存器文件的空间分配 134
第7章 存储器的结构、映像及CMD文件的编写 137
7.1 存储器相关的总线知识 137
7.2 F2812的存储器 139
7.2.1 F2812存储器的结构 139
7.2.2 F2812存储器映像 139
7.2.3 F2812的各个存储器模块的特点 143
7.3 CMD文件 146
7.3.1 COFF格式和段的概念 146
7.3.2 C语言生成的段 147
7.3.3 CMD文件的编写 149
7.4 外部接口XINTF 155
7.4.1 XINTF的存储区域 156
7.4.2 XINTF的时钟 159
7.5 手把手教你访问外部存储器 159
7.5.1 外部RAM空间数据读/写 160
7.5.2 外部Flash空间数据读/写 163
第8章 X281x的时钟和系统控制 172
8.1 振荡器OSC和锁相环PLL 172
8.2 X2812中各种时钟信号的产生 173
8.3 看门狗电路 174
8.4 低功耗模式 176
8.5 时钟和系统控制模块的寄存器 176
8.6 手把手教你写系统初始化函数 181
第9章 通用输入/输出多路复用器GPIO 184
9.1 GPIO多路复用器 184
9.1.1 GPIO的寄存器 184
9.1.2 GPIO寄存器位与I/O引脚的对应关系 189
9.2 手把手教你使用GPIO引脚控制LED灯闪烁 193
第10章 CPU定时器 198
10.1 CPU定时器工作原理 198
10.2 CPU定时器寄存器 200
10.3 分析CPU定时器的配置函数 203
第11章 X2812的中断系统 206
11.1 什么是中断 206
11.2 X2812的CPU中断 207
11.2.1 CPU中断的概述 207
11.2.2 CPU中断向量和优先级 208
11.2.3 CPU中断的寄存器 210
11.2.4 可屏蔽中断的响应过程 212
11.3 X2812的PIE中断 213
11.3.1 PIE中断概述 214
11.3.2 PIE中断寄存器 215
11.3.3 PIE中断向量表 218
11.4 X281x的三级中断系统分析 223
11.5 成功实现中断的必要步骤 226
11.6 手把手教你使用CPU定时器0的周期中断来控制LED灯的闪烁 228
第12章 事件管理器EV 233
12.1 事件管理器的功能 233
12.2 通用定时器 236
12.2.1 通用定时器的时钟 238
12.2.2 通用定时器的计数模式 239
12.2.3 通用定时器的中断事件 242
12.2.4 通用定时器的同步 243
12.2.5 通用定时器的比较操作和PWM波 244
12.2.6 通用定时器的寄存器 247
12.3 比较单元与PWM电路 252
12.3.1 全比较单元 253
12.3.2 带有死区控制的PWM电路 254
12.3.3 比较单元的中断事件 257
12.3.4 比较单元的寄存器 257
12.4 捕获单元 263
12.4.1 捕获单元的结构 264
12.4.2 捕获单元的操作 264
12.4.3 捕获单元的中断事件 266
12.4.4 捕获单元的寄存器 267
12.5 正交编码电路 270
12.6 事件管理器的中断及其寄存器 273
12.7 手把手教你产生PWM波形 280
12.7.1 输出占空比固定的PWM波形 280
12.7.2 输出占空比可变的PWM波形 286
第13章 模/数转换器ADC 291
13.1 X281x内部的ADC模块 291
13.1.1 ADC模块的特点 293
13.1.2 ADC的时钟频率和采样频率 295
13.2 ADC模块的工作方式 297
13.2.1 双序列发生器模式下顺序采样 299
13.2.2 双序列发生器模式下并发采样 302
13.2.3 级联模式下的顺序采样 304
13.2.4 级联模式下的并发采样 307
13.2.5 序列发生器连续自动序列化模式和启动/停止模式 308
13.3 ADC模块的中断 309
13.4 ADC模块的寄存器 312
13.5 手把手教你写ADC采样程序 320
13.6 ADC模块采样校正技术 324
13.6.1 ADC校正的原理 325
13.6.2 ADC校正的措施 326
13.6.3 手把手教你写ADC校正的软件算法 327
第14章 串行通信接口SCI 335
14.1 SCI模块的概述 335
14.1.1 SCI模块的特点 336
14.1.2 SCI模块信号总结 337
14.2 SCI模块的工作原理 337
14.2.1 SCI模块发送和接收数据的工作原理 338
14.2.2 SCI通信的数据格式 339
14.2.3 SCI通信的波特率 340
14.2.4 SCI模块的FIFO队列 341
14.2.5 SCI模块的中断 342
14.3 SCI多处理器通信模式 344
14.3.1 地址位多处理器通信模式 345
14.3.2 空闲线多处理器通信模式 345
14.4 SCI模块的寄存器 346
14.5 手把手教你写SCI发送和接收程序 356
14.5.1 查询方式实现数据的发送和接收 357
14.5.2 中断方式实现数据的发送和接收 363
14.5.3 采用FIFO来实现数据的发送和接收 368
第15章 串行外设接口SPI 375
15.1 SPI模块的通用知识 375
15.2 X281x SPI模块的概述 377
15.2.1 SPI模块的特点 378
15.2.2 SPI的信号总结 378
15.3 SPI模块的工作原理 379
15.3.1 SPI主从工作方式 380
15.3.2 SPI数据格式 382
15.3.3 SPI波特率 383
15.3.4 SPI时钟配置 384
15.3.5 SPI的FIFO队列 385
15.3.6 SPI的中断 386
15.4 SPI模块的寄存器 387
15.5 手把手教你写SPI通信程序 395
第16章 增强型控制器局域网通信接口eCAN 401
16.1 CAN总线的概述 401
16.1.1 什么是CAN 401
16.1.2 CAN是怎样发展起来的 402
16.1.3 CAN是怎样工作的 402
16.1.4 CAN有哪些特点 403
16.1.5 什么是标准格式CAN和扩展格式CAN 404
16.2 CAN2.0B协议 404
16.2.1 CAN总线帧的格式和类型 404
16.2.2 CAN总线通信错误处理 410
16.2.3 CAN总线的位定时要求 411
16.2.4 CAN总线的位仲裁 412
16.3 X281x eCAN模块的概述 413
16.3.1 eCAN模块的结构 413
16.3.2 eCAN模块的特点 415
16.3.3 eCAN模块的存储空间 415
16.3.4 eCAN模块的邮箱 416
16.4 X281x eCAN模块的寄存器 419
16.5 X281x eCAN模块的配置 434
16.5.1 波特率的配置 434
16.5.2 邮箱初始化的配置 435
16.5.3 消息的发送操作 437
16.5.4 消息的接收操作 437
16.6 eCAN模块的中断 439
16.7 手把手教你实现CAN通信 442
16.7.1 手把手教你实现CAN消息的发送 442
16.7.2 手把手教你实现CAN消息的接收(中断方式) 447
第17章 基于HDSP-Super2812的开发实例 451
17.1 谈谈通常项目的开发过程 451
17.2 设计一个有趣的时钟日期程序 452
17.2.1 硬件设计 453
17.2.2 软件设计(含I2C接口程序) 453
17.3 设计一个SPWM程序 464
17.3.1 原理分析 464
17.3.2 软件设计 466
17.4 代码烧写入Flash固化 470
参考文献 473