《TMS320C54x DSP应用程序设计教程》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:清源科技编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2004
  • ISBN:7111135008
  • 页数:328 页
图书介绍:本书介绍了DSP硬件概况,内部资源,汇编语言等计算机知识。

第1章 TMS320C54x系列DSP概述 1

1.1 DSP芯片概述 1

1.2 TMS320C54x系列DSP的结构和特点 2

1.2.1 TMS320C54x系列DSP的概述 2

1.2.2 TMS320C54x系列DSP的特点 3

1.2.3 TMS320C54xDSP的内部硬件结构 5

1.3 总线结构 7

1.4 CPU状态和控制寄存器 8

1.4.1 状态寄存器ST0和STI 8

1.4.2 处理器工作模式状态(PMST)寄存器 11

1.5 算术逻辑单元(ALU) 13

1.5.1 ALU的输入 13

1.5.2 溢出处理 15

1.5.3 进位位 15

1.5.4 双16位模式 15

1.6 累加器A和B 15

1.6.1 保存累加器的内容 16

1.6.2 累加器移位和循环操作 16

1.6.4 专用指令 17

1.6.3 饱和处理累加器内容 17

1.7 桶式移位器 18

1.8 乘法器/加法器单元 19

1.8.1 乘法器的输入源 19

1.8.2 乘法/加法(MAC)指令 20

1.8.3 MAC和MAS乘法运算的饱和处理 21

1.9 比较、选择和存储单元 21

1.10 指数编码器 23

2.2 存储器空间 25

2.1 TMS320C54xDSP存储器概述 25

第2章 存储器和1/0空间操作 25

2.3 程序存储器 33

2.3.1 程序存储器的可配置性 33

2.3.2 片内ROM的组织 33

2.3.3 程序存储器地址映射和片内ROM内容 34

2.3.4 片内ROM的代码内容和映射 34

2.3.5 扩展程序存储器 35

2.4 数据存储器 37

2.4.1 数据存储器的可配置性 37

2.4.2 片内RAM的组织 38

2.4.3 存储器映射寄存器 39

2.5 I/O空间及其访问 40

第3章 寻址方式和程序控制 43

3.1 立即寻址 43

3.2 绝对寻址 45

3.2.1 数据存储器地址(dmad)寻址 45

3.2.2 程序存储器地址(pmad)寻址 45

3.2.3 端口地址(PA)寻址 45

3.4 直接寻址 46

3.2.4 *(lk)寻址 46

3.3 累加器寻址 46

3.4.1 基于DP的直接寻址 48

3.4.2 基于SP的直接寻址 49

3.5 间接寻址 49

3.5.1 单操作数寻址 49

3.5.2 ARAU和地址产生操作 50

3.5.3 单操作数地址的修改 50

3.5.4 双操作数寻址 55

3.5.5 修正(ARP)模式 58

3.6 存储器映射寄存器寻址 59

3.7 堆栈寻址 60

3.8 数据类型 61

3.9 产生程序存储器地址 62

3.10 程序计数器(PC) 63

3.11 程序控制 64

3.11.1 分支转移 64

3.11.2 调用 65

3.11.3 返回 67

3.11.4 条件操作 68

3.11.5 重复单条指令 70

3.11.6 重复一个指令块 72

3.12 复位操作 73

3.13 TMS320C54xDSP的中断系统 73

3.13.1 TMS320C54x的中断系统概述 73

3.13.2 中断标志寄存器(IFR) 74

3.13.3 中断屏蔽寄存器(IMR) 76

3.13.4 接收中断请求 77

3.13.6 执行中断服务程序(ISR) 78

3.13.5 应答中断 78

3.13.8 中断等待时间 79

3.13.9 中断操作流程 79

3.13.7 保存中断上下文 79

3.13.10 重新映射中断向量地址 81

3.13.11 中断和中断向量表 82

3.14 节电模式 86

3.14.2 IDLE2模式 87

3.14.3 IDLE3模式 87

3.14.1 IDLE1模式 87

3.14.4 保持(Hold)模式 88

3.14.5 其他节电性能 88

第4章 流水线 89

4.1 流水线操作 89

4.1.1 流水线的分支转移指令 91

4.1.2 流水线中的调用指令 93

4.1.3 流水线中的返回指令 94

4.1.4 流水线中的条件执行 96

4.1.5 流水线中的条件调用和分支转移 97

4.2 中断和流水线 98

4.3 双访问存储器和流水线 99

4.3.1 解决取指和读操作数之间的冲突 101

4.3.2 解决写操作数和读双操作数之间的冲突 101

4.3.3 解决写操作数、写操作数和读双操作数的冲突 102

