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

📄 record3.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 S
📖 第 1 页 / 共 5 页
字号:
		dmarr	r0				
		WaitDma

//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// ****************** next for down sample filter *************************
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------

		movi	AGRAdr0, input_data_address+512+64            // pointer for filter coefficients
		movi	AGRSiz0, 0x3e		                      // 31 order 
		movi	AGRInc0, 0x2		         

		movi	AGRAdr4, input_data_address
//	        movi	AGRInc4, 0xffc8		                      // increments by -56 (reset of history)
	        movi	AGRInc4, 0xffd0		                      // increments by -48 (reset of history)
		movi	AGRSiz4, 0xffff
		movi	AGRMod4, 0

                                                       
		movi	AGRAdr3, input_data_address+512+64+64         // pointer on the output sequence.
		movi	AGRSiz3, 0xffff	
		movi	AGRInc3, 0x2		                      // increments by one 

//-------------------------------------------------------------------------
// **************** next for change 44.1khz to 5.5 khz sample **********
//-------------------------------------------------------------------------

		movi	r2, 32

dec_micro_block:

                movi    r0,0
                movi    r1,0                            

                loop    8,down_sample_lp_filter                       // for 31 order 

                movhf   r3,a4(2)
                maddhf  r0,r3,i0

                movhf   r3,a4(2)
                maddhf  r0,r3,i0

                movhf   r3,a4(2)
                maddhf  r0,r3,i0

                movhf   r3,a4(2)
                maddhf  r0,r3,i0

down_sample_lp_filter:

                nop
                nop 

		rndhf	i3, r0  				     // output sample
		movhf	r0, i4                                       // for next sample 

		subi	r2, 0x1				             // decrements the counter
		bne	dec_micro_block

//-------------------------------------------------------------------------
// ************* end of down sample process ******************************* 
//-------------------------------------------------------------------------

		movi	StartAddrHigh, APP_DATA_SEG
		movi	DMASize, 15	                             // save now data for next frame filter 	  
		
		movi	r0, input_data_address + 512
		shr	r0, 2

		movi	r1, down_sample_filter_history_data
		shr	r1, 2

		mov	LocalAddr, r0
		dmawr	r1			                     // adress in DRAM for history
		WaitDma

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

		movi	AGRAdr0, input_data_address                  
		movi	AGRAdr1, input_data_address+512+64+64	     // for buffer align use

		loop	32, align_local_buffer
				
                movhf   r0,a1(2)                                     // for history data use 
                movhf   a0(2),r0 

align_local_buffer:

                nop
                nop                                                  // move the buffer for filter use 

//----------------------------------------------------------------------------------------------
//**************** end of use filter method to do down sample *******************************
//----------------------------------------------------------------------------------------------
#endif 


#if       CLASSIC_METHOD
//--------------------------------------------------------------------------
//------------- next for change 44.1khz to 5.5khz test 11.025khz -----------
//--------------------------------------------------------------------------

 		movi	AGRAdr0, input_data_address          //  
		movi	AGRSiz0, 0xffff                      // 

 		movi	AGRAdr1, output_data_address         //  
		movi	AGRSiz1, 0xffff                      // 

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

#ifdef          F11025
                
                loop    64,change44to551                     // for 11.025k
                movi    r0,0                                 // clear r0 to 0
                loop    8,change44to552                      // 11.025k  

#else      
                loop    32,change44to551                     // 5.5k
                movi    r0,0                                 // clear r0 to 0
                loop    16,change44to552                     // 5.5k  
#endif

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

                movhf   r1,a0(2)                             // two channel 

                shr     r1,8
                addi    r1,0x8000
                andi    r1,0xffff                            // change to unsigned type  
                shl     r1,8                                 //

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

                add     r0,r1                                // also for two channel  
                                  
change44to552: 

#ifdef          F11025
                shr     r0,10                                // divide by 8      // 11.025khz    

#else
                shr     r0,11                                // divide by16      // 5.5khz  

#endif           

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

                shr     r0,1                                 // this for divide by 2
               
                subi    r0,0x8000                            // change to signed 
                shl     r0,8

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
                
//                movi    DcacheBase,MEM_SEG
                dlw     r1,app_status
//                movi    DcacheBase,APP_DATA_SEG
                tsti    r1,(APP_RR_ENABLE|APP_RR_MODE_REREAD|APP_RR_REC_RUN) //0x45
                beq     change44to552_next2                  // in reread status  goto next2 for divide 2   

                dlw     r4,microphone_status                 // check the micro status 
                li      r5,0x11111111
                tst     r4,r5
                beq     change44to552_next1
                li      r5,0x22222222
                tst     r4,r5                                // check the micro status
                beq     change44to552_next1

                j       change44to552_next2 
                
change44to552_next1:

                shl     r0,1                                 // if one mic volume add 1 

change44to552_next2:

                movhf   a1(2),r0                             

change44to551:

#endif

//---------------------------------------------------------------------------------------------
//**********************************************************************************
//  ****************** end of do sample change *****************************************
//**********************************************************************************
//---------------------------------------------------------------------------------------------


//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//---------------------- next for do adpcm ---------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
                
 		movi	AGRAdr0, input_data_address          //  
		movi	AGRSiz0, 0xffff                      // 
  		movi	r5, output_data_buffer               //  in the main memory for byte process
                movi    DcacheBase, APP_DATA_SEG                  

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//--------------------------------------------------------------------------
// next for begin one frame record 
//--------------------------------------------------------------------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#ifdef          F11025
                loop    64,adpcm_tail                       // for 11.025k 
#else         
                loop    32,adpcm_tail                       // 5.5k
#endif

//--------------------------------------------------------------------------
                
                movhf   r0,a0(0)                            // pick one data   
                shra    r0,2                                // use 14 bits to do adpcm

                movhf   a0(2),r0                            // change 16bits to 14bits
                
                shra    r0,8

                addi    r0,0x8000
                andi    r0,0xffff
                subi    r0,0x8000                  
                
                dlw     r1,se                               // pick the se from memory 
                nop
                addi    r1,0x8000
                andi    r1,0xffff
                subi    r1,0x8000
                                
                sub     r2,r0,r1                            // estimate the difference
                                                            // r2=d  
                dlh     r3,y0                               // r3=y
                nop
                addi    r3,0x8000
                andi    r3,0xffff
                subi    r3,0x8000                           // short change to int
                                
                mupi    r0,0xffff
                ori     r0,0xffff                           // r0=wdl=-1 
                                 
                movi    r1,0                                // r1=mant=0
                             
                mupi    r7,0x8000
                tst     r2,r7
                blt     abs_next                            // r7=k=abs(d)
                 
                movi    r7,0
                sub     r7,r2                     
                j       abs_next1
abs_next:                
                mov     r7,r2                           
abs_next1:
                
                movw    %r1_buffer_local,r7                 // here r2 = abs(d) 
                shra    r7,1                                // k >> 1

//---------------------------------------------------------------------------              
                
                movi    r4,15
quan_begin:
                addi    r0,1                                // wdl++
                
                mov     r8,r1
                addi    r1,1                                // mant++               
                
                shl     r8,1                                // for short                     
                addi    r8,power2
                dlhr    r10,r8                              // pick the power2[mant++]
                nop
                 
                tsts    r7,r10
                blt     quan_end                            // jump out the cycle
                
                subi    r4,1
                tsti    r4,0
                bne     quan_begin

quan_end:
                mov     r4,r0                               // exp=r4=wdl=r0

//----------------------------------------------------------------------------
                
                movw    r7,%r1_buffer_local                 // abs(d) << 7
                shl     r7,7
                                                  
//----------------------------------------------------------------------------

                shrv    r7,r4
                
                andi    r7,0x7f
                mov     r1,r7                               //  mant=((abs(d) <<7)>>exp) & 0x7f                    
               
                mov     r7,r4
                shl     r7,7
                add     r7,r1                               // exp=( exp <<7) + mant
                mov     r4,r7
                
                mov     r7,r3
                shra    r7,2                                // mant=exp - ( y >> 2 )
                sub     r1,r4,r7
                
               
                movi    r7,0
                dlh     r10,qtab_723_24
                nop
                tsts    r1,r10
                blt     quan_next1
                
                addi    r7,1                                // k++
                dlh     r10,qtab_723_24+2
                nop
                tst     r1,r10
                blt     quan_next1

⌨️ 快捷键说明

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