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

📄 equalizer.s

📁 关于DVD上的PCM的解码的代码,PCM的DSP压缩,解调的算法,用RISC32指令来写.
💻 S
📖 第 1 页 / 共 2 页
字号:
                movi   AGRInc0,0x2
 
                movi   AGRAdr1,cyc_buffer1
                movi   AGRAdr2,cyc_buffer2
                movi   AGRAdr3,cyc_buffer3
                movi   AGRAdr4,cyc_buffer4

//------------------------------------------------------------------------
//************************************************************************
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//************************************************************************
//------------------------------------------------------------------------
                
                movhf  r8,a0(0)
                
                loop   0,do_one_stage_equalizer

//--------------- right channel ------------------------------------------

                movhf  i1,r8
                mulhf  r0,r2,i0 
                maddhf r0,r3,i1                              // x1
                maddhf r0,r4,i1                              // x2
                msubhf r0,r5,i2                              // y1 
                msubhf r0,r6,i2                              // y2  right channel                  
                movhf  r8,a0(-2)  
                shl    r0,1
                rndhf  i0,r0                                 // output the data
                rndhf  a2(0),r0                              // output the data

//----------------- left channel --------------------------------------------                
               
                movhf  i3,r8
                mulhf  r0,r2,i0 
                maddhf r0,r3,i3                              // x1
                maddhf r0,r4,i3                              // x2
                msubhf r0,r5,i4                              // y1 
                msubhf r0,r6,i4                              // y2  right channel                  
                movhf  r8,a0(-2)  
                shl    r0,1
                rndhf  i0,r0                                 // output the data
                rndhf  a4(0),r0                              // output the data

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

do_one_stage_equalizer:

                nop

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

                multi  r0,r7,0x10                                     // for 5 coeff
                movi   AGRSiz0,0xffff                               // rihgt and left 256 samples                

                addi   r0,local_work_buffer+70
                mov    AGRAdr0,r0
                movi   AGRInc0,0x2

                movhf  r0,i1
                movhf  r0,i1
                movhf  i0,r0                                       // store x y for next frame 
                movhf  r0,i1
                movhf  i0,r0
                                  
                movhf  r0,i2
                movhf  i0,r0
                movhf  r0,i2
                movhf  i0,r0
                                
                movhf  r0,i3
                movhf  r0,i3
                movhf  i0,r0
                movhf  r0,i3
                movhf  i0,r0
                                  
                movhf  r0,i4
                movhf  i0,r0                                       // store x y for next frame   
                movhf  r0,i4
                movhf  i0,r0

                addi   r7,1

// equalizer bands --white
                tsti   r7,7
//              tsti   r7,3
                bne    do_seven_equalizer
                nop


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                movi   AGRAdr0,local_work_buffer+64*4             // restore the local buffer   
                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,i0
                mov    i1,r0
                mov    r0,i0                                       // all 4 dwords   
                mov    i1,r0
                mov    r0,i0
                mov    i1,r0
                mov    r0,i0                                       // for right x0 x1 x2   
                mov    i1,r0
                              
                mov    r0,i0
                mov    i2,r0                                       // for right y0 y1 y2 
                mov    r0,i0                                       // all 3 dwords   
                mov    i2,r0
                mov    r0,i0
                mov    i2,r0

                mov    r0,i0
                mov    i3,r0
                mov    r0,i0                                     // all 4 dwords   
                mov    i3,r0
                mov    r0,i0
                mov    i3,r0                                     // for x0 x1 x2 
                mov    r0,i0
                mov    i3,r0


                mov    r0,i0
                mov    i4,r0
                mov    r0,i0                                     // all 3 dwords   
                mov    i4,r0
                mov    r0,i0                                     // for y0 y1 y2
                mov    i4,r0

//--------------------------------------------------------------------------
//**************************************************************************
//******************* end of use new method ********************************
//**************************************************************************
//--------------------------------------------------------------------------

                movi   DMASize,20                            // one time 21 dwords  
                movi   BlockSize,20
                
                movi   r1,equalizer_coeff_temp
                movi   r0,local_work_buffer>>2
                shr    r1,2
                
                loop   3,restore_equalizer_coeff_temp
                mov    LocalAddr,r0
                Dmawr  r1                                    // write out H(z) serial       

                WaitDma

                addi   r0,21
                addi   r1,21

restore_equalizer_coeff_temp:
 
                nop

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

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

                loop   0,adjust_pcm_data_back
                shlhf   r0,a0(0),PCM_VOLUME_ADJUST 
                rndhf   i0,r0
                shlhf    r0,a0(0),PCM_VOLUME_ADJUST
                rndhf    i0,r0

adjust_pcm_data_back:

//---------------------------------------------------------------------------------
//************************************************************************
//---------------------------------------------------------------------------------
                nop
test_agr_end:

sound_equalizer_end:                                         

                movi   AGRSiz2,0xffff                        
                movi   AGRSiz3,0xffff                        
                movi   AGRSiz4,0xffff                        
                movi   AGRSiz5,0xffff                        
 
                dlw    r0,StartAddrHigh_temp
                dlw    r1,BlockSize_temp
                dlw    r3,DMASize_temp                

                mov    StartAddrHigh,r0 
                mov    BlockSize,r1
                mov    DMASize,r3
equalizer_return2:                
                mov    DcacheBase,r24 
                nop
                
//--------------------------------------------------------------------------

                j      r11                              // go back  

                nop
      
//--------------------------------------------------------------------------
//**************** end of main programm for  debug use *********************
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//**************************************************************************
//************* Next for Calculate coefficient subprogramm *****************  
//**************************************************************************
//--------------------------------------------------------------------------

cal_coefficient:

//--------------------------------------------------------------------------
//********************** next for pick coeff check *************************
//--------------------------------------------------------------------------

//              dlw    r0,equalizer_coeff_flag
//              movi   r1,0x5555
//              tsti    r0,0x5555
//              bne    cal_coeffcient_next
//              j       pick_coeff_end
//cal_coeffcient_next:
//              dsw    r1,equalizer_coeff_flag

//--------------------------------------------------------------------------
//**********************  end of pick coeff check  *************************
//--------------------------------------------------------------------------

                movi   r0,equalizer_gain                     // gain table in main memory 
                
                movi   AGRAdr2,local_work_buffer
                movi   AGRSiz2,0xffff                        // one time pick 35 coeff  
                movi   AGRInc2,0x2                           // for short style 

                movi   r2,0

                loop   7,pick_coefficient

                multi   r3,r2,5*25*2                          // for short                 
                addi    r2,1                                  // to next frequence
                dlbr    r1,r0                                 // pick one gain 
                addi   r0,1                                  // move to next gain

                andi   r1,0xff

                multi  r1,10                                 // for short 

                nop
                add     r1,r3                                 // pointer move to coefficient zone   
                addi    r1,equalizer_coeff_table
                 
                loop    5,pick_coefficient

                dlhr    r3,r1                                 // for word  
                addi    r1,2                                  // all 5 coefficients  
                shl     r3,8
                movhf  i2,r3                                 // for short style

pick_coefficient:                

                nop
                
pick_coeff_end:

                nop
                 
                j      r6                                    // return  

                nop
//#else
  	        j	  r11

#endif		/* ENABLE_EQUALIZER */

//--------------------------------------------------------------------------
//**************************************************************************
//******************** end of calculate coeffcient subprogramm *************
//**************************************************************************
//--------------------------------------------------------------------------

⌨️ 快捷键说明

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