第1章 达芬奇SoC硬件结构 1
1.1 ARM子系统 2
1.1.1概述 2
1.1.2存储器组织 4
1.2 DSP子系统 4
1.2.1概述 4
1.2.2存储器组织 5
1.2.3 DSP数据通路与控制 6
1.2.4 DSP中断控制器 8
1.2.5 DSP断电控制器 9
1.2.6 DSP带宽管理 9
1.2.7 DSP存储器保护机制 10
1.3视频处理子系统(VPSS) 10
1.3.1视频前端 10
1.3.2视频后端 11
1.4系统控制模块 11
1.4.1 CPLD逻辑控制模块 11
1.4.2复位电路 12
1.5电源管理 12
1.6外部存储接口 13
1.6.1 DDR2存储器 13
1.6.2 NAND Flash 13
1.7外围控制模块 14
1.7.1 I2C扩展GPIO模块 15
1.7.2网络接口模块 15
1.7.3 USB接口电路 16
1.8音视频模块 17
1.8.1音频编解码模块 17
1.8.2视频编解码模块 18
1.9 DM6446总线共享 18
1.9.1 DM SoC交换中心资源 18
1.9.2 EDMA3控制器 19
1.9.3 EDMA3数据结构 19
1.9.4 EDMA3参数RAM 20
1.9.5连接(Linking)和链接(Chaining) 21
第2章DM6446 DSP指令集与程序设计 22
2.1 TMS320DM6446 DSP指令集 22
2.1.1 Load/Store类指令 22
2.1.2加减法指令 23
2.1.3乘法指令 23
2.1.4逻辑运算指令 24
2.1.5移位指令 24
2.1.6位操作指令 24
2.1.7比较及判别类指令 25
2.1.8搬移指令 25
2.1.9域乘法 26
2.1.10软件流水相关指令 26
2.1.11程序转移类指令 26
2.2用定点DSP指令实现浮点除法 27
2.2.1 DM6446浮点数表示 27
2.2.2确定小数点的位置 28
2.2.3浮点数与定点数的转换 28
2.2.4实现定点DSP除法 29
2.2.5牛顿迭代法 29
2.2.6移位相减实现浮点除法 30
2.2.7移位相减法的核心代码 31
2.2.8移位减法实现双精度除法 33
2.2.9两种方法的比较 33
2.3 DSP线性汇编 34
2.3.1线性汇编概述 34
2.3.2优化SATD函数 35
2.3.3用线性汇编实现SATD 36
2.4其他优化方法 38
2.4.1代码编写注意事项 38
2.4.2内联函数 39
2.4.3优化编译选项 39
2.4.4存储器的配置优化 40
2.4.5 Cache的性能优化 40
第3章DVEVM使用指南 41
3.1概述 41
3.2硬件设置 42
3.3运行演示程序 44
3.3.1默认的自举配置 44
3.3.2开始演示程序 44
3.3.3运行standalone demos 45
3.3.4通过命令行运行demos 47
3.3.5运行网络demo 47
3.4改变视频输入/输出方式 48
3.4.1使用S-端子视频输入 48
3.4.2使用S-端子视频输出 48
3.4.3使用分量视频输出 49
3.5将demo应用放进第三方菜单 49
3.6 DVEVM软件设置 50
3.6.1系统中的命令提示符 51
3.6.2准备并安装DVEVM软件 51
3.6.3为目标机访问输出一个共享文件系统 53
3.6.4测试共享文件系统 54
3.6.5使用PAL视频制式的启动配置 54
3.6.6设置TFTP服务器 55
3.7改变引导方法 55
3.7.1使用EVM硬盘文件系统并从Flash启动内核 56
3.7.2通过TFTP内核引导并使用开发板硬盘文件系统 56
3.7.3从Flash引导启动Linux使用NFS文件系统 57
3.7.4通过TFTP引导内核使用NFS文件系统 57
3.8设置build开发环境 58
3.8.1写一个简单程序并在DVEVM上运行 58
3.8.2 build一个新的Linux内核 58
3.8.3启动新的Linux内核 60
3.9恢复和更新EVM硬盘驱动 60
3.9.1系统设置 60
3.9.2为DVEVM挂载根文件系统配置NFS 61
3.9.3恢复DVEVM硬盘驱动器 62
第4章DVEVM软件设计 65
4.1 TMS320DM6446的初始化 65
4.2外围设备程序设计 67
4.2.1视频模块程序设计 67
4.2.2音频模块程序设计 68
4.2.3 Flash程序设计 68
4.2.4 USB程序设计 72
4.2.5以太网口程序设计 73
4.3应用程序设计 75
4.3.1 DVEVM音视频编/解码算法示例 76
4.3.2算法实现线程 76
第5章 嵌入式操作系统引导与配置 80
5.1 Bootloader概述 80
5.1.1 Bootloader的概念 80
5.1.2 DVEVM启动机制 81
5.1.3 Bootloader固件程序设计 81
5.1.4实现NOR Flash启动 86
5.1.5 AIROM启动模式 88
5.2实现多种下载接口的Bootloader 95
5.2.1实现下载接口 95
5.2.2设置内核启动参数及调用内核 107
5.3 MontaVista Linux及驱动的配置和编译 107
5.3.1内核体系结构及DM6446驱动程序 108
5.3.2构建一个嵌入式Linux内核示例 111
5.3.3 DSP/BIOSTM实时操作系统简介 117
5.3.4 DM644x中DSP的启动(Boot)模式 117
第6章DVSDK软件开发套件 119
6.1 DVSDK开发包 119
6.1.1编码器和解码器 120
6.1.2软件体系结构 120
6.2 DVSDK安装与设置 120
6.2.1命令提示符 121
6.2.2安装 121
6.2.3设置build开发环境 122
6.2.4为目标机重新编译DVSDK软件 122
6.3测试build环境 123
6.4为DSP端开发使用DVSDK软件 123
6.4.1重新build DSP/BIOS LINK 124
6.4.2使用数字视频测试工具(DVTB) 125
6.4.3安装和运行SoC分析器 125
6.5在Windows主机环境安装组件 126
6.6 RTSC编解码器和服务器包向导 127
6.6.1介绍 127
6.6.2下载 127
6.6.3前提条件 127
6.6.4向导说明 128
6.6.5其他向导说明链接 136
6.6.6 XDAIS编解码器 136
6.7编解码引擎示例 137
6.7.1目录结构 137
6.7.2 build示例 138
6.7.3运行video_copy应用示例 140
6.7.4内部存储器映射 141
6.7.5外部存储器映射 142
第7章 达芬奇框架 143
7.1中间件 143
7.2主流中间件技术平台 145
7.2.1 OMG的CORBA 145
7.2.2 Sun的J2EE 145
7.2.3微软的DNA 2000 146
7.3中间件技术未来发展 147
7.3.1网格技术 147
7.3.2移动计算 147
7.3.3服务质量 148
7.3.4技术发展对中间件的影响 148
7.4嵌入式中间件 148
7.4.1若干概念 148
7.4.2嵌入式系统的中间件 151
7.5嵌入式中间件示例1: DVEVM的远程调试 152
7.5.1 DDD远程调试框架 153
7.5.2 GDB RSP协议 154
7.5.3实现远程调试 155
7.5.4在DVEVM上的示例 163
7.6嵌入式中间件示例2: Codec框架 166
7.6.1什么是Codec(编解码器)引擎 167
7.6.2为什么使用Codec框架 167
7.6.3 Codec引擎的地位 168
7.6.4用户的任务 169
7.6.5获取更多信息 170
第8章 装配Codec引擎 171
8.1安装和设置 171
8.1.1安装Codec引擎 171
8.1.2包和库 171
8.1.3目录结构 172
8.2应用示例 172
8.2.1概览 172
8.2.2 build应用程序 173
8.2.3运行应用程序 173
8.3使用Codec引擎APIs 173
8.3.1概览 173
8.3.2核引擎APIs 174
8.3.3 VISA类:视频,图像,话音,音频 175
8.3.4 DSP Memory 178
8.3.5 DSP实时性问题 181
8.3.6软件跟踪(Trace) 181
8.4综合(Integratng)一个引擎 186
8.4.1概览 186
8.4.2引擎配置语法 187
第9章 创建Codec Server 189
9.1概述 189
9.1.1 Codec Server 189
9.1.2与Codec Server结合的算法 190
9.1.3示例保存目录 190
9.1.4 XDC配置工具 190
9.2 XDC 190
9.2.1 XDC工具要解决什么问题 191
9.2.2 XDC如何解决问题 192
9.2.3由浅入深地利用XDC 195
9.2.4 XDC工具小结 195
9.3创建Codec Server 195
9.3.1创建包 196
9.3.2编辑包定义文件 196
9.3.3编辑Codec Server配置脚本 196
9.3.4编辑DSP/BIOS配置脚本 198
9.3.5编辑build脚本 200
9.3.6编辑链接命令文件 200
9.3.7编辑main.c 200
9.3.8编辑makefile 200
9.4交付一个Codec Server 200
第10章 编译Codec算法 201
10.1开始 201
10.1.1 XDCPATH的环境变量 201
10.1.2编辑user.bld 202
10.2 build一个包 203
10.3产生一个交付包 203
10.4开发一个XDM Codec 204
10.4.1什么是Codec包 204
10.4.2创建包文件 205
10.5支持非XDM的算法 207
10.5.1任务 207
10.5.2角色和互动 208
10.5.3核心算法接口需求 208
10.5.4创建Codec引擎扩展 209
10.5.5设计一个新的API 209
10.6开发Stubs和Sketetons 211
10.6.1开发编解码器引擎Stubs 211
10.6.2为CE扩展开发Skeletons 214
10.6.3 build存根和骨架到框架扩展 216
10.7打包和配置核心算法 217
10.8非XDM存根和骨架示例:SCALE 218
第11章 基于DVEVM的SIP视频监控系统 220
11.1系统结构 220
11.2达芬奇子系统实现 222
11.2.1 RTP/RTCP实时数据传输模块的实现 225
11.2.2 SIP信令控制模块的实现 228
11.3 PC子系统实现 239
11.3.1 DirectShow简介 239
11.3.2软件实现 239
第12章DaVinci实验例程 241
实验一 开发平台 241
实验二 使用XDC build工具 256
实验三 设备驱动 270
实验四 视频驱动 278
实验五 多线程应用 287
实验六 本地Codes:引擎使用 297
实验七 本地Codes: build引擎 304
实验八 远程Codes:使用DSP服务器 311
实验九 远程Codes: build一个DSP服务器 316
实验十XDAIS和XDM创作 330
实验十一Codec使用DMA 352
附录 本书中用到的术语及缩写对照表 368
附图 373
参考文献 378