简介
本书以美国TI公司TMS320C6000系列DSP为平台,介绍CPU硬件结构、指令系统(伪指令)、C/C++程序开发基础、C/C++程序开发、线性汇编代码优化、汇编语言工具、软件集成开发、程序调试与实例分析、外部存储器接口、中断系统、直接存储器访问(DMA)、增强型直接存储器访问(EDMA)、多通道缓冲串口(McBSP)、主机并行接口(HPI)、扩展总线、外围设备互联(PCI)端口、定时器、通用输入/输出(I/O)等,是目前国内比较系统介绍TMS320C6000系列DSP的学习、开发应用指南。
目录
目 录
第1章 TMS320C6000系列DSP概述 1
1.1 DSP产生、特点及其应用 1
1.1.1 DSP的产生 1
1.1.2 DSP的特点 2
1.1.3 DSP的应用 3
1.2 TMS320C6000系列DSP主要特点及其应用 4
第2章 TMS320C6000系列CPU、指令系统、伪指令 6
2.1 TMS320C6000系列CPU的结构 6
2.2 TMS320C6000系列CPU的数据通路和控制 8
2.2.1 通用寄存器组 10
2.2.2 数据通路的功能单元 12
2.2.3 寄存器组交叉通路 13
2.2.4 存储器存取通路 14
2.2.5 数据地址通路 14
2.2.6 TMS320C6000控制寄存器组 14
2.2.7 TMS320C67x控制寄存器扩展 18
2.2.8 TMS320C64x控制寄存器扩展 22
2.3 TMS320C6000系列DSP的存储器 24
2.3.1 程序存储器 24
2.3.2 内部数据存储器 30
2.3.3 二级内部存储器 33
2.4 TMS320C6000系列DSP指令系统 38
2.4.1 TMS320C6000系列DSP指令集 39
2.4.2 流水线 51
2.4.3 汇编伪指令 64
第3章 程序开发基础 81
3.1 软件开发工具概述 81
3.2 C/C++编译器概述 83
3.2.1 ISO标准 83
3.2.2 输出文件 83
3.2.3 编译器接口 84
3.2.4 编译器操作 84
3.2.5 编译器工具 84
3.3 使用C/C++编译器 85
3.3.1 编译器 85
3.3.2 调用C/C++编译器 85
3.3.3 设置选项改变编译器的行为 87
3.3.4 常用选项 91
3.3.5 指定文件名 93
3.3.6 设置目录 93
3.3.7 设置默认的编译选项 94
3.4 优化代码 95
3.4.1 执行优化 95
3.4.2 优化软件流水 97
3.4.3 冗余循环 100
3.4.4 调试和剖析优化代码 101
3.4.5 基于价值的寄存器分配 101
3.4.6 别名消除 102
3.4.7 优化跳转和简化控制流 102
3.4.8 数据流优化 102
3.4.9 简化表达式 102
3.4.10 内联函数扩展 103
3.4.11 寄存器跟踪与分配 104
3.5 使用汇编优化器 105
3.5.1 增强性能的代码开发流程 105
3.5.2 线性汇编知识 106
第4章 C/C++程序开发 112
4.1 TMS320C6000系列C/C++语言实现 112
4.1.1 TMS320C6000系列C语言特点 112
4.1.2 TMS320C6000系列C++语言特点 114
4.1.3 TMS320C6000系列C/C++语言关键字 114
4.1.4 pragma伪指令 119
4.1.5 初始化静态变量和全局变量 125
4.2 运行时环境 126
4.2.1 存储器模型 126
4.2.2 对象的表示 129
4.2.3 中断处理 134
4.2.4 系统初始化 135
4.3 运行时支持函数 139
4.3.1 编译器包括的库 139
4.3.2 C语言的I/O函数 140
4.3.3 运行时支持库函数和宏的描述 148
4.4 TMS320C6000系列C/C++代码优化 151
4.4.1 C/C++语言代码的编写 151
4.4.2 编译C/C++代码 152
4.4.3 优化C代码 153
4.5 C/C++语言和汇编的混合编程 157
4.5.1 在C/C++代码中调用汇编语言模块 157
4.5.2 用内嵌函数访问汇编语言 158
4.5.3 在C/C++语言中嵌入汇编语言 159
4.5.4 在C/C++语言中访问汇编语言变量 159
第5章 线性汇编优化代码 165
5.1 汇编优化器选项与伪指令 165
5.2 编写并行代码 169
5.2.1 点积的C代码 169
5.2.2 C代码转换为线性汇编 170
5.2.3 画相关性图 171
5.2.4 非并行汇编代码与并行汇编代码 172
5.2.5 使用字访问短型数据与使用双字访问 176
5.3 软件流水 183
5.3.1 模迭代间隔编排表 185
5.3.2 使用汇编优化器产生优化循环 189
5.3.3 最终汇编 190
5.4 多周期循环的模迭代 204
5.4.1 转换C代码为线性汇编 204
5.4.2 确定最小迭代间隔 204
5.4.3 画相关性图 206
5.4.4 线性汇编资源分配 207
5.4.5 模迭代间隔编排 207
5.4.6 使用汇编优化器产生加权矢量和 214
5.4.7 最终汇编 215
5.5 循环传递路径 216
5.5.1 将C代码的内核循环转换为线性汇编 217
5.5.2 画相关性图 217
5.5.3 确定最小迭代间隔 218
5.5.4 线性汇编资源分配 220
5.5.5 模迭代间隔安排 220
5.5.6 使用汇编优化器处理IIR滤波器 221
5.5.7 最终汇编 222
5.6 循环中的if-then-else语句 222
5.6.1 if-then-else的C代码 223
5.6.2 转换C代码为线性汇编 223
5.6.3 画相关性图 224
5.6.4 确定最小迭代间隔 224
5.6.5 线性汇编资源分配 225
5.6.6 最终汇编 226
5.6.7 性能比较 226
5.7 循环展开 227
5.7.1 展开if-then-else的C代码 228
5.7.2 C代码转换为线性汇编 228
5.7.3 画相关性图 229
5.7.4 确定最小迭代间隔 230
5.7.5 线性汇编资源安排 230
5.7.6 最终汇编 231
5.8 生命太长问题 232
5.8.1 具有生命太长问题的C代码 232
5.8.2 C代码转换为线性汇编 233
5.8.3 画相关性图 234
5.8.4 确定最小迭代间隔 234
5.8.5 线性汇编资源安排 235
5.8.6 带MV指令的最后汇编 236
5.9 消除冗余取数 238
5.9.1 转换C代码为线性汇编 239
5.9.2 画相关性图 240
5.9.3 确定最小迭代间隔 241
5.9.4 线性汇编资源分配 241
5.9.5 最终汇编 242
5.10 存储体 244
5.10.1 FIR滤波器的内核循环 245
5.10.2 展开的FIR滤波器的C代码 246
5.10.3 将C代码转换为线性汇编 247
5.10.4 画相关性图 248
5.10.5 含有.mptr命令的展开后FIR线性汇编 249
5.10.6 线性汇编资源分配 250
5.10.7 确定最小迭代间隔 250
5.10.8 最终汇编 251
5.11 软件流水外循环 253
5.11.1 展开FIR滤波器的C代码 253
5.11.2 最终汇编 254
5.12 同内循环一起条件地执行外循环 257
5.12.1 展开FIR滤波器的C代码 257
5.12.2 将内核循环的C代码转换为线性汇编 258
5.12.3 将外环的C代码转换为线性汇编 258
5.12.4 展开FIR滤波器的C代码 259
5.12.5 C代码转换为线性汇编(内核循环) 260
5.12.6 确定最小迭代间隔 262
5.12.7 最终汇编 262
5.12.8 性能比较 265
5.13 通用目标文件格式 265
5.13.1 段 265
5.13.2 汇编器对段的处理 266
5.13.3 连接器对段的处理 271
第6章 汇编语言工具 273
6.1 宏语言 273
6.2 连接器描述 274
6.3 MEMORY伪指令 277
6.4 SECTIONS伪指令 279
6.4.1 SECTIONS伪指令格式 279
6.4.2 绑定 282
6.4.3 指定存储器 283
6.4.4 指定输入段 284
6.4.5 使用多个存储器区域定位 286
6.4.6 在非连续的存储器区域自动分裂输出段 286
6.4.7 把文档库一个成员分配到输出段 288
6.5 指定段的运行地址 289
6.5.1 指定加载地址和运行地址 289
6.5.2 未初始化段 290
6.5.3 使用.label伪指令引用加载地址 290
第7章 软件集成开发 296
7.1 应用软件开发流程及工具 296
7.2 集成开发环境(CCS) 298
7.2.1 CCS概述 298
7.2.2 CCS开发环境的安装和配置 299
7.2.3 文本编辑器 313
7.2.4 调试工具 317
7.2.5 自动化(项目管理) 320
7.2.6 DSP/BIOS插件 321
7.3 开发应用程序 324
7.3.1 创建工程文件 324
7.3.2 向工程添加文件 325
7.3.3 查看源代码 325
7.3.4 编译和运行程序 327
7.3.5 修改程序选项和纠正语法错误 328
7.3.6 使用断点和观察窗口 329
7.3.7 测算源代码执行时间 330
7.4 开发DSP/BIOS程序 331
7.4.1 创建配置文件 331
7.4.2 创建用户模板 332
7.4.3 为模块设置全局属性 333
7.4.4 通过配置工具创建对象 333
7.4.5 层次树窗口 334
7.4.6 显式DSP/BIOS插件 339
7.4.7 内核/对象窗口调试 341
7.4.8 线程调度 345
7.4.9 利用执行图查看程序的执行 346
第8章 程序调试与实例分析 348
8.1 程序调试 348
8.1.1 建立调试环境 348
8.1.2 内存映射 353
8.1.3 仿真(Simulation) 355
8.1.4 基础调试 357
8.1.5 高级调试特征 367
8.1.6 实时调试 371
8.1.7 复位芯片 375
8.2 实时分析 376
8.2.1 数据可视化 376
8.2.2 DSP/BIOS 实时分析(RTA)工具 377
8.2.3 代码覆盖范围和多事件剖析工具 379
8.3 程序调试与分析实例 379
8.3.1 打开和查看工程 380
8.3.2 查看源程序 380
8.3.3 为I/O文件增加探针断点 382
8.3.4 显示图形 383
8.3.5 执行程序和绘制图形 384
8.3.6 调节增益 385
8.3.7 观察范围外变量 386
8.3.8 使用GEL文件 388
8.3.9 调节和测试processing函数 388
8.3.10 打开和查看工程 389
8.3.11 查看源程序 390
8.3.12 修改配置文件 392
8.3.13 用Execution Graph查看任务执行情况 394
8.3.14 修改和查看load值 395
8.3.15 分析任务的统计数据 397
8.3.16 增加STS显式测试 398
8.3.17 观察显式测试统计数据 399
8.4 应用程序代码调整(ACT) 400
8.4.1 调整面板 401
8.4.2 高速缓存调整工具(Cache Tune) 403
第9章 外部存储器接口 404
9.1 概述 404
9.1.1 SDRAM接口 405
9.1.2 SBSRAM接口 411
9.1.3 异步接口 413
9.1.4 复位EMIF 419
9.1.5 HOLD接口 420
9.1.6 访问EMIF寄存器时的边界条件 421
9.1.7 时钟输出使能 421
9.2 TMS320C620x/C670x DSP的EMIF 422
9.2.1 概述 423
9.2.2 EMIF接口信号 423
9.2.3 SDRAM接口 426
9.2.4 SBSRAM接口 432
9.2.5 ROM访问模式 434
9.2.6 存储器请求优先级 434
9.3 TMS320C621x/C671x DSP的EMIF 435
9.3.1 概述 435
9.3.2 EMIF接口信号 435
9.3.3 SDRAM接口 438
9.3.4 SBSRAM接口 445
9.3.5 存储器请求优先级 446
9.4 TMS320C64x DSP的EMIF 447
9.4.1 概述 447
9.4.2 EMIF接口信号 448
9.4.3 SDRAM接口 449
9.4.4 可编程同步接口 456
9.4.5 外部设备传输(PDT) 460
9.5 TMS320C6000 DSP的EMIF寄存器 466
9.6 时钟输出使能 472
第10章 中断系统 474
10.1 TMS320C6000的中断概述 474
10.1.1 中断类型和中断信号 474
10.1.2 中断服务表(IST) 476
10.1.3 中断控制寄存器 479
10.2 中断控制 481
10.2.1 中断使能寄存器(IER) 481
10.2.2 设置和清除中断的状态(IFR﹑ISR和ICR) 482
10.2.3 中断返回服务 485
10.3 编程注意事项 486
10.3.1 单任务编程 486
10.3.2 嵌套中断 486
10.3.3 手动中断处理 487
10.3.4 陷阱 487
10.4 中断选择器与外部中断 488
10.4.1 可用中断源 488
10.4.2 中断选择寄存器 489
10.4.3 外部中断信号时序 492
10.5 中断应用实例 492
第11章 直接存储器访问(DMA) 512
11.1 概述 512
11.2 DMA控制寄存器 514
11.2.1 DMA主控制寄存器(PRICTL) 515
11.2.2 DMA从控制寄存器(SECCTL) 517
11.3 DMA的初始化和启动 519
11.3.1 初始化一个DMA块传输 519
11.3.2 DMA自动初始化 519
11.3.3 DMA信道重载寄存器 520
11.4 传输计数 521
11.5 同步传输 521
11.5.1 DMA通道事件的锁定和清除 522
11.5.2 同步控制 523
11.6 地址的产生 524
11.7 通道的分裂操作 525
11.7.1 DMA分裂操作 525
11.7.2 DMA分裂地址产生 526
11.8 DMA控制器 526
11.8.1 TMS320C6201/C6701/C6202器件的DMA结构 526
11.8.2 TMS320C6202B/C6203B/C6204/C6205器件的DMA结构 527
11.8.3 DMA操作 528
11.8.4 DMA性能 528
11.8.5 DMA的外引脚 528
11.9 DMA应用实例 528
第12章 增强型直接存储器访问(EDMA) 547
12.1 EDMA概述 547
12.2 EDMA的控制寄存器 549
12.2.1 事件寄存器(ER,ERL,ERH) 550
12.2.2 事件使能寄存器(EER,EERL,EERH) 550
12.2.3 事件清除寄存器(ECR,ECRL,ECRH) 551
12.2.4 事件设置寄存器(ESR,ESRL,ESRH) 552
12.2.5 事件编码器 553
12.3 参数RAM 553
12.4 EDMA传输参数 555
12.5 EDMA传输 556
12.6 EDMA传输的分类 558
12.6.1 一维传输 558
12.6.2 二维传输 560
12.7 单元大小与对齐 562
12.8 传输计数与地址更新 563
12.9 EDMA传输参数的链接 564
12.10 终止EDMA传输 565
12.11 EDMA中断 566
12.12 事件链接EDMA通道 567
12.12.1 TMS320C621x/C671x EDMA传输链 568
12.12.2 TMS320C64x EDMA传输链 569
12.13 EDMA性能 569
12.14 快速DMA(QDMA) 569
12.14.1 QDMA的控制 569
12.14.2 QDMA的性能 571
12.14.3 QDMA的优先级 571
12.15 传输请求递交 571
12.15.1 请求链 571
12.15.2 传输交叉开关 572
12.15.3 地址产生/传输逻辑 573
12.16 传输实例 574
12.16.1 块搬移实例 574
12.16.2 子帧提取实例 575
12.16.3 数据分类的实例 577
12.16.4 非猝发外设 578
12.17 EDMA应用实例 585
12.17.1 应用实例分析 585
12.17.2 完整的程序代码 589
第13章 多通道缓冲串口(McBSP) 616
13.1 概述 616
13.2 McBSP接口信号和控制寄存器 617
13.3 数据发送和接收 619
13.3.1 串口的复位 620
13.3.2 确定就绪状态 621
13.3.3 CPU中断 621
13.3.4 时钟和帧的配置 622
13.4 McBSP的标准操作 627
13.4.1 数据接收 627
13.4.2 数据发送 628
13.4.3 最高帧频率 628
13.5 忽略帧同步的传输 629
13.5.1 帧同步忽略与非预期的帧同步脉冲 629
13.5.2 利用帧同步忽略位的数据打包 630
13.6 串行异常的情况 631
13.6.1 接收满:RFULL 631
13.6.2 非预期的接收帧同步:RSYNCERR 632
13.6.3 数据覆盖时的发送 633
13.6.4 发送空数据 634
13.6.5 非预期的发送帧同步 635
13.7 -律/A-律压扩硬件操作 636
13.8 可编程时钟与帧同步 637
13.8.1 采样率发生器 638
13.8.2 McBSP初始化过程 640
13.9 多通道选择操作 641
13.9.1 多通道控制寄存器(MCR) 641
13.9.2 多通道选择的使能与屏蔽 644
13.9.3 增强型多通道选择模式(C64×) 647
13.9.4 DX使能器 650
13.10 SPI协议:CLKSTP 651
13.10.1 McBSP作为SPI主设备 652
13.10.2 McBSP作为SPI从设备 653
13.10.3 SPI初始化 653
13.11 McBSP引脚作为通用I/O 654
13.12 McBSP应用实例 654
第14章 主机并行接口(HPI) 672
14.1 概述 672
14.2 HPI外部接口 674
14.2.1 TMS320C620x/C670x DSP的HPI 674
14.2.2 TMS320C621x/C671x DSP的HPI 675
14.2.3 TMS320C64x DSP的HPI16或HPI32 676
14.3 HPI接口信号 677
14.3.1 数据总线 678
14.3.2 访问控制选择信号 678
14.3.3 半字识别选择信号 678
14.3.4 地址选通输入信号 679
14.3.5 字节使能信号 679
14.3.6 读/写选择信号 680
14.3.7 选通信号 680
14.3.8 就绪信号 681
14.3.9 对主机的中断 681
14.4 HPI总线访问 681
14.4.1 TMS320C620x/C670x HPI总线访问 681
14.4.2 TMS320C621x/C671x HPI总线访问 684
14.4.3 TMS320C64x HPI总线访问 686
14.5 主机访问顺序 687
14.5.1 HPIC与HPIA的初始化 688
14.5.2 固定地址模式下的HPID寄存器读访问 689
14.5.3 地址自增模式的HPID读访问 690
14.5.4 固定地址模式的HPID寄存器写访问 692
14.5.5 地址自增模式的HPID写访问 694
14.5.6 半字周期(仅适用于TMS320C620x/C670x) 696
14.5.7 HPI传输优先级队列——TMS320C621x/C671x/C64x 697
14.5.8 复位时通过HPI的存储器访问 697
14.6 HPI寄存器 697
14.6.1 HPI数据寄存器 697
14.6.2 HPI地址寄存器 698
14.6.3 HPI控制(HPIC)寄存器 698
14.6.4 HPI传输请求控制(TRCTL)寄存器——仅C64xDSP 701
14.7 主机并行接口(HPI)应用实例 702
第15章 扩展总线 722
15.1 概述 722
15.2 扩展总线信号 723
15.3 扩展总线I/O端口 724
15.3.1 异步模式 726
15.3.2 同步FIFO模式 727
15.4 扩展总线主接口操作 729
15.4.1 同步主机端口模式 730
15.4.2 异步主机端口模式 735
15.5 扩展总线仲裁 737
15.5.1 内部总线仲裁器使能 737
15.5.2 内部总线仲裁器禁止 738
15.5.3 扩展总线请求器优先级 738
15.6 通过扩展总线进行引导 739
15.7 扩展总线的寄存器 739
15.7.1 扩展总线全局控制(XBGC)寄存器 740
15.7.2 扩展总线XCE空间控制寄存器 741
15.7.3 扩展总线主机接口控制(XBHC)寄存器 742
15.7.4 扩展总线内部主设备地址(XBIMA)寄存器 743
15.7.5 扩展总线外部地址(XBEA)寄存器 743
15.7.6 扩展总线数据(XBD)寄存器 744
15.7.7 扩展总线内部从设备(XBISA)寄存器 744
第16章 外围设备互联端口(PCI) 746
16.1 外围设备互联端口(PCI)概述 746
16.2 PCI端口结构 749
16.3 TMS320C6000 PCI存储器映射 751
16.4 PCI存储器服务的特殊考虑 752
16.4.1 可预取的读操作 752
16.4.2 PCI与程序存储器之间的数据传输(仅TMS320C62x DSP) 753
16.5 从设备传输 753
16.5.1 DSP从设备写 753
16.5.2 DSP从设备读 754
16.6 主设备传输 754
16.6.1 DSP主设备写 755
16.6.2 DSP主设备读 755
16.7 复位 756
16.8 中断与状态报告 757
16.9 PCI端口的启动配置 757
16.10 EEPROM接口 758
16.10.1 由EEPROM实现PCI自动初始化 759
16.10.2 EEPROM内存映射 759
16.10.3 EEPROM校验和 760
16.10.4 DSP EEPROM接口 760
16.11 错误处理 761
16.11.1 PCI奇偶错误处理 761
16.11.2 PCI系统错误处理 762
16.11.3 PCI主设备终止协议 762
16.11.4 PCI目标设备终止协议 762
16.12 电源管理(仅适用于TMS320C62x) 762
16.12.1 PCI电源管理 762
16.12.2 PCI电源管理策略 764
16.12.3 DSP复位 765
16.13 PCI寄存器 765
16.13.1 PCI配置寄存器 766
16.13.2 I/O寄存器 769
16.13.3 内存映射寄存器 771
16.14 PCI应用实例 780
第17章 定时器 795
17.1 概述 795
17.2 定时器的寄存器 795
17.3 定时器的启动和停止 799
17.4 定时器计数 799
17.5 定时器脉冲的产生 799
17.6 控制寄存器中的边界情况 800
17.7 定时器引脚配置为通用I/O端口 801
第18章 通用输入/输出(I/O) 802
18.1 概述 802
18.2 通用输入/输出(I/O)端口的功能 803
18.3 中断与事件产生 803
18.3.1 直通模式 804
18.3.2 逻辑模式 805
18.3.3 GPINT与GP0和/或GPINT0的复用 805
18.4 中断与事件 806
18.5 通用输入/输出(I/O)端口寄存器 806
第1章 TMS320C6000系列DSP概述 1
1.1 DSP产生、特点及其应用 1
1.1.1 DSP的产生 1
1.1.2 DSP的特点 2
1.1.3 DSP的应用 3
1.2 TMS320C6000系列DSP主要特点及其应用 4
第2章 TMS320C6000系列CPU、指令系统、伪指令 6
2.1 TMS320C6000系列CPU的结构 6
2.2 TMS320C6000系列CPU的数据通路和控制 8
2.2.1 通用寄存器组 10
2.2.2 数据通路的功能单元 12
2.2.3 寄存器组交叉通路 13
2.2.4 存储器存取通路 14
2.2.5 数据地址通路 14
2.2.6 TMS320C6000控制寄存器组 14
2.2.7 TMS320C67x控制寄存器扩展 18
2.2.8 TMS320C64x控制寄存器扩展 22
2.3 TMS320C6000系列DSP的存储器 24
2.3.1 程序存储器 24
2.3.2 内部数据存储器 30
2.3.3 二级内部存储器 33
2.4 TMS320C6000系列DSP指令系统 38
2.4.1 TMS320C6000系列DSP指令集 39
2.4.2 流水线 51
2.4.3 汇编伪指令 64
第3章 程序开发基础 81
3.1 软件开发工具概述 81
3.2 C/C++编译器概述 83
3.2.1 ISO标准 83
3.2.2 输出文件 83
3.2.3 编译器接口 84
3.2.4 编译器操作 84
3.2.5 编译器工具 84
3.3 使用C/C++编译器 85
3.3.1 编译器 85
3.3.2 调用C/C++编译器 85
3.3.3 设置选项改变编译器的行为 87
3.3.4 常用选项 91
3.3.5 指定文件名 93
3.3.6 设置目录 93
3.3.7 设置默认的编译选项 94
3.4 优化代码 95
3.4.1 执行优化 95
3.4.2 优化软件流水 97
3.4.3 冗余循环 100
3.4.4 调试和剖析优化代码 101
3.4.5 基于价值的寄存器分配 101
3.4.6 别名消除 102
3.4.7 优化跳转和简化控制流 102
3.4.8 数据流优化 102
3.4.9 简化表达式 102
3.4.10 内联函数扩展 103
3.4.11 寄存器跟踪与分配 104
3.5 使用汇编优化器 105
3.5.1 增强性能的代码开发流程 105
3.5.2 线性汇编知识 106
第4章 C/C++程序开发 112
4.1 TMS320C6000系列C/C++语言实现 112
4.1.1 TMS320C6000系列C语言特点 112
4.1.2 TMS320C6000系列C++语言特点 114
4.1.3 TMS320C6000系列C/C++语言关键字 114
4.1.4 pragma伪指令 119
4.1.5 初始化静态变量和全局变量 125
4.2 运行时环境 126
4.2.1 存储器模型 126
4.2.2 对象的表示 129
4.2.3 中断处理 134
4.2.4 系统初始化 135
4.3 运行时支持函数 139
4.3.1 编译器包括的库 139
4.3.2 C语言的I/O函数 140
4.3.3 运行时支持库函数和宏的描述 148
4.4 TMS320C6000系列C/C++代码优化 151
4.4.1 C/C++语言代码的编写 151
4.4.2 编译C/C++代码 152
4.4.3 优化C代码 153
4.5 C/C++语言和汇编的混合编程 157
4.5.1 在C/C++代码中调用汇编语言模块 157
4.5.2 用内嵌函数访问汇编语言 158
4.5.3 在C/C++语言中嵌入汇编语言 159
4.5.4 在C/C++语言中访问汇编语言变量 159
第5章 线性汇编优化代码 165
5.1 汇编优化器选项与伪指令 165
5.2 编写并行代码 169
5.2.1 点积的C代码 169
5.2.2 C代码转换为线性汇编 170
5.2.3 画相关性图 171
5.2.4 非并行汇编代码与并行汇编代码 172
5.2.5 使用字访问短型数据与使用双字访问 176
5.3 软件流水 183
5.3.1 模迭代间隔编排表 185
5.3.2 使用汇编优化器产生优化循环 189
5.3.3 最终汇编 190
5.4 多周期循环的模迭代 204
5.4.1 转换C代码为线性汇编 204
5.4.2 确定最小迭代间隔 204
5.4.3 画相关性图 206
5.4.4 线性汇编资源分配 207
5.4.5 模迭代间隔编排 207
5.4.6 使用汇编优化器产生加权矢量和 214
5.4.7 最终汇编 215
5.5 循环传递路径 216
5.5.1 将C代码的内核循环转换为线性汇编 217
5.5.2 画相关性图 217
5.5.3 确定最小迭代间隔 218
5.5.4 线性汇编资源分配 220
5.5.5 模迭代间隔安排 220
5.5.6 使用汇编优化器处理IIR滤波器 221
5.5.7 最终汇编 222
5.6 循环中的if-then-else语句 222
5.6.1 if-then-else的C代码 223
5.6.2 转换C代码为线性汇编 223
5.6.3 画相关性图 224
5.6.4 确定最小迭代间隔 224
5.6.5 线性汇编资源分配 225
5.6.6 最终汇编 226
5.6.7 性能比较 226
5.7 循环展开 227
5.7.1 展开if-then-else的C代码 228
5.7.2 C代码转换为线性汇编 228
5.7.3 画相关性图 229
5.7.4 确定最小迭代间隔 230
5.7.5 线性汇编资源安排 230
5.7.6 最终汇编 231
5.8 生命太长问题 232
5.8.1 具有生命太长问题的C代码 232
5.8.2 C代码转换为线性汇编 233
5.8.3 画相关性图 234
5.8.4 确定最小迭代间隔 234
5.8.5 线性汇编资源安排 235
5.8.6 带MV指令的最后汇编 236
5.9 消除冗余取数 238
5.9.1 转换C代码为线性汇编 239
5.9.2 画相关性图 240
5.9.3 确定最小迭代间隔 241
5.9.4 线性汇编资源分配 241
5.9.5 最终汇编 242
5.10 存储体 244
5.10.1 FIR滤波器的内核循环 245
5.10.2 展开的FIR滤波器的C代码 246
5.10.3 将C代码转换为线性汇编 247
5.10.4 画相关性图 248
5.10.5 含有.mptr命令的展开后FIR线性汇编 249
5.10.6 线性汇编资源分配 250
5.10.7 确定最小迭代间隔 250
5.10.8 最终汇编 251
5.11 软件流水外循环 253
5.11.1 展开FIR滤波器的C代码 253
5.11.2 最终汇编 254
5.12 同内循环一起条件地执行外循环 257
5.12.1 展开FIR滤波器的C代码 257
5.12.2 将内核循环的C代码转换为线性汇编 258
5.12.3 将外环的C代码转换为线性汇编 258
5.12.4 展开FIR滤波器的C代码 259
5.12.5 C代码转换为线性汇编(内核循环) 260
5.12.6 确定最小迭代间隔 262
5.12.7 最终汇编 262
5.12.8 性能比较 265
5.13 通用目标文件格式 265
5.13.1 段 265
5.13.2 汇编器对段的处理 266
5.13.3 连接器对段的处理 271
第6章 汇编语言工具 273
6.1 宏语言 273
6.2 连接器描述 274
6.3 MEMORY伪指令 277
6.4 SECTIONS伪指令 279
6.4.1 SECTIONS伪指令格式 279
6.4.2 绑定 282
6.4.3 指定存储器 283
6.4.4 指定输入段 284
6.4.5 使用多个存储器区域定位 286
6.4.6 在非连续的存储器区域自动分裂输出段 286
6.4.7 把文档库一个成员分配到输出段 288
6.5 指定段的运行地址 289
6.5.1 指定加载地址和运行地址 289
6.5.2 未初始化段 290
6.5.3 使用.label伪指令引用加载地址 290
第7章 软件集成开发 296
7.1 应用软件开发流程及工具 296
7.2 集成开发环境(CCS) 298
7.2.1 CCS概述 298
7.2.2 CCS开发环境的安装和配置 299
7.2.3 文本编辑器 313
7.2.4 调试工具 317
7.2.5 自动化(项目管理) 320
7.2.6 DSP/BIOS插件 321
7.3 开发应用程序 324
7.3.1 创建工程文件 324
7.3.2 向工程添加文件 325
7.3.3 查看源代码 325
7.3.4 编译和运行程序 327
7.3.5 修改程序选项和纠正语法错误 328
7.3.6 使用断点和观察窗口 329
7.3.7 测算源代码执行时间 330
7.4 开发DSP/BIOS程序 331
7.4.1 创建配置文件 331
7.4.2 创建用户模板 332
7.4.3 为模块设置全局属性 333
7.4.4 通过配置工具创建对象 333
7.4.5 层次树窗口 334
7.4.6 显式DSP/BIOS插件 339
7.4.7 内核/对象窗口调试 341
7.4.8 线程调度 345
7.4.9 利用执行图查看程序的执行 346
第8章 程序调试与实例分析 348
8.1 程序调试 348
8.1.1 建立调试环境 348
8.1.2 内存映射 353
8.1.3 仿真(Simulation) 355
8.1.4 基础调试 357
8.1.5 高级调试特征 367
8.1.6 实时调试 371
8.1.7 复位芯片 375
8.2 实时分析 376
8.2.1 数据可视化 376
8.2.2 DSP/BIOS 实时分析(RTA)工具 377
8.2.3 代码覆盖范围和多事件剖析工具 379
8.3 程序调试与分析实例 379
8.3.1 打开和查看工程 380
8.3.2 查看源程序 380
8.3.3 为I/O文件增加探针断点 382
8.3.4 显示图形 383
8.3.5 执行程序和绘制图形 384
8.3.6 调节增益 385
8.3.7 观察范围外变量 386
8.3.8 使用GEL文件 388
8.3.9 调节和测试processing函数 388
8.3.10 打开和查看工程 389
8.3.11 查看源程序 390
8.3.12 修改配置文件 392
8.3.13 用Execution Graph查看任务执行情况 394
8.3.14 修改和查看load值 395
8.3.15 分析任务的统计数据 397
8.3.16 增加STS显式测试 398
8.3.17 观察显式测试统计数据 399
8.4 应用程序代码调整(ACT) 400
8.4.1 调整面板 401
8.4.2 高速缓存调整工具(Cache Tune) 403
第9章 外部存储器接口 404
9.1 概述 404
9.1.1 SDRAM接口 405
9.1.2 SBSRAM接口 411
9.1.3 异步接口 413
9.1.4 复位EMIF 419
9.1.5 HOLD接口 420
9.1.6 访问EMIF寄存器时的边界条件 421
9.1.7 时钟输出使能 421
9.2 TMS320C620x/C670x DSP的EMIF 422
9.2.1 概述 423
9.2.2 EMIF接口信号 423
9.2.3 SDRAM接口 426
9.2.4 SBSRAM接口 432
9.2.5 ROM访问模式 434
9.2.6 存储器请求优先级 434
9.3 TMS320C621x/C671x DSP的EMIF 435
9.3.1 概述 435
9.3.2 EMIF接口信号 435
9.3.3 SDRAM接口 438
9.3.4 SBSRAM接口 445
9.3.5 存储器请求优先级 446
9.4 TMS320C64x DSP的EMIF 447
9.4.1 概述 447
9.4.2 EMIF接口信号 448
9.4.3 SDRAM接口 449
9.4.4 可编程同步接口 456
9.4.5 外部设备传输(PDT) 460
9.5 TMS320C6000 DSP的EMIF寄存器 466
9.6 时钟输出使能 472
第10章 中断系统 474
10.1 TMS320C6000的中断概述 474
10.1.1 中断类型和中断信号 474
10.1.2 中断服务表(IST) 476
10.1.3 中断控制寄存器 479
10.2 中断控制 481
10.2.1 中断使能寄存器(IER) 481
10.2.2 设置和清除中断的状态(IFR﹑ISR和ICR) 482
10.2.3 中断返回服务 485
10.3 编程注意事项 486
10.3.1 单任务编程 486
10.3.2 嵌套中断 486
10.3.3 手动中断处理 487
10.3.4 陷阱 487
10.4 中断选择器与外部中断 488
10.4.1 可用中断源 488
10.4.2 中断选择寄存器 489
10.4.3 外部中断信号时序 492
10.5 中断应用实例 492
第11章 直接存储器访问(DMA) 512
11.1 概述 512
11.2 DMA控制寄存器 514
11.2.1 DMA主控制寄存器(PRICTL) 515
11.2.2 DMA从控制寄存器(SECCTL) 517
11.3 DMA的初始化和启动 519
11.3.1 初始化一个DMA块传输 519
11.3.2 DMA自动初始化 519
11.3.3 DMA信道重载寄存器 520
11.4 传输计数 521
11.5 同步传输 521
11.5.1 DMA通道事件的锁定和清除 522
11.5.2 同步控制 523
11.6 地址的产生 524
11.7 通道的分裂操作 525
11.7.1 DMA分裂操作 525
11.7.2 DMA分裂地址产生 526
11.8 DMA控制器 526
11.8.1 TMS320C6201/C6701/C6202器件的DMA结构 526
11.8.2 TMS320C6202B/C6203B/C6204/C6205器件的DMA结构 527
11.8.3 DMA操作 528
11.8.4 DMA性能 528
11.8.5 DMA的外引脚 528
11.9 DMA应用实例 528
第12章 增强型直接存储器访问(EDMA) 547
12.1 EDMA概述 547
12.2 EDMA的控制寄存器 549
12.2.1 事件寄存器(ER,ERL,ERH) 550
12.2.2 事件使能寄存器(EER,EERL,EERH) 550
12.2.3 事件清除寄存器(ECR,ECRL,ECRH) 551
12.2.4 事件设置寄存器(ESR,ESRL,ESRH) 552
12.2.5 事件编码器 553
12.3 参数RAM 553
12.4 EDMA传输参数 555
12.5 EDMA传输 556
12.6 EDMA传输的分类 558
12.6.1 一维传输 558
12.6.2 二维传输 560
12.7 单元大小与对齐 562
12.8 传输计数与地址更新 563
12.9 EDMA传输参数的链接 564
12.10 终止EDMA传输 565
12.11 EDMA中断 566
12.12 事件链接EDMA通道 567
12.12.1 TMS320C621x/C671x EDMA传输链 568
12.12.2 TMS320C64x EDMA传输链 569
12.13 EDMA性能 569
12.14 快速DMA(QDMA) 569
12.14.1 QDMA的控制 569
12.14.2 QDMA的性能 571
12.14.3 QDMA的优先级 571
12.15 传输请求递交 571
12.15.1 请求链 571
12.15.2 传输交叉开关 572
12.15.3 地址产生/传输逻辑 573
12.16 传输实例 574
12.16.1 块搬移实例 574
12.16.2 子帧提取实例 575
12.16.3 数据分类的实例 577
12.16.4 非猝发外设 578
12.17 EDMA应用实例 585
12.17.1 应用实例分析 585
12.17.2 完整的程序代码 589
第13章 多通道缓冲串口(McBSP) 616
13.1 概述 616
13.2 McBSP接口信号和控制寄存器 617
13.3 数据发送和接收 619
13.3.1 串口的复位 620
13.3.2 确定就绪状态 621
13.3.3 CPU中断 621
13.3.4 时钟和帧的配置 622
13.4 McBSP的标准操作 627
13.4.1 数据接收 627
13.4.2 数据发送 628
13.4.3 最高帧频率 628
13.5 忽略帧同步的传输 629
13.5.1 帧同步忽略与非预期的帧同步脉冲 629
13.5.2 利用帧同步忽略位的数据打包 630
13.6 串行异常的情况 631
13.6.1 接收满:RFULL 631
13.6.2 非预期的接收帧同步:RSYNCERR 632
13.6.3 数据覆盖时的发送 633
13.6.4 发送空数据 634
13.6.5 非预期的发送帧同步 635
13.7 -律/A-律压扩硬件操作 636
13.8 可编程时钟与帧同步 637
13.8.1 采样率发生器 638
13.8.2 McBSP初始化过程 640
13.9 多通道选择操作 641
13.9.1 多通道控制寄存器(MCR) 641
13.9.2 多通道选择的使能与屏蔽 644
13.9.3 增强型多通道选择模式(C64×) 647
13.9.4 DX使能器 650
13.10 SPI协议:CLKSTP 651
13.10.1 McBSP作为SPI主设备 652
13.10.2 McBSP作为SPI从设备 653
13.10.3 SPI初始化 653
13.11 McBSP引脚作为通用I/O 654
13.12 McBSP应用实例 654
第14章 主机并行接口(HPI) 672
14.1 概述 672
14.2 HPI外部接口 674
14.2.1 TMS320C620x/C670x DSP的HPI 674
14.2.2 TMS320C621x/C671x DSP的HPI 675
14.2.3 TMS320C64x DSP的HPI16或HPI32 676
14.3 HPI接口信号 677
14.3.1 数据总线 678
14.3.2 访问控制选择信号 678
14.3.3 半字识别选择信号 678
14.3.4 地址选通输入信号 679
14.3.5 字节使能信号 679
14.3.6 读/写选择信号 680
14.3.7 选通信号 680
14.3.8 就绪信号 681
14.3.9 对主机的中断 681
14.4 HPI总线访问 681
14.4.1 TMS320C620x/C670x HPI总线访问 681
14.4.2 TMS320C621x/C671x HPI总线访问 684
14.4.3 TMS320C64x HPI总线访问 686
14.5 主机访问顺序 687
14.5.1 HPIC与HPIA的初始化 688
14.5.2 固定地址模式下的HPID寄存器读访问 689
14.5.3 地址自增模式的HPID读访问 690
14.5.4 固定地址模式的HPID寄存器写访问 692
14.5.5 地址自增模式的HPID写访问 694
14.5.6 半字周期(仅适用于TMS320C620x/C670x) 696
14.5.7 HPI传输优先级队列——TMS320C621x/C671x/C64x 697
14.5.8 复位时通过HPI的存储器访问 697
14.6 HPI寄存器 697
14.6.1 HPI数据寄存器 697
14.6.2 HPI地址寄存器 698
14.6.3 HPI控制(HPIC)寄存器 698
14.6.4 HPI传输请求控制(TRCTL)寄存器——仅C64xDSP 701
14.7 主机并行接口(HPI)应用实例 702
第15章 扩展总线 722
15.1 概述 722
15.2 扩展总线信号 723
15.3 扩展总线I/O端口 724
15.3.1 异步模式 726
15.3.2 同步FIFO模式 727
15.4 扩展总线主接口操作 729
15.4.1 同步主机端口模式 730
15.4.2 异步主机端口模式 735
15.5 扩展总线仲裁 737
15.5.1 内部总线仲裁器使能 737
15.5.2 内部总线仲裁器禁止 738
15.5.3 扩展总线请求器优先级 738
15.6 通过扩展总线进行引导 739
15.7 扩展总线的寄存器 739
15.7.1 扩展总线全局控制(XBGC)寄存器 740
15.7.2 扩展总线XCE空间控制寄存器 741
15.7.3 扩展总线主机接口控制(XBHC)寄存器 742
15.7.4 扩展总线内部主设备地址(XBIMA)寄存器 743
15.7.5 扩展总线外部地址(XBEA)寄存器 743
15.7.6 扩展总线数据(XBD)寄存器 744
15.7.7 扩展总线内部从设备(XBISA)寄存器 744
第16章 外围设备互联端口(PCI) 746
16.1 外围设备互联端口(PCI)概述 746
16.2 PCI端口结构 749
16.3 TMS320C6000 PCI存储器映射 751
16.4 PCI存储器服务的特殊考虑 752
16.4.1 可预取的读操作 752
16.4.2 PCI与程序存储器之间的数据传输(仅TMS320C62x DSP) 753
16.5 从设备传输 753
16.5.1 DSP从设备写 753
16.5.2 DSP从设备读 754
16.6 主设备传输 754
16.6.1 DSP主设备写 755
16.6.2 DSP主设备读 755
16.7 复位 756
16.8 中断与状态报告 757
16.9 PCI端口的启动配置 757
16.10 EEPROM接口 758
16.10.1 由EEPROM实现PCI自动初始化 759
16.10.2 EEPROM内存映射 759
16.10.3 EEPROM校验和 760
16.10.4 DSP EEPROM接口 760
16.11 错误处理 761
16.11.1 PCI奇偶错误处理 761
16.11.2 PCI系统错误处理 762
16.11.3 PCI主设备终止协议 762
16.11.4 PCI目标设备终止协议 762
16.12 电源管理(仅适用于TMS320C62x) 762
16.12.1 PCI电源管理 762
16.12.2 PCI电源管理策略 764
16.12.3 DSP复位 765
16.13 PCI寄存器 765
16.13.1 PCI配置寄存器 766
16.13.2 I/O寄存器 769
16.13.3 内存映射寄存器 771
16.14 PCI应用实例 780
第17章 定时器 795
17.1 概述 795
17.2 定时器的寄存器 795
17.3 定时器的启动和停止 799
17.4 定时器计数 799
17.5 定时器脉冲的产生 799
17.6 控制寄存器中的边界情况 800
17.7 定时器引脚配置为通用I/O端口 801
第18章 通用输入/输出(I/O) 802
18.1 概述 802
18.2 通用输入/输出(I/O)端口的功能 803
18.3 中断与事件产生 803
18.3.1 直通模式 804
18.3.2 逻辑模式 805
18.3.3 GPINT与GP0和/或GPINT0的复用 805
18.4 中断与事件 806
18.5 通用输入/输出(I/O)端口寄存器 806
DSP开发宝典
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!