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

📄 equalizer.s

📁 关于DVD上的PCM的解码的代码,PCM的DSP压缩,解调的算法,用RISC32指令来写.
💻 S
📖 第 1 页 / 共 2 页
字号:

//**************************************************************************
//**************************************************************************
// (c)2000 Copyright LuxSonor, Inc. All rights reserved
// Revision 1.0;;	;	Module:	Graphic Equalizer MODULE
//	Initial version: XUE XIANG WAN 11/15/2000
//	Calling	:     	none;	Called by:	    
//**************************************************************************
//	Return:		None
//	Param in:       None
//	Temp reg:	r0 - r10                              
//
//	AGR  reg:	AGR0: pointer for search buffer       
//			AGR1:                                  
//                      AGR2:
//	Local buffer:   A: search buffer                       
//   			B: correlation buffer                  
//**************************************************************************
//**************************************************************************

//**************************************************************************
//  Next for headfile
//**************************************************************************

	        .nolist                
#include        "regdef.h"
#include        "app_mem.h"
#include        "memory2.h"

	        .list

                .extern    equalizer_coeff_table           // all 35  ints  
                .extern    equalizer_serial                // all 84  ints  
                .extern    equalizer_buffer                // all 128 ints  
                .extern    equalizer_gain 

                .extern    r0_temp
                .extern    r1_temp
                .extern    r2_temp
                .extern    r3_temp
                .extern    r4_temp
                .extern    r5_temp
                .extern    r6_temp
                .extern    r7_temp
                .extern    r8_temp
                .extern    r9_temp
                .extern    r10_temp
                .extern    BlockSize_temp
                .extern    BlockSkip_temp
                .extern    DMASize_temp 
                .extern    equalizer_on_off_flag
                .extern    cyc_buffer_test                   

#define         pcm_local_buffer                           0x0000
#define         local_work_buffer                          0x1800

#define         cyc_buffer1                                0x400
#define         cyc_buffer2                                0x800
#define         cyc_buffer3                                0xc00
#define         cyc_buffer4                                0x1000


//-----------------------------------------------------------------------------------
//**************************************************************************
//-----------------------------------------------------------------------------------

#if    (DISC==1)
#define         PCM_VOLUME_ADJUST                       1                // VCD SVCD 
#elif  (DISC==2)  
#define         PCM_VOLUME_ADJUST                       2                // CD
#else (DISC==3)
#define         PCM_VOLUME_ADJUST                       2                // MP3
#endif

//**************************************************************************
//**************************************************************************
//+++++++++++++++++++++++ next for the main programm ++++++++++++++++++++++++++++
//**************************************************************************
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//**************************************************************************

                .macro  inc  reg
                addi    \reg,1
                .endm
                                                     
                .macro  dec   reg
                subi    \reg,1
                .endm

//--------------------------------------------------------------------------
//**************************************************************************
//--------------------------------------------------------------------------
//**************************************************************************
//--------------------------------------------------------------------------
//**************************************************************************

                .global  sound_equalizer
		        .text
		        .align   4 

//**************************************************************************
//**************************************************************************
 
sound_equalizer:

#if ENABLE_EQUALIZER           

// check equalizer_on_off_flag  use r0 --white
	mov    r24,DcacheBase                            // protect DcaheBase register       
	movi    DcacheBase,APP_DATA_SEG                   // first set Dcache   
	dlw		r0, app_status
	nop
	andi	r0, (APP_PSM_ENABLE|APP_EQU_RUN)
	tsti	r0, (APP_PSM_ENABLE|APP_EQU_RUN)
	bne		equalizer_return2
	nop
// end of check equalizer_on_off_flag --white

//---------------------------------------------------------------------------------
//******************* ??????????????????? *************************************
//----------------------------------------------------------------------------------

//                mov    r24,DcacheBase                            // protect DcaheBase register       
//                movi    DcacheBase,APP_DATA_SEG                   // first set Dcache   
                mov    r0,BlockSize
                dsw    r0,BlockSize_temp
                mov    r0,DMASize
                dsw    r0,DMASize_temp                            // protect all programm register                                
                mov    r0,StartAddrHigh
                dsw    r0,StartAddrHigh_temp

//-----------------------------------------------------------------------------------
//**************************************************************************
//-----------------------------------------------------------------------------------

                movi   AGRAdr0,pcm_local_buffer
                movi   AGRSiz0,0xffff                             // rihgt and left 256 samples
                movi   AGRInc0,0x2

                loop    0,adjust_pcm_data
                shrahf	r0, a0(0), PCM_VOLUME_ADJUST
                movhf   i0,r0  
                shrahf	r0, a0(0), PCM_VOLUME_ADJUST
                movhf   i0,r0  
adjust_pcm_data:

//------------------------------------------------------------------------------------
//***************************************************************************
//------------------------------------------------------------------------------------

                movi   StartAddrHigh,APP_DATA_SEG
                movi   DMASize,20                                // one time 32 dwords  
                movi   BlockSize,20
                                                                // to protect
                movi   r1,equalizer_coeff_temp
                movi   r0,local_work_buffer>>2
                shr    r1,2
                loop   3,pick_equalizer_coeff_temp
                mov    LocalAddr,r0
                Dmarr  r1                                    // read in H(z) serial       

                WaitDma
                addi   r0,21
                addi   r1,21

pick_equalizer_coeff_temp:
                                
                nop
                 
                jsr    r6,cal_coefficient                               // pick the equalizer coefficient

//---------------------------------------------------------------------------------------------------
//****************************************************************************************
//******************* next for use new method ************************************************
//****************************************************************************************
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//************** next for cyc_buffer set ******************************************************
//---------------------------------------------------------------------------------------------------

                movi   AGRAdr0,local_work_buffer+64*4
                movi   AGRSiz0,0xffff
                movi   AGRInc0,0x4
           
                movi   AGRAdr1,cyc_buffer1
                movi   AGRSiz1,0xffff
                movi   AGRInc1,0x4

                movi   AGRAdr2,cyc_buffer2
                movi   AGRSiz2,0xffff
                movi   AGRInc2,0x4

                movi   AGRAdr3,cyc_buffer3
                movi   AGRSiz3,0xffff
                movi   AGRInc3,0x4

                movi   AGRAdr4,cyc_buffer4
                movi   AGRSiz4,0xffff
                movi   AGRInc4,0x4

                mov    r0,i1
                mov    i0,r0
                mov    r0,i1                                     // all 4 dwords   
                mov    i0,r0
                mov    r0,i1
                mov    i0,r0
                mov    r0,i1
                mov    i0,r0
                              
                mov    r0,i2
                mov    i0,r0
                mov    r0,i2                                     // all 4 dwords   
                mov    i0,r0
                mov    r0,i2
                mov    i0,r0

                mov    r0,i3
                mov    i0,r0
                mov    r0,i3                                     // all 4 dwords   
                mov    i0,r0
                mov    r0,i3
                mov    i0,r0
                mov    r0,i3
                mov    i0,r0

                mov    r0,i4
                mov    i0,r0
                mov    r0,i4                                     // all 4 dwords   
                mov    i0,r0
                mov    r0,i4
                mov    i0,r0

//----------------------------------------------------------------------------------------------------------
//************** end of cyc_buffer set **************************************************************
//----------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------
//-------------- next for 7 stage segment equalizer -----------------------
//-------------------------------------------------------------------------

                movi   r7,0 

do_seven_equalizer:

                multi  r0,r7,10                                        // for 5 coeff
                nop
                addi   r0,local_work_buffer
                mov    AGRAdr0,r0
                movi   AGRInc0,0x2
                nop
                nop
                       
                movhf  r2,i0
                movhf  r3,i0                                          // all pick 5 coeff            
                movhf  r4,i0
                movhf  r5,i0
                movhf  r6,i0                                          // pick 5 coeff for speed problem

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

                multi   r0,r7,0x10                                        // for 5 coeff
                nop
                addi    r0,local_work_buffer+70
                mov    AGRAdr0,r0

                movi   AGRSiz0,0xffff                                 // rihgt and left 256 samples
                movi   AGRInc0,0x2

                movi   AGRAdr1,cyc_buffer1
                movi   AGRSiz1,0xe
                movi   AGRInc1,0x4
                
                movi   AGRAdr2,cyc_buffer2
                movi   AGRSiz2,0xa
                movi   AGRInc2,0x4

                movi   AGRAdr3,cyc_buffer3
                movi   AGRSiz3,0xe
                movi   AGRInc3,0x4

                movi   AGRAdr4,cyc_buffer4
                movi   AGRSiz4,0xa
                movi   AGRInc4,0x4

//-------------------------------------------------------------------------
//*************************************************************************
//-------------------------------------------------------------------------

                movhf  r0,i0
                movhf  i1,r0
                movhf  i1,r0                            // pick x1 x2  right 
                movhf  r0,i0                                    
                movhf  i1,r0
                  
                movhf  r0,i0
                movhf  i2,r0                            // pick y1 y2 right 
                movhf  r0,i0                                    
                movhf  i2,r0

                movhf  r0,i0
                movhf  i3,r0
                movhf  i3,r0                            // pick x1 x2  left
                movhf  r0,i0                                    
                movhf  i3,r0
                  
                movhf  r0,i0
                movhf  i4,r0                            // pick y1 y2 left
                movhf  r0,i0                                    
                movhf  i4,r0

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

                movi   AGRAdr0,pcm_local_buffer
                movi   AGRSiz0,0xffff                   // rihgt and left 256 samples

⌨️ 快捷键说明

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