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