📄 equalizer.s
字号:
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 + -