4.4 单访问存储器和流水线 103

4.5 流水线等待 104

4.5.1 访问存储器映射寄存器的推荐指令 104

4.5.2 更新ARx、BK或SP—解决冲突 105

5.1 应用软件开发流程和工具 107

第5章 汇编程序设计 107

5.2 COFF文件概述 108

5.2.1 COFF文件的基本单元——段 109

5.2.2 汇编器对段的处理 109

5.2.3 链接器对段的处理 114

5.2.4 重新定位 115

5.2.5 运行时重新定位 116

5.2.6 加载程序 117

5.2.7 COFF文件中的符号 117

5.3.1 汇编程序格式 118

5.3 汇编语言程序格式 118

5.3.2 汇编语言的数据格式 120

5.3.3 表达式 125

5.3.4 内置函数 128

5.3.5 加载值到扩展程序存储器 129

5.4 汇编伪指令 129

5.4.1 定义段的伪指令 129

5.4.2 初始化常数的伪指令 130

5.4.3 对准段程序计数器的伪指令 133

5.4.4 格式化输出清单文件的伪指令 134

5.4.5 引用其他文件的伪指令 135

5.4.6 条件汇编伪指令 136

5.4.7 汇编时符号伪指令 136

5.4.8 混合伪指令 138

5.4.9 常用伪指令及其语法格式 139

5.5 程序汇编 139

5.5.1 运行汇编程序 140

5.5.2 条件汇编 142

5.5.3 列表文件 143

5.5.4 交叉引用清单 146

5.6 程序链接 147

5.6.1 链接器的调用 147

5.6.2 链接器的选项 148

5.6.3 链接器命令文件(.cmd文件) 149

5.7 编写链接器命令文件(.cmd文件) 151

5.7.1 MEMORY指令 151

5.7.2 SECTIONS指令 153

5.7.4 命令文件编写及链接实例 157

5.7.3 MEMORY和SECTIONS指令的默认算法 157

5.8 宏定义和调用宏 160

5.8.1 宏定义 160

5.8.2 调用宏 162

5.8.3 使用递归和嵌入宏 162

第6章 汇编语言指令 164

6.1 指令集概述 164

6.1.1 算术操作 164

6.1.2 逻辑操作 168

6.1.3 程序控制 169

6.1.4 加载和存储指令 172

6.2 指令集的符号和缩写 175

第7章 C/C++编译器概述 180

7.1 C/C++编译器命令解释程序 180

7.2 调用编译器解释命令程序 181

7.3 改变编译器的选项 181

7.3.1 常用的选项 182

7.3.3 修改编译器对文件名的解释 183

7.3.2 指定文件名 183

7.3.4 修改编译器对文件名扩展的解释和命名 184

7.3.5 指定目录 184

7.3.6 控制汇编器的选项 185

7.4 使用环境变量改变编译器特性 185

7.4.1 指定文件目录(C_DIR和C54X_C_DIR) 185

7.4.2 设置默认编译器选项(C_OPTION或C54X_C_OPTION) 186

7.5 控制预处理器 187

7.5.1 预定义的宏名 187

7.5.2 #include文件的搜索路径 187

7.5.4 产生预处理的列表文件(-ppo选项) 188

7.5.3 用-i选项改变#include文件的搜索路径 188

7.5.5 预处理后继续编译(-ppa选项) 189

7.5.6 产生一个带注释的预处理列表文件(-ppc选项) 189

7.5.7 产生一个具有行控制信息的预处理列表文件(-ppl选项) 189

7.5.8 产生由#include伪指令包含的文件列表(-ppi选项) 189

7.6 使用直接插入函数展开 189

7.6.1 直接插入内部操作数 189

7.6.2 无保护的定义控制直接插入 190

7.6.3 使用预处理器符号INLINE的保护直接插入 190

7.6.4 直接插入限制 191

7.7 使用交互列表工具 192

7.8 编译错误简介 192

7.8.1 控制诊断消息 194

7.8.2 如何使用诊断选项 194

第8章 优化C/C++代码 196

8.1 使用C编译优化器 196

8.2 使用-O3选项 197

8.2.1 控制文件级优化(-Oln选项) 197

8.2.2 创建优化信息文件(-Onn选项) 197

8.3.1 控制程序级优化(-Opn选项) 198

8.3 执行程序级优化 198

8.3.2 混合C/C++语言和汇编的优化考虑因素 199

8.4 自动直接插入扩展(-Oi选项) 200

8.5 使用交互列表工具 200

8.6 访问优化代码中的别名变量 201

8.7 调试优化的代码和优化类型 201

8.7.1 调试优化的代码 202

