⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amf_delay_s_render.asm

📁 ADI SHARC DSP 音频算法标准模块库
💻 ASM
字号:
// Copyright(c) 2005 Analog Devices, Inc. All Rights Reserved.
// This software is proprietary and confidential to Analog Devices, Inc. and its licensors.

// File    : $Id: //depot/development/visualaudio/modules/2.5.0/SHARC/Source/AMF_Delay_S_Render.asm#3 $ 
// Part of : VisualAudio V2.5.0 
// Updated : $Date: 2006/10/12 $ by $Author: Fernando $




//    Module Name     : AMF_Delay_S_Render.asm 
//    DSP Processor   : ADSP21161
//    Description     : Delay (stereo) audio module ASM file.
//    Owner           : Analog Devices
//    Original Author : Tim Stilson    
//    Date               : 7/17/03
//====================================================================================
// Processor resources used:
// 38 words pmem INTERNAL
// 570 cycles (TickSize=128) (58 + 4*tickSize)
// (SIMD used)
//====================================================================================

#if 1

    ////////////////////////////////////////////////////////////////////////////////
    //
    // History:
    //
    // 7/17/03 Tim Stilson: created
    //
    ////////////////////////////////////////////////////////////////////////////////
    //
    // Stereo Delay with SIMD access to delay memory (for on-chip delay storage)
    //
    ////////////////////////////////////////////////////////////////////////////////

#include "processor.h"
#include "AMF_Delay_S.h"
#include "asm_macros.h"
#include "asm_sprt.h"


// global routines
.global    _AMF_Delay_S_Render;            ;

.segment /pm SEG_MOD_FAST_CODE;

////////////////////////////////////////////////////////////////////////////////
// Delay_S filter
//
_AMF_Delay_S_Render:
    
 // push context on stack
     puts=mode1;
    r0=i2; puts=r0;
    r0=i1; puts=r0;
    r0=i0; puts=r0;
    r0=b1; puts=r0;

    i4=r8;                    // i4->*buffers
    
 // initialize input and output samples pointers
    i0=dm(0,i4);            // i1->buffers[0], input
    i2=dm(1,i4);            // i2->buffers[1], output

    i4=r4;                    //i4->testModuleInstance[0]
       
 // initialize coefficient pointer, and check for orphan write pointer
    r1=dm(AMF_Delay_S_DelayBuffer,i4);                        // buffer base
    r0=dm(AMF_Delay_S_Delay,i4);                              // length of delay buffer in samples
    r0=lshift r0 by 1;                                        // length * 2 for stereo samples, 
    r4=dm(AMF_Delay_S_DelayWritePtr,i4);                      // get current delay pointer
    l1=r0;                                                    // setup circular buffer
    r0 = r1+r0,          b1=r1;                               // r0 = end of buffer + 1, set buffer base
    comp(r4,r0),         i1=r4;                               // check if writeptr beyond end of buffer, i1 = "else" value
    if ge                i1=r1;                               // if so, set to beginning of buffer (to handle case of possible orphaned writeptr when delay is set much smaller while running)

    bit set MODE1 PEYEN;        
    m4 = 2;

    lcntr=r12, do AMF_Delay_S_Loop until lce;
        r1=dm(i0,m4);                                // r1/s1 = in[i l/r];
        r0=dm(i1,m5);                                // r0/s0 = delay[index l/r];
        dm(i2,m4)=r0;                                // out=delayout
AMF_Delay_S_Loop:
        dm(i1,m4)=r1;                                // delay[index l/r]=in, incr and wrap index

    bit clr mode1 PEYEN;    // Disable PEy:SIMD
    l1 = 0;

    r0=i1;
    dm(AMF_Delay_S_DelayWritePtr,i4)=r0;                 // store away current delay pointer

 // pop context off stack
    b1=gets(1);
    i0=gets(2);
    i1=gets(3);
    i2=gets(4);
    mode1=gets(5);
    alter(5);

//------------------------------------------------------------------------------------
_AMF_Delay_S_Render.END:
    leaf_exit; // C-rth requires this instead of rts
//------------------------------------------------------------------------------------
    
.endseg;
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -