第1章 绪论 1
1.1 DSP的基本概念 1
1.2 DSP芯片简介 2
1.2.1 DSP芯片的发展历史、现状和趋势 2
1.2.2 DSP芯片的特点 4
1.2.3 DSP芯片的分类 5
1.2.4 DSP芯片的应用领域 5
1.2.5 选择DSP芯片考虑的因素 6
1.3 DSP芯片产品简介 7
1.3.1 TI公司的DSP芯片概况 7
1.3.2 其他公司的DSP芯片概况 7
1.3.3 TMS320C5000概况 8
思考题与习题 9
第2章 TMS320C55x的硬件结构 10
2.1 TMS320C55x的总体结构 10
2.1.1 C55x CPU内部总线结构 10
2.1.2 C55x的CPU组成 10
2.1.3 C55x存储器配置 11
2.1.4 C55x外设配置 12
2.2 C55x的封装和引脚功能 13
2.2.1 引脚属性 13
2.2.2 引脚信号定义与描述 14
2.3 C55x的CPU结构 18
2.3.1 存储器接口单元(M单元) 18
2.3.2 指令缓冲单元(I单元) 18
2.3.3 程序流单元(P单元) 19
2.3.4 地址数据流单元(A单元) 20
2.3.5 数据计算单元(D单元) 20
2.3.6 地址总线与数据总线 22
2.3.7 指令流水线 23
2.4 CPU寄存器 25
2.4.1 概况 25
2.4.2 累加器(AC0~AC3) 29
2.4.3 变换寄存器(TRN0、TRN1) 30
2.4.4 T寄存器(T0~T3) 30
2.4.5 用作数据地址空间和I/O空间的寄存器 30
2.4.6 程序流寄存器(PC、RETA、CFCT) 35
2.4.7 中断管理寄存器 36
2.4.8 循环控制寄存器 39
2.4.9 状态寄存器ST0_55 40
2.4.10 状态寄存器ST1_55 43
2.4.11 状态寄存器ST2_55 46
2.4.12 状态寄存器ST3_55 48
2.5 存储空间和I/O空间 51
2.5.1 存储器映射 51
2.5.2 程序空间 53
2.5.3 数据空间 54
2.5.4 I/O空间 55
2.6 堆栈操作 55
2.6.1 数据堆栈和系统堆栈 55
2.6.2 堆栈配置 56
2.6.3 快返回与慢返回 56
2.7 中断和复位操作 58
2.7.1 中断概述 58
2.7.2 中断向量与优先级 58
2.7.3 可屏蔽中断 60
2.7.4 不可屏蔽中断 63
2.7.5 硬件复位 64
2.7.6 软件复位 66
思考题与习题 67
第3章 TMS320C55x的指令系统 69
3.1 寻址方式 69
3.1.1 绝对寻址方式 69
3.1.2 直接寻址方式 71
3.1.3 间接寻址方式 74
3.1.4 数据存储器的寻址 81
3.1.5 存储器映射寄存器(MMR)的寻址 82
3.1.6 寄存器位的寻址 83
3.1.7 I/O空间的寻址 83
3.1.8 循环寻址 83
3.2 TMS320C55x的指令系统 85
3.2.1 算术运算指令 87
3.2.2 位操作指令 111
3.2.3 扩展辅助寄存器操作指令 114
3.2.4 逻辑运算指令 115
3.2.5 移动指令 118
3.2.6 程序控制指令 126
思考题与习题 130
第4章 TMS320C55x汇编语言编程 132
4.1 TMS320C55x软件开发流程 132
4.1.1 软件开发流程 132
4.1.2 软件开发工具 132
4.2 TMS320C55x目标文件格式 134
4.2.1 COFF文件的基本单元 段 134
4.2.2 汇编器对段的处理 134
4.2.3 链接器对段的处理 138
4.2.4 链接器对程序的重新定位 139
4.2.5 COFF文件中的符号 140
4.3 TMS320C55x汇编器 141
4.3.1 汇编器概述 141
4.3.2 汇编程序的运行 141
4.3.3 C55x汇编器的特点 142
4.4 TMS320C55x汇编伪指令 145
4.4.1 汇编伪指令 145
4.4.2 宏指令 146
4.5 TMS320C55x汇编语言源文件的书写格式 151
4.5.1 汇编语言源文件格式 151
4.5.2 汇编语言中的常数与字符串 152
4.5.3 汇编源程序中的符号 153
4.5.4 汇编源程序中的表达式 156
4.5.5 内建数学函数 157
4.6 TMS320C55x链接器 158
4.6.1 概述 158
4.6.2 链接器的运行 158
4.6.3 链接器命令文件的编写与使用 160
4.6.4 MEMORY指令 160
4.6.5 SECTIONS指令 161
4.7 一个完整的TMS320C55x汇编程序 162
思考题与习题 164
第5章 集成开发环境(CCS) 165
5.1 CCS概述 165
5.1.1 集成开发环境CCS概述 165
5.1.2 CCS软件的安装 166
5.1.3 配置CCS 167
5.2 CCS的基本操作 167
5.2.1 进入CCS主界面 167
5.2.2 源文件的建立、打开、关闭与编辑 171
5.2.3 工程项目的创建、关闭和打开 174
5.2.4 工程中文件的添加或删除 175
5.2.5 工程的构建(编译、链接) 177
5.3 工程项目的调试 178
5.3.1 程序的运行控制 179
5.3.2 断点 180
5.3.3 反汇编窗口的使用 181
5.3.4 存储器窗口的使用 182
5.3.5 寄存器窗口的使用 184
5.3.6 观察窗口的使用 184
5.3.7 图形显示工具 185
5.3.8 探测点 186
5.3.9 软件仿真器分析(Simulator Analysis) 189
5.3.10 符号浏览器 191
思考题与习题 191
第6章 C/C++语言程序设计 192
6.1 C55x C/C++语言概述 192
6.1.1 C/C++语言概况 192
6.1.2 C55x C/C++语言概况 192
6.2 C55x C/C++语言编程基础 193
6.2.1 数据类型 193
6.2.2 关键字 194
6.2.3 寄存器变量和参数 195
6.2.4 asm指令 195
6.2.5 Pragma指令 195
6.2.6 标准ANSIC语言模式的改变(-pk、-pr和-ps选项) 196
6.2.7 存储器模式 197
6.2.8 存储器分配 197
6.2.9 中断处理 199
6.2.10 运行时间支持算法及转换程序 200
6.2.11 系统初始化 200
6.3 C55x C/C++编译器的使用 203
6.3.1 编译器外壳程序c155简介 203
6.3.2 cl55程序的选项 204
6.3.3 编译器和CCS 205
6.4 C55x的C代码优化 205
6.4.1 编译器的优化选项 206
6.4.2 嵌入函数(Inline Function) 207
6.4.3 优化C代码的主要方法 207
6.5 C55x C和汇编语言混合编程 213
6.5.1 C和汇编语言混合编程概述 213
6.5.2 寄存器规则 213
6.5.3 函数结构和调用规则 215
6.5.4 C和汇编语言的接口 218
思考题与习题 221
第7章 应用程序设计 222
7.1 定标与溢出处理 222
7.1.1 数的定标 222
7.1.2 溢出的处理方法 223
7.1.3 常用信号处理算法中的定标方法 224
7.2 基础算术运算 225
7.2.1 加减运算 225
7.2.2 乘法运算 227
7.2.3 除法运算 228
7.2.4 小数乘法 233
7.3 FIR滤波器 234
7.3.1 FIR滤波器的基本结构 235
7.3.2 FIR滤波器的C语言编程实现 235
7.3.3 FIR滤波器的汇编语言编程实现 236
7.4 IIR滤波器 239
7.4.1 二阶IIR滤波器的结构 239
7.4.2 高阶IIR滤波器的结构 240
7.4.3 IIR滤波器的C语言实现 242
7.4.4 IIR滤波器的汇编语言实现 243
7.5 快速傅里叶变换FFT 245
7.5.1 FFT算法原理 245
7.5.2 库利-图基算法 246
7.5.3 FFT算法的实现 247
思考题与习题 251
第8章 C55x的片上外设 253
8.1 时钟发生器 253
8.1.1 时钟发生器概况 253
8.1.2 时钟工作模式 253
8.1.3 CLKOUT输出 254
8.1.4 使用方法 254
8.2 通用定时器 256
8.2.1 通用定时器概况 256
8.2.2 工作原理 256
8.2.3 定时器使用要点 258
8.2.4 通用定时器应用实例 259
8.3 通用I/O口(GPIO) 261
8.4 外部存储器接口(EMIF) 262
8.4.1 EMIF概况 262
8.4.2 EMIF请求的优先级 264
8.4.3 对存储器的考虑 264
8.4.4 程序和数据访问 265
8.4.5 EMIF中的控制寄存器 268
8.5 多通道缓冲串口McBSP 274
8.5.1 McBSP概述 274
8.5.2 McBSP组成框图 274
8.5.3 采样率发生器 275
8.5.4 多通道模式选择 277
8.5.5 异常处理 278
8.5.6 McBSP寄存器 279
8.6 模/数转换器(ADC) 285
8.6.1 ADC的结构和时序 285
8.6.2 ADC的寄存器 286
8.6.3 实例 287
8.7 看门狗定时器(Watchdog) 288
8.7.1 看门狗定时器概述 288
8.7.2 看门狗定时器的配置 289
8.7.3 看门狗定时器的寄存器 290
8.8 I2C模块 292
8.8.1 I2C模块简介 292
8.8.2 I2C模块工作原理 292
8.8.3 I2C寄存器 295
思考题与习题 296
第9章 C55x的硬件扩展 297
9.1 硬件设计概述 297
9.1.1 C55x DSP系统的组成 297
9.1.2 DSP硬件系统设计流程 298
9.2 DSP系统的基本电路设计 299
9.2.1 JTAG接口 299
9.2.2 电源电路 300
9.2.3 复位电路 302
9.2.4 时钟电路 303
9.3 外部程序存储器的扩展 304
9.3.1 EMIF和异步存储器的连接 304
9.3.2 闪存S29AL008D简介 305
9.3.3 VC5509A与S29AL008D的接口 308
9.4 外部数据存储器的扩展 309
9.4.1 同步动态随机存取存储器(SDRAM) 309
9.4.2 C55x EMIF的SDRAM接口信号 311
9.4.3 C55x EMIF与SDRAM的接口 312
9.5 C55x与A/D和D/A转换器的接口 315
9.5.1 TLV320AIC23B简介 315
9.5.2 AIC23B的控制寄存器 318
9.5.3 AIC23B与C55x的控制接口 322
9.5.4 AIC23B与C55x的数据接口 323
9.5.5 AIC23B的模拟接口 324
思考题与习题 325
第10章 C55x应用系统设计实例 326
10.1 典型DSP板的硬件设计 326
10.1.1 概述 326
10.1.2 基本电路模块 327
10.1.3 FLASH电路模块 328
10.1.4 SDRAM电路模块 328
10.1.5 数/模转换电路 328
10.1.6 SD卡接口电路 328
10.1.7 USB接口电路 330
10.1.8 自启动电路模块 331
10.2 CPLD电路模块设计 332
10.2.1 概述 332
10.2.2 复位逻辑 332
10.2.3 控制寄存器的地址生成 333
10.2.4 用户寄存器 334
10.2.5 FLASH高位地址寄存器 334
10.2.6 控制寄存器数据的输出 335
10.3 DSP板测试程序 335
10.3.1 LED灯和拨码开关测试程序 335
10.3.2 GPIO测试程序 336
10.3.3 SDRAM测试程序 337
10.3.4 FLASH测试程序 338
10.3.5 AIC23B测试程序 338
10.4 综合设计实例1:自适应系统辨识 339
10.4.1 基于LMS算法的自适应滤波器 339
10.4.2 自适应系统辨识算法 340
10.4.3 辨识系统硬件设计 340
10.4.4 辨识系统软件设计 341
10.5 综合设计实例2:数字式有源抗噪声耳罩 344
10.5.1 概述 344
10.5.2 系统工作原理和控制算法 345
10.5.3 硬件设计 347
10.5.4 软件设计 349
参考文献 352