8.7.2 压缩优化的代码(-gp和-O选项) 202

8.7.3 可执行的优化类型 202

9.1.1 单步调用链接器 211

9.1 调用链接器 211

第9章 链接C/C++代码 211

9.1.2 作为编译的步骤调用链接器 212

9.2 禁用链接器(-c编译器选项) 212

9.3 控制链接过程 212

9.3.1 链接运行时支持库 212

9.3.2 运行时初始化 213

9.3.3 全局对象构造器 213

9.3.4 指定初始化类型 213

9.3.6 链接器命令文件实例 214

9.3.5 指定段在存储器中的分配 214

第10章 TMS320C54xC/C++语言 217

10.1 TMS320C54xC/C++语言的特点 217

10.1.1 TMS320C54xC语言特点 217

10.1.2 TMS320C54xC++语言特点 218

10.2 数据类型 218

10.3 关键词 219

10.3.1 const关键词 219

10.3.2 ioport关键词 219

10.3.3 interrupt关键词 220

10.3.4 near和far关键词 221

10.3.5 volatile关键词 221

10.4 寄存器变量和全局寄存器变量 221

10.4.1 寄存器变量 221

10.4.2 全局寄存器变量 222

10.5 Pragma伪指令 223

10.6 初始化静态和全局变量 228

10.7.1 用/C++代码调用汇编语言模块 229

10.7 C/C++和汇编语言混合编程 229

10.7.2 在C语言中插入汇编语句 230

10.7.3 在程序中访问汇编语言变量 231

10.7.4 访问汇编语言的常数 232

第11章 运行时环境和支持库 233

11.1 存储器模式 233

11.1.1 段 233

11.1.2 C系统堆栈 234

11.1.3 分配.const到程序存储器 234

11.1.4 动态存储器分配 235

11.1.5 变量初始化 236

11.1.6 为静态和全局变量分配存储器 236

11.1.7 字段/结构体定位 236

11.1.8 字符串常数 236

11.2 寄存器规定 237

11.2.1 状态寄存器的位 238

11.2.2 寄存器变量 239

11.3 函数结构和调用规定 239

11.3.1 函数如何进行调用 239

11.3.2 被调用函数如何响应 240

11.3.4 分配帧和使用32位存储器读指令 241

11.4 中断处理 241

11.4.1 C语言中断的基本知识 241

11.3.3 访问变量和局部变量 241

11.4.2 使用C/C++中断程序 242

11.4.3 保存中断入口点的上下文 242

11.5.1 变量自动初始化 243

11.5.2 全局构造器 243

11.5 系统初始化 243

11.5.3 初始化表 244

11.5.4 运行时变量的自动初始化 245

11.5.5 在加载时变量的初始化 245

11.6 运行时支持库函数 246

11.6.1 库 246

11.6.2 C的I/O函数 247

11.6.3 头文件 252

第12章 集成开发环境(CCS) 258

12.1 CCS2.0系统的安装和配置 258

12.2 建立工程文件 261

12.3 设置工程项目选项 262

12.3.1 编译器环境参数设置 262

12.3.2 链接器环境参数设置 266

12.4 编译、链接和运行目标文件 268

12.4.1 编译和链接 268

12.4.2 仿真运行输出目标文件 268

12.5 查看存储器信息 269

12.6 查看寄存器信息 270

12.7 修改存储器和寄存器内容 271

12.8 设置断点和探测点 272

12.9 图形显示 273

12.9.1 定义探测点和输入数据 273

12.9.2 将探测点与数据文件链接起来 274

12.9.3 建立幅值—时间图形 275

12.9.4 建立“眼(Eye)”图形 276

12.9.5 建立“合成(Constellation)”图形 277

13.1 提高系统性能的几种方法 279

13.1.1 有效存储器分配的建议 279

第13章 应用程序开发实例 279

13.1.2 存储器定位要求 280

13.1.3 堆栈初始化 281

13.1.4 重叠管理 281

13.1.5 存储区之间的移动 281

13.1.6 有效的功耗管理 283

13.2 算术运算 283

13.2.1 除法和求模运算 283

13.2.2 正弦和余弦运算 286

13.2.3 扩展精度运算 290

13.2.4 浮点运算 295

13.3 快速傅里叶变换(FFT)的DSP实现 298

13.3.1 离散傅里叶变换(DFT) 298

13.3.2 快速傅里叶变换(FFT) 299

13.3.3 快速傅里叶变换的DSP实现 300

13.4 FIR滤波器的DSP实现 312

13.5 IIR滤波器的DSP实现 317

13.6 自适应滤波的DSP实现 320

13.7 CODEC应用程序的DSP实现 323

参考文献 328