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