快速实现ARM和DSP的通信和协同工作(三)-工业控制|嵌入式设计-电子系统设计

来源:百度文库 编辑:神马文学网 时间:2024/07/05 20:45:23
视频监控子系统是现代智能机器人设计中必不可少的一个部分,它需要采用DSP并根据某种算法对摄入的图像进行处理和分析,它也需要采用ARM处理器对DSP进行协同管理和控制工作,目前开发工程师碰到的一个最大设计挑战是:如何最高效率地实现ARM和DSP或协处理器的通信和协同工作?本文将详细为您介绍解决这一技术挑战的解决方案和实现指南。
通过第二部分的介绍,我们知道了如何走完Codec Engine入门的第一步和第二步,下面我们将告诉你如何走完Codec Engine入门的第三步。
4. Codec Engine入门第三步
开发ARM+DSP平台需要三类工程师:ARM应用程序工程师、DSP算法工程师和DSP系统工程师。而开发ARM+协处理器平台只需要ARM应用程序工程师。下面就让我们针对这三类工程师做分别介绍。如果您使用的是TI或TI第三方的编解码算法,就不需要关注DSP算法工程师的部分。如果使用ARM+协处理器平台,就只需关心ARM应用工程师的部分。
4.1 DSP算法工程师应该如何着手?
这里我们不讨论如何开发DSP算法,只讨论DSP算法工程师怎样让自己的算法可以被ARM通过Codec Engine调用。(参考http://www.ti.com/litv/pdf/sprued6c,这个文档会讲到codec package及相关的.xs和.xdc文件,Codec Engine1.20及以上版本的用户可以先不细究这些内容,后面会介绍工具帮您自动生成这些文件。)
1)熟悉xDAIS和xDM标准。
xDM只是xDAIS的扩展,因此,需要先了解xDAIS。在xDAIS 软件包根目录下的发布说明文档里,可以很快找到关于xDAIS和xDM的文档链接。http://focus.ti.com/lit/ug/spruec8b/spruec8b.pdf
在xDAIS安装路径下的examples/ti/xdais/dm/examples/g711有一个g711_sun_internal.c,这个算法不符合xDAIS标准。在同一个路径下的g711dec_sun_ialg.c (decoder)和g711enc_sun_ialg.c (encoder)是封装成符合xDM标准之后的编解码算法。可以通过这个例子学习和了解如何把自己算法封装成符合xDM标准的算法。
xDAIS 6.10及其以后的版本,包含了一个工具QualiTI,可以检查您的DSP算法是否满足xDAIS标准(但不会检查是否满足xDM)。具体请参考:http://tiexpressdsp.com/wiki/index.php?title=QualiTI_XDAIS_Compliance_Tool
2)熟悉Framework Components。
Framework Components主要包括两个模块DSKT2和DMAN3,它们分别负责DSP侧的memory 和EDMA资源管理。DSP算法使用的memory必须是先向DSKT2提出申请并由DSKT2分配得到的。同样DSP算法使用的EDMA通道也是向DMAN3申请并由DMAN3分配得到的。而关于QDMA的操作,是通过ACPY3这个模块实现的。这样的好处是很容易对DSP侧不同的算法做整合,不同的算法之间不用担心资源(Memory和EDMA)的冲突问题。
在Framework Components 软件包根目录下的发布说明文档里,可以很快找到相关文档的链接。在Framework Components安装路径下packages\ti\sdo\fc\dman3\examples有一个Fast Copy的例子,可以帮您理解如何基于Framework Components的ACPY3模块实现QDMA的操作。
另外,有些用户DSP侧的算法比较简单,在确保不和ARM侧EDMA资源冲突的前提下在算法里直接操作EDMA不使用DMAN3也是可以的。这样做的弊端是和其它算法做整合时会遇到资源使用冲突的问题。
4.2 DSP系统工程师应该如何着手?
通常DSP算法工程师都会把自己的符合xDM标准算法编成一个.lib文件(或 .a6?P),供DSP系统工程师调用。DSP系统工程师最终build出一个DSP Server(也就是DSP的可执行程序.x6?P,和CCS下编译生成的.out类似)。(参考http://focus.ti.com/lit/ug/sprued5b/sprued5b.pdf,这个文档会讲到.xdc和.bld等文件,Codec Engine1.20及以上版本的用户可以先不细究,后面介绍工具帮您自动生成这些文件。)
1)如果现在有一个.lib文件(或 .a6?P)(算法必须符合xDM标准),如何生成自己的DSP Server呢?下面URL有详细的关于RTSC Codec and Server Package Wizard工具介绍,教您如何把一个.lib文件封装成RTSC Codec 包和RTSC DSP Server包,并最终build出DSP的可执行程序.x6?P。http://wiki.davincidsp.com/index.php?title=RTSC_Codec_And_Server_Package_Wizards http://wiki.davincidsp.com/index.php?title=I_just_want_my_video_codec_to_work_with_the_DVSDK
2)如果您使用的是Codec Engine 1.20以前的版本,请参考Codec Engine安装路径下examples/servers/video_copy这个例子。这时就需要搞清楚sprued6c.pdf和sprued5b.pdf中提到的.xdc和.xs等文件的功能,也可以在video_copy中的相关文件的基础上修改手动创建出自己的RTSC Codec包和RTSC DSP server包。
3)创建好RTSC Codec 和RTSC DSP Server包之后,就是如何build出.x6?P的问题了。点击图2所示的Examples,就可以找到build Codec Engine例子的说明文档的链接。按照这个文档做一遍后,就可以对如何build Codec Server有一个清楚的了解。其中关键是修改user.bld和xdcpaths.mak文件,设置Codec Engine依赖的其它软件模块和工具的正确路径。
4)如果自己的硬件DDR2大小和例子中的256Mbytes不一致,需要修改DSP的.tcf文件和其他配置。还有些工程师不清楚如何分配memory及如何决定具体段,如:DDRALGHEAP和DDR的大小,以及如何配置./loadmodules里的参数都请参考: http://wiki.davincidsp.com/index.php?title=Changing_the_DVEVM_memory_map。
4.3 ARM应用程序工程师应该如何着手?
ARM应用工程师需要调用Codec Engine的VISA API,最终编出ARM侧的可执行程序,因此,必须根据自己的应用学习相关的VISA API、如何创建应用侧Codec Engine的package及配置文件。(参考http://focus.ti.com/lit/ug/sprue67d/sprue67d.pdf,这个文档也涉及到如何调试Codec Engine的内容)。
1)了解ARM应用程序调用Codec Engine的流程、VISA API和其他Codec Engine API。可以参考Codec Engine安装路径下examples/apps/video_copy的例子(较简单)或者DVSDK安装路径下demos里的encode/decode/encodedecode例子(较复杂)。http://wiki.davincidsp.com/index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer
2)了解ceapp.cfg文件。sprue67d.pdf有相关介绍,可以先读懂examples/apps/video_copy/ceapp.cfg。
3)用4.2 3)中提到的方法学习如何build ARM侧的可执行程序。
4)如何在多线程中调用codec engine,参考:http://wiki.davincidsp.com/index.php?title=Multiple_Threads_using_Codec_Engine_Handle
5)还可以参考以下三个文档了解更多TI demo的ARM应用程序的结构、线程调度等具体的问题。
EncodeDecode Demo for theDaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraah0a.htm, 8 KB) 27 Jun 2007 Abstract
Encode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraa96a.htm, 8 KB) 27 Jun 2007 Abstract
Decode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraag9a.htm, 8 KB) 27 Jun 2007 Abstract
现在我们走完了Codec Engine入门的第三步,在最后的第四部分的介绍中,我们将告诉你哪些问题是你在实际使用中常碰到的,以及怎么去解决它,敬请留意。
作者:崔晶
通用DSP 技术应用工程师
德州仪器半导体技术(上海)有限公司
快速实现ARM和DSP的通信和协同工作(三)-工业控制|嵌入式设计-电子系统设计 快速实现ARM和DSP的通信和协同工作(二)-工业控制|嵌入式设计-电子系统设计 快速实现ARM和DSP的通信和协同工作(四)-工业控制|嵌入式设计-电子系统设计 双核处理器ARM+DSP如何实现协同工作 - 嵌入式ARM-Wince开发的blog | ... 一个典型的嵌入式系统设计和实现 基于双DSP的运动目标智能跟踪系统的设计和实现 一个牛人在ARM实现嵌入式系统的过程 3年以上工作经验的工程师的中长期规划 - 单位招聘 - 中国电子顶级开发网 国内最顶级的开发者论坛---FPGA论坛|ASIC论坛|DSP论坛|ARM论坛|单片机论坛|MCU论坛|电子电路|嵌入式论坛|开发设计论坛 - Powered by Discuz! 基于DSP的FIR滤波器的设计与实现(2) 基于DSP和IPM的变频调速系统的硬件设计 基于DSP的实时图像数据采集系统设计 ARM、DSP、FPGA的技术特点和区别是什么 --转自电子园 基于ARM的数字视频监控系统的设计 嵌入式Linux下NAND存储系统的设计与实现hxy 实时DSP系统设计开发流程 51Testing软件测试网:基于嵌入式WEB的网络视频监控系统的设计与实现 初学嵌入式开发ARM的学习方法 - 硬件/嵌入开发 / 硬件设计 基于DSP和规则采样法的三相SPWM波形发生器的实现--嵌入式技术网 基于Qt的嵌入式媒体播放器系统的设计。。。。。 基于DM9000AE的S3C2440嵌入式系统的以太网接口设计 基于DM9000AE的S3C2440嵌入式系统的以太网接口设计 Linux集群系统的设计实现介绍 桌面日历系统的设计与实现 嵌入式系统设计中查找内存丢失的策略