完整的中文_第1页
完整的中文_第2页
完整的中文_第3页
完整的中文_第4页
完整的中文_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于DSP的音频处理器这个应用例子,我们将了解个人计算机主机内部音频效果处理器的发展。尽管我们选用的的应用很简单,它却是研究大量DSP系统应用设计与实现的重要手段。就本例的应用开发平台而言,我们选择C6xxx EVM板,因为它不仅集合了前面几个章节中讨论的内容,而且提供了本例音频效果处理器的理想模型。C6xxx EVM包含了必需的CD品质立体音频编/解码器,一个快速的DSP处理器以及一个PCI界面,通过这个接口,可以实时控制音频效果。基本配置下图所示。1.设计目标这个设计实例可分为三部分,(1)硬件平台设计,(2)应用算法设计,即音频处理计算法,(3)主机软件设计。正如上面所提,硬件平台是TI的C6xxxEVM板。这是一个明智的选择,因为它包含了系统应用所需的主要系统部件,并且,TI免费提供这一模板的设计。因而这将成为开发特定系统平台的良好开端。此处介绍的音频效果处理器能有效使用时间延续以及可调性时间延续功能来达到简单的样本混响,截边以及和声效果。输出调制器的应用使得输出幅度平坦。所有这些效果都是由主机软件界面来控制的。主机软件通过PCI总线进行通信,并控制实时DSP算法。主机软件也也能在开始阶段对DSP进行初始化,下载必要的音频处理算法,因而并不需要EPROM进行引导。当DSP卡被初始化后,它就可以自主运行,几乎不许要对主机输入。作为主机软件的一部分,效果控制界面提供对对效果算法的异步控制。这使得调制深度,调制速率,延时长度可以实时变化,而不必停止或中断原算法。在下面的章节中,我们将从硬件平台着手,依次研究设计的各个部分。图10-11显示了该应用的总结,不同软件的组成部分和接口。2.硬件平台作为此项应用的基本平台,C6xxxEVM开发平台在第2.4章节中有详细叙述。该平台使用的编/解码器接口在第4.4章节中有详细介绍。有关直接存储器存取传输,主机端口和高速串行端口部分在第4章中也有介绍。因而,我们没有必要再在本章中赘述这部分内容。图10-12,完整描绘了TI的C6xxxEVM板,包括C6xxxDSP,编/解码器,存储器部分,主机端口接口和PCI总线。 C6xxxEVM板上的PCI接口具有即插即用的功能,并且能支持高速数据传输的主副模式:即PCI总线通信初始化可由目标或主机方来驱动。PCI的即插即用特性管理着寻找地址以及中断分配的各个方面,从而保证不会出现资源冲突的情况。 在计算机启动阶段,具有PCI接口的器件能自动由计算机的BIOS来配置。这意味着插入PCI总线的一块C6xxxEVM卡将具有动态分配的个人计算机记忆存储地址和中断线。从编程者的角度来看,为了简便起见,TI提供了软件驱动器来支持EVM板。驱动程序是用来查询EVM板的PCI控制器,并获得该板相关的存储地址和中断分配信息。这是非常有用的,以为它使得用户只需插卡和启动计算机。EVM的驱动器自动处理用户软件与EVM硬件实体间的接口问题,并考虑分配中断与存储器配置。标准PCI总线能够以132MB/S数据速率进行突发的通信。同样,在主动模式下,每块独立的PCI卡能够在很短的时间内完全控制总线,从而完全达到突发的传输速率。这就意味着个人计算机和PCI卡双方都不会落后。当然,也可以在典型系统中使用多个外部PCI器件,所有器件以时分复用方式工作。所以,连续的传输率将低于132Mhz的速率。为了使任何系统中的传输速率最大化,最好使用突发模式传输,而不是重复单个字的传输。因为这样可以减少总线请求和请求允许的总耗费。基于工业标准的应用的专用集成电路,ASIC,C6xxx EVM实现了一个标准的PCI。使用标准PCI器件的一个优势是所有的数据传输都是由该器件自行管理的,从而保证了C6xxx EVM器件本身不需要处理时间的消耗。PCI和ASIC以及与C6xxx DSP接口的图示如10-13所示:C6xxx EVM提供的PCI允许以下三种方式与C6xxx DSP通信。第一种方法是使用一组先进先出列队和邮箱寄存器,每一方可以通过这些来传输数据。当主机方填满了邮箱,DSP处将会相应产生一个中断信号,从而引发中断服务线ISR来收集邮箱数据。同样如果DSP方填满了回复邮箱,并在主机方产生一中断信号,就触发了主机数据收集的中断程序。第二种通信方式是应用JTAG接口。这一接口可对DSP的所有运算进行检测和实时控制。一般而言,这个接口多为软件和硬件调试所使用。CCS在C6xxx EVM上调试软件时,也使用JTAG界面。PCI的特殊应用集成电路的第三种界面是HPI。这个接口允许异步导入DSP中的任意内存或外存空间。HPI使用DMA来访问DSP的可寻址可存储空间。由于HPI 使用DMA 来传输数据,所以当数据在传输过程中,它对核心的实时处理能力的影响很小或几乎没有。HPI 是最佳的用于音频效果处理的接口,并且它将从主机软件控制面板的控制信息传送到DSP 算法中去。 C6xxx EVM HPI 在传输中使用小恩迪安数据格式,即首先传输的半个字的最低位的字组。也就是说,数据必须使用低字/高字的传输次序来传送。 这本身与PCI总线和个人计算机相兼容。EVM PCI 接口以及支持的软件允许以字节,字,双字的方式访问DSP的任何可寻址存储器空间。HPI 的自动增量功能也支持顺序数据传输。这样可以快速传输一大块数据,而不需要在单个字的传输上表明目的地址。这种顺序地址传输模式使得PCI总线真正以群发模式工作。同时,它的数据传输速率接近PCI总线的最大数据传输速率。 我们已经说过,传输速率不可能达到全速132MB/s数据速率。 C6xxx EVM 板上的立体声CODEC是Crystal Semiconductors 生产的标准16位多媒体器件。 其音频数据传输中使用串行接口,在接口控制部分采用8比特并行总线。CODEC控制寄存器影射至DSP的存储空间,因而它的配制比较简单。 同样,由于这些寄存器映射到DSP的存储空间,通过PCI的主机断口,可以在主机上显示出来。 这种CODEC中,缓冲的串行端口McBSP 以及DMA传输的工作方式在第4.4章节中已有详述。3.DSP软件标准的音频框架音频效果应用使用标准软件框架,它能使DSP 和CODEC初始化,获得并处理音频样本。该框架作为C6xxx EVM 的一个软件范例, 在TI 的文件SPRA598中有详细说明。由于这里仅作简单介绍,建议感兴趣的读者参考该文件,以便更深入了解音频软件的框架。 该软件框架广泛使用DSP/BIOS任务管理软件,这部分在第2章中有过介绍。 音频处理的软件框架实际上是个能被成功编译和直接执行的核心的应用。该框架将音频样本收集到一个叫做rx _ pip 的样本缓冲器中。当rx _ pip中已经收集了128个样本时,一个叫做audio (.)的用户程序被执行。就如上文所说的那样,不做任何变动,用户程序audio (.)简单地将rx _ pip中的样本复制到输出样本缓冲器tx _ pip中,从而获得一个简单的 audio_ thro应用。这个框架继续使用这种方式工作直到DSP停止或重新启动。为了使用音频软件的框架,用户必须将所需的样本处理任务置于audio (.)函数中,取代从rx _ pip到tx _ pip的拷贝任务。 用户样本处理任务必须从rx _ pip缓冲区提取音频样本,对其进行处理并将处理好的样本置于tx _ pip缓冲器中,准备传回CODEC。 当然,在下一列数据到达之前,用户启动程序必须结束对128个样本全部进行处理。顺便提下,缺省的采样速率为48kHz, 数据格式为16比特立体声。图10-15 对音频框架编码的基本运算有详细说明。由于音频软件框架是一个DSP/BIOS应用装置,比较容易启动。 所有的数据换冲器(即管道)和软件/硬件中断都由图10-16 所示DSP/BIOS配置工具使用完成。该培植工具是个简单易用的图形用户界面(GUI),能辅助用户,将实时应用中可能产生的各种事件连接到某个软件程序,这个程序负责对各个具体事件的处理。在本应用装置中,事件管理器完成数据在McBSP,串行端口,rx _ pip 与tx _ pip的缓冲器之间的传输。 这种硬件中断是在McBSP准备好接受新数据时触发的。其他的事件管理器是由诸如rx _ pip缓冲器满而tx _ pip缓冲器空这些相关软件来触发的。我们所指的事件,是能够触发并请求中断服务程序(即一个事件管理器)的硬件和软件中断。图10-17 是用TI CCS开发一个DSP音频应用软件时的屏幕快照。其中,数据存储器视图能够在程序运行中调整不同音频效果的控制参数。可以在屏幕中的audio.c中看到效果处理函数的C语言程序。4.DSP软件音频效果算法图10-18 概括地给出了应用中使用的效果处理法。这种算法是在第8章提出的思想上发展起来的,主要用于基本边缘提取,和声,混响和立体声扫描调制效果。在这里我们可以考虑其他软件方法的实现。关于音频效果算法(1)自动音场转移(Autopanner) 自动音场转移效果是用DSP器件实现的最简单的音效之一。基本上,一个音场转移控制器将一个单声道信号置于左右喇叭之间的某处。自动音场转移做的是完全一样的事情,但位置却反复地在一对立体声喇叭之间变化。音场转移是用基于软件的低频信号发生器控制的,它驱动一个增益控制模块的输入,见图3-1图3-1简单的自动音场转移效果软件形式的增益控制模块很简单,只需要讲进来的音频样值盒当前的增益系数相乘就可以了。增益系数是由信号发生器产生的。信号发生器也相当简单。如果用的是查找表法,需要用两个独立的指针,一个用来控制左声道,另一个用来控制右声道。如果要音频信号的电平在收听范围内保持恒定但同时也要使用面板效果,则信号发生器的波形必须基于一条对数曲线。或者,可以选择简单的正弦波形或斜升波形来产生切换效果,但是信号的电平要被调制。如果音场转移控制信号是基于低频正弦波的,那么左右两个声道的激励在查找表中必须要有90度的间隔。这样可以保证能平滑地往返扫过喇叭而音频信号不会同时消失。如果要求接收地信号幅度保持恒定,则对数形式的音场转移波形必须保证中间位置同时处在左右两个声道的-3dB处,见图3-2所示图3-2 保证接收幅度恒定的面板波形图3-2的图表说明了用以驱动左右两个声道的波形。显然两个声道可以使用相同的查找表,但是查找表中的指引位置是不同的,而且总是朝相反的方向移动。只要查找表的精度是够高,由面板位置调制造成的拉链噪声就听不到。通常长为128个采样点的查找表就足够了。在光盘盒DSPStore上可以找到在PC机上可执行的自动面板程序以及基于C6xxx的版本。(2)人工混响通常,在录音棚内录制的作品缺少空间感,这是由于大多数录音棚的声学结构都是被设计成无反射的。这么做是故意的,因为我们可以在录音完成之后在通过电子手段人为地加上声学特性,这使得录音工程师对最后录制完成地素材有更好地控制。使用人工混响处理器,录音地环境可以模拟小房间、大厅和教堂等等。原先模拟混响的做法是在隔音室内悬挂大面积的金属板,上面再装上传感器。音频信号进入输入传感器,同时在金属板间产生激荡。金属板的其他地方安装了一组接受传感器,用以接收反射信号。还有一种叫做“延迟线”的方法,就是改为悬挂弹簧片。虽然这种物理方法能取得混响效果,但是听起来不自然,而且录音工程师很难对混响的特性进行控制。现在的方法都使用DSP技术,而且已经发明了很多实现途径,所以已经能够对音频信号的反射特性进行精确的控制。在详细考虑如何设计基于DSP的混响模拟器之前,研究一下音场的特性是很值得的。当声源在封闭空间内发出声波后,声波会在空间的边界表面上反射多次,最后声压一直衰减到听不见。封闭空间的大小和边界表面的“质量”都会影响声音衰减的时间。假设两个房间的素材是一样的,则大房间的衰减时间比小房间长。声波在空间内的来回反射,反射时间的标准估算方法被称作RT60。这种方法是由W.C.Sabine发明的,和空间的大小以及声压衰减60dB所需的时间有关。早先提到的“质量”指的是空间内材料吸收声音的水平。硬质材料吸收得少,反射得多;柔软得材料吸收得多,明显地削弱反射特性。同时需要注意地是大多数材料都有各自地频率响应,有些吸收高频反射低频,有些却正相反。使用地材料、空间的大小和音场的形状都对音场的特性有影响。当音场内的声源发射出声波之后,声波到达收听者的方式基本上是可以预测的。见图图3-3和图图3-4。首先,有一部分声波是直接传播到收听者的,也就是没有经过墙壁的表面反射,然后到达的是从最近表面反射的声波。这些声波被称作早反射,通常在50ms左右。早反射由人的大脑进行综合后并不产生单独的回声,但是决不能低估了它们的重要性。它们是大脑判断收听空间大小的重要依据。通过延缓早反射到达的时间,人工混响处理器可以使虚拟的环境听起来比真实的大。相对于整个反射过程,早反射的时间在决定音场的大小上要重要得多,反射时间是空间和吸收率得函数,而早反射开始时间则取决于到最近表面得距离。在早反射到达之后有一段“多次反射” :声音通过很多反射表面之后再到达收听者。图3-3 收听者听到直接传播、早反射和多次反射的示意图图3-4 由直接传播、早反射和多次反射组成的混响简单回声模拟器如图3-5所示,环形缓冲区可以用来模拟简单得回声。将接收到得采样信号和经过延迟得采样信号混合之后就能在处理器得输出端产生一个回声,当然,先决条件是延迟要大于40ms,也就是超过大脑最小的综合时间。图3-5 简单回声模拟器图3-5的结构其实就是一个FIR滤波器,可以用一个简单的差分方程来描述其响应:Yn=xn+axn-R |a|1该滤波器的冲激响应和幅度响应分别见图3-6和图3-7。从声学角度看,这种结构模拟了直接传播的声波和之后跟着的经过一次反射的声波。延迟R表示声波从反射表面反弹的时间。系数a控制吸收的有效电平:如果a等于1,则反射表面不吸收声能,如果a等于0,则模拟的表面完全吸收声能。图3-6 简单回声发生器:冲激响应图3-7 简单回声发生器:幅度响应虽然这种回声生成器的实现方法非常有用,但它的复杂度远远比不上实际的回声模拟器。(3)时间延迟效应颤音(vibrato)、和声(chorus)及回旋(flanging)颤音、合声及回旋这些音效非常依赖于音频样值的延迟。对于反射处理器,用DSP器件就意味着使用环形缓冲区。这些效果的差异在于延迟的长度由某种低频信号发生器调制。这三种效应的前馈、反馈和延迟时间均不相同。颤音效果就是由音乐信号音高进行波动调制形成的。可以通过正弦调制延迟线的长度来实现,见图3-8。图3-8的模型也已经输入了Simulink。而且经台式PC实话测试过。图3-8 简单颤音效果处理器框图要注意的是:这些效果的延迟长度必须是线性调制的,也就是说调制不会仅仅是延迟长度的整数变化。在图3-8中要求输出抽头在额定延迟上平滑移动位置。因为必须使用线性调制,所以必须使用内插法来估计在存储的真实样值之间的采样值,见图3-9。有几种利用特殊滤波器计算所需中间结果的内插方法可供使用。一定要记住图3-9中的延迟是一个环形缓冲区,输入的新样值以采样速率写入缓冲区。假定没有调制存在,额定延迟长度是输入指针和输出指针之间的距离(以采样点数目计)。总的延迟长度总是选得比所需的长一些,这样在产生深度调制的时候也不会产生输出指针“超越”输入指针的情况。图3-9 采用内插方法的线性延迟线调制我们已经提到:颤音是对音频信号音调进行的调制。让我们来看一下颤音效果的频谱图像。输入是单一的未调制正弦波。在频谱图像上,未调制的输入信号是测试频率上的一条直线。然后,加上了颤音效果之后,频谱图像上的音调变化是通过直线的调制来显示的。如图310所示,颤音效果加在10kHz的单音信号上。延迟长度的调制在正负1000个样值之间,而调制波形是正弦波。在图310中也可以观察到由内插法得到的值。这些可以当作附加的正弦调制。图310 10kHz信号加上颤音效果之后的频谱图像,延迟调制为正弦从实现角度看,回旋和颤音效果不完成相同,多加了一条前向通路和输出加法器,见图311。图311 基本回旋效果单元的框图从声学角度看,回旋和颤音有天壤之别。原先在高级信号处理技术发明之前,回旋是通过将两部播放相同内容的磁带机的声音混合来合成的。操纵者通过按住供给轮的边缘来调制其中一台机器的速度:卷音效果的名字也由此得来。回旋的效果是通过将信号和其自身的延迟相混合来扰乱耳朵的时间相关机理。延迟是动态调制的,但总是在听觉系统的综合时间常数以内。在反射处理器的讨论只能够曾强调过,信号和自身延迟的相加结果是使网络的响应呈梳状。通过调制延迟长度,回旋信号的频谱上出现时变的梳状响应。图312的频谱图像中可以观察到回旋的时变梳状响应。图312中使用的输入信号使均衡分布的白噪声。因此,如果不加回旋效应,在频谱图像上的所有频率上会出现宽带的“模糊”。加上回旋效果后,梳状响应的凹糙在频谱图像上会呈现可分辨的直线,这也是因为梳状响应应根据正弦调制不断地在变化。从图312中也可以观察到凹槽地位置随时间变化。图312 回旋效果的频谱图像,显示了时变梳状响应和声效果地实现也离不开调制延迟线这一主题。和声单元地思想使:它能给人多声源同时发声地感觉,使声音富有层次感。单声道输入信号送入几个平行地调制延迟线,输出再和输入信号相加。每条传输延迟线使用地调制速率和深度都不一样,这样使得输入信号不同地“调制拷贝”能够得到轻度地去相关,从而模拟了在真实演出中多个乐器同时演奏时音调和节拍上自然轻微地不一致。延迟线必须用随机信号调制,这有助于进一步将声源去相关。对于不同的输出,还可以加上一个小幅随机幅度调制,目的时模拟多声源情况下的瞬间增强和减弱。图313是和声单元的框图。在所有这些效果中,我们很少对控制参数的设定加上苛刻的要求。这是因为通常这些参数是根据不同的应用场合和不同的处理需求而定的。这些效果的延迟调制几乎总在10Hz以下,典型的是在1Hz左右。正弦调制适用于颤音和回旋效果,而和声效果的调制最好,但并非必须使用随机信号。从延迟时间角度看,回旋器的延迟时间远小于和声单元。当调制一直深到零使,可以得到最强烈的回旋效果,梳状的凹槽很深。对于回旋器,典型的额定延迟时间在5ms左右,也就是在耳脑机理的综合时间常数以内。对于回旋器来说,大概在30ms左右。和声单元的调制深度不能逼近零,否则会转化为回旋器。所以和声调制一般在10ms左右。现在看来,虽说对参数设定没有苛刻的要求,但确实还是要符合一些规则的。当然,所有这些效果都需要大量的实验来证明。图313 和声效果单元的框图我们还没有提出这些设计中所使用的反馈。反馈当然使可以使用的。反馈可以来自定点抽头,也可以来自调制抽头。使用定点抽头反馈的话,可以得到精细的滤波器函数或反射器效果,这取决于所用的延迟时间。使用调制抽头反馈的话,可以得到一些非常有趣的音节调制效果。这是因为调制抽头的输出本身就是音节调制的,反馈调制抽头的输出使原先信号的调制进一步加深,所以音节调制信号的音调在不断地漂移。虽然这是一个有趣地现象,但是并不适合应用在音乐上。在回旋地讨论中,我们提到这种效果能在处理完地信号频谱图像上产生深地梳状凹槽。对于和声单元则正相反,因为理想地情况使梳状地凹槽最好浅一点。减小梳状深度地一个方法使引入一个定点抽头地负反馈。这个定点抽头位于调制抽头地额定延迟位置上,也就是在调制抽头地中间。当控制参数和延迟长度设置得当地话,这使得和声单元有全通响应。这种类型地和声是白噪声。为了保证取得全同响应,fixed_feedback和direct_forward两个参数必须相等,同时mon_forward参数必须设为1。图314所示地是一个工业标准效果器。通过调整表3-1中地参数,能产生所有介绍过分效果。用这个方案同样可以实现加倍和简单回声这样的效果。加倍,也叫做自动加倍跟踪(ADT),是对演奏者将一个部分演奏两次的模拟。除了自动面板之外,这里所介绍的音效都是单声道处理。尽管如此,它们完全适用于立体声处理。可以直接处理立体声信号,也可以将单声道新先加上伪立体声效果。一个很好的例子是立体声合声单元的设计,在这种设计中单声道输入信号能驱动两条平行和声通道。 这种和声本来就很有趣,如果将驱动左右两个调制延迟的调制信号波形隔开90度的相位,则可以进一步产生有趣的立体声面板效果。图314 工业标准的延时效果处理器表3-1 工业标准效果处理器饿额定设置效果 direct_forward mod_forward fixed_feedback 额定延时 延时调制颤音 0.0 1.0 0.0 5ms +-5ms相颤音 0.7071 0.7071 -0.7071 5ms +-5ms标准和声 1.0 0.7071 0.0 30ms +-10ms白和声 0.7071 1.0 0.7071 30ms +-10ms加倍 0.7071 0.7071 0.0 50ms No回声 1.0 1.0 0; size-) sLeft = (*src & 0xFFF0000)16; /* split L+R chan* data -*/ sRight = (*src+ & 0x0000FFFF); /* set L+R input gain -*/ sLeft = _mpy(sLeft , i in Gain)15; sRight = _mpy(sRight , i in Gain)15; sMono =_mpy( sLeft + sRight),I Run Stop)15; sByPass = sMono; p = I Fxn%FxBufLngth; /* set modulo pntrs to delay buffer- */ q = (i Fxn-iFxDly1-iFxi)%FxBufLngth; q_1 = FxBufLngth;-iFxi-1) % FxBufLngth;r = (iFxn-1) % FxBufLngth; s = (i Fxn-iFxDly1) % FxBufLngth; s FxBuf P = sMono; /*delay modulation & vibrato calcs-*/ sFxVib = (fFxfrac) * sFxBuf q_1) + ( 1- fFxfrac) * sFxBuf (q); sMono = (iFxBlend*sFxBufr /1000) + (iFxFdFwd *sFxVib/1000); sFxBufp = sFxBuf p iFxFxdFvk * sFxBuf s/1000-iFxVarFbk *sFxvib/1000; iFxn+; sLeft = sRight = sMono; if (iByPassFlag = = 1) /* test for time delay FX bypass -*/ sLeft = sRight = sByPass;If (ipanFlag = = 1) /* enable or disable auto-pan effect -*/ sLeft = _mpy (sLeft , sPanL_ gain)15;sRight = _mpy (sRight, sPanR_ gain)15; *dst+ = (Uns) (sLeft & 0x0000FFFF)16 | (Uns) sRight & 0x0000FFFF;fFxi = iFxModDpth * sin (2*pi* iFxx/ iFxModRate);iFxi = ( int) fFxi;fFxfrac = fFxi- iFxi;iFxx+; / *update modulated delay position -*/sX+; /*auto-pan calculate pan position and update gains -*/sPanL_ gain = _abs (iOutGain *sin (2 *pi * sX/ iPanRate);sPanR_ gain = _abs (iOutGain *sin (2 *pi * sX/ iPanRate + (iPanphase * pi / 20);pip_put (out); /* copy output data and free input buffer -*/pip_free (in); 汇编程序中,一般使用下划线标志来定义变量,并将其设置为全局变量。在C程序中,使用关键字extern 从连接的汇编文件中导入变量。一旦变量在C环境中引用并声明为局部的数据类型(在此例中为整形),它就可以像其他变量一样来使用。对本例的音频效果应用而言,所有的控制变量都是这样声明的。当程序编译和链接之后,会生成一张符号表,表明了每个变量在DSP中的特定存储位置。音频效果控制参数的符号表如图10-4所示。表10-4 音频效果处理器: 变量在DSP存储空间分配的符号表 DSP 存储器位置 汇编变量名 功能 0x800002cc _iByPassFlag 选择FX旁路的标志(0=,1=) 0x800002d0 _iOutGain 输出增益值(0-32768) 0x800002d4 _iInGain 输入增益值(0-32768) 0x800002d8 _iPanRate 自动调整调制速率(0-32768) 0x800002dc _iPanPhase 左/右自动平整延迟相位(0-32768)0x800002e0 _iPanFlag 选择自动平整的开关标志(0=,1=) 0x800002e4 _iFxBlend 直接反馈自动增益值(0-32768) 0x800002e8 _iFxFdFwd 固定时延位置前向增益(0-32768)0x800002ec _iFxFxdFbk 固定时延位置反馈增益(0-32768) 0x800002f0 _iFxDly1 时延长度(1-16000个采样点) 0x800002f4 _iFxVarFbk 调制时延反馈增益(0-32768) 0x800002f8 _iFxModDpth 时延调制深度(0-1000个采样点) 0x800002fc _iFxModRate 时延调制速率(1-32768) 0x8000030c _sLeft 保持左样本数据(+/-32768) 0x8000030c _sRight 保持右样本数据(+/-32768) 0x80000310 _sMono 保持单一样本数据(+/-32768)5主机支持软件EVM6xAPIC6xxx EVM 附有一综合主机软件库,和Win 32 的动态链接库(DLL)捆绑在一起。这个主机软件库还包含了一个与操作系统相关的底层驱动程序,该驱动程序与系统PCI硬件直接通信。Win 32的动态链接库提供一个应用编程界面API,利用它能很容易地编写一个与EVM 板通信的主机应用程序。DLL,底层驱动程序由EVM板提供,并在EVM 板启动时自动安装。底层驱动程序同时可以支持多种EVM板,可以开发多个应用程序。EVM6x.vxd的底层驱动程序能支持Windows 95 和98的应用程序,而EVM6x.sys的驱动程序能支持Windows NT 4 和Windows 2000 平台上的用户应用程序。Win 32 DLL 提供了底层驱动程序和用户应用程序之间的接口,事实上就是提供了一个易于使用的库函数集。表10-5总结了DLL 提供的函数。表10-5 TI 的API 主机库函数(源自:TI) 指令 功能Evm6x_abort_read 终止目前的读请求Evm6x_abort_write 终止目前的写请求Evm6x_board_type 返回EVM板类型Evm6x_clear_message_event 清除发生的消息事件Evm6x_close 关闭与板的驱动连接Evm6x_coff_display 显示COFF部分消息Evm6x_coff_load 将COFF图像装载到DSP存储器中Evm6x_cpld_read_all 读CPLD寄存器Evm6x_generate_nmi_int 产生到DSP的NMIEvm6x_hpi_close 关闭DSP的HPIEvm6x_hpi_fill 将HPI填充DSP存储器Evm6x_hpi_generate_int 使用HPI中断DSPEvm6x_hpi_open 为DSP打开HPI Evm6x_hpi_read 用HPI读存储器Evm6x_hpi_read_single 读单个字节,短/长字Evm6x_hpi_write 用HPI写DSP存储器Evm6x_hpi_write_single 写单个字节,短/长字Evm6x_init_emif 初始化EFIF寄存器Evm6x_nvram_read 读板上的NVRAM存储器Evm6x_nvram_write 写板上的NVRAM存储器Evm6x_open 打开和板子的驱动连接 Evm6x_read 从板上的PCI读数据Evm6x_reset_board 完全启动板子Evm6x_reset_dsp 重启板上的DSP和设置引导模式Evm6x_retrieve_message 获得DSP发出的消息Evm6x_send_message 发消息给DSPEvm6x_set_board_config 设置板上的配置Evm6x_set_timeout 设置数据传输时的超时值Evm6x_unreset_dsp 将DSP从重启状态释放Evm6x_write 写数据到板子的PCI开发主机应用程序时,EVM6x. dll必须导入软件开发环境,如微软Visual C+, Borland C+ 等等。一个导入库EVM6x.lib, 是用于导入和声明由EVM6x. dll导出的函数和数据类型。通过使用EVM6x.lib导入库,用户主应用程序能够访问Win 32 的DLL,并调用表10-5定义的所有函数。EVM6x.lib实际上是微软的COFF文件,可以直接导入微软Visual C+ 和 Visual Basic的开发环境。然而,作者倾向的Windows开发环境是Borland C+ Builder, 它使用Borland OMF 格式定义的导入库。使用Borland的COFF2OMF.exe工具,EVM6x.lib 的COFF文件可以很方便进行OMF格式的转换。 导入库为主应用程序提供了强大的函数集,以控制DSP器件和EVM板,同时,也为DSP特定存储空间的读和写,DSP重启,以TI COFF 格式下载DSP 应用程序提供各类函数。C6xxx.EVM 还提供了一组有用的示范程序。这样用户就可以很快学会主应用程序的开发,实现和DSP开发板的通信。每个API函数的准确使用方法在C6xxx.EVM用户手册中都有详细定义。下面给出一个API函数evm6x_open的使用示例。该函数能通过PCI接口,对EVM板的通信进行初始化。evm6x_open这个API函数的语法为#include HANDLE evm6x_open ( int board_index, BOOL exclusive _flag );板索引用标识系统中每一块连接的EVM板。索引为零,如果系统中只有一块EVM板,该板的board _ index值即为零。 Exclusive _ flag 定义了EVM板的打开方式。在互相排斥的模式下,任何时刻只能有一个主应用程序与EVM板相连接和通信。但是在互相排斥模式下,可以打开任意数量的主应用程序。evm6x_open返回的句柄被其他的API函数所调用,来标示和连接打开的EVM板。接下来的C语言代码(程序10-2)用来打开,重新启动一块EVM板,下载并运行COFF应用程序。事实上,我们不赞成这样简单的执行顺序,以为它并没有进行错误检查。在某些情况下,它会导致EVM,PCI总线甚至PC被锁乃至死机。第10.2.6中我们曾讨论过一个更好的代码。这种代码使用异常软件来捕获错误信息,并终止主机应用程序以防止主机死机。程序10-2 TI C6xxx EVM 主机示范程序 # include “evm6xdll.h” Handle BrdHandle = NULL; BrdHandle = evm6x_open(0, true); Evm6x_reset_board (BrdHandle); Evm6x_reset_dsp (BrdHandle, MapMode0); Evm6x_coff_load (BrdHandle, Null, audCOFF. Out, false, false, false); Evm6x_unreset_dsp (BrdHandle); / DSP application runs from here Evm6x_close (BrdHandle); 6主机应用软件音频效果控制界面 在开始主机数据传输之前,使用EVM6x主机库函数的任何应用程序会执行一些操作。这是很重要的。在运行任何软件之前,将DSP初始化为已知是比较明智的。同时,HPI的某些部分以及PCI总线必须正确设置,这样才能防止PCI阻塞。音频效果应用的主机部分调用程序10-3,对DSP,PCI和HPI 接口进行初始化,并下载DSP COFF 目标文件。程序10-3 使用Borland C+ Builder 编写的C6xxx EVM主机启动应用程序Void_ fastcall TForm1:EVM Reset Button Click ( Tobject * Sender) Try BrdHndl = evm6x_open (0, true) ; If (BrdHndl = = INVALID _ HANDLE _ VALUE) Throw “Unable to open board with ID 0” If ( ! Evm6x_reset_board (BrdHndl) Throw “Unable to RESET the board”; If ( ! Evm6x_reset_dsp (BrdHndl, HPI_BOOT) Throw “Unable to set required target MAP MODE”; HpiHndl = evm6x_hpi_open (BrdHndl); If (HpiHndl = = NULL) Throw “host port Interface cannot be init

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论