📄 test.s
字号:
WaitDma
addi r0,32
addi r9,32
read_micro_fifo:
shl r0, 2
#else //EFFECT
movh r0, %mic_data_ptr ; read the current address of pointer
movi ByteSize, 0x3fe ; get 512 data (L/R)
movi StartAddrHigh, 0x0 ; read from the micro Fifo
movi ByteLocal, local_micro_44
dmabrr r0 ; read the micro block.
#endif //EFFECT
;******* update the microphone read pointer ***************************
// addi r0, 0x400
tsti r0, MIC_BUF_END_B
blt no_micro_read_wrap
subi r0, MIC_BUF_SIZE_B
no_micro_read_wrap:
nop
movh %mic_data_ptr, r0
#endif //MICRO
;;;;;; debug;;;;;
// mov r0, TrapReg
// movi r1, 0xc2a0
; dshr r0, r1
//------------- Mic_automute and volume control ----------------------
movi DcacheBase,MEM_SEG
nop
nop
dlw r0,USER_ICFG
nop
andi r0,ICFG_LS128_MASK
tsti r0,ICFG_LS128_MASK
bne need_not_automute_mic
jsr r11,SUB_automute_mic
nop
li r5,0
movi r15,0x128 //r15 as a flag of ls128
j one_micro_vol
need_not_automute_mic:
movi r15,0
dlw r5,mic1_vol ;mic1 (R) volume
one_micro_vol:
dlw r4,mic2_vol ;mic2 (L) volume
//-------------------------------------------------------------------
#if 1 // For microphone volume control
movi AGRAdr0, local_micro_44
movi AGRInc0, 0x2
movi AGRSiz0, 0xffff
movi AGRAdr1, local_micro_44
movi AGRInc1, 0x2
movi AGRSiz1, 0xffff
nop
loop 256,spkfon_vol_adj
mulhf r0, r4, i0 ;mic2
mulhf r2, r5, i0 ;mic1
rndhf i1,r0
rndhf i1,r2
spkfon_vol_adj:
movi DcacheBase, DataSeg
#endif
;******* do the decimation of the input micro phone sequence **********
jsr r11, SUB_presence
;******* Automatic Voice Following ************************************
.extern AVF_CMD_BUF
movi DcacheBase, MEM_SEG
nop
dlw r0,AVF_CMD_BUF
movh r1,%energy_indicator
tsti r0,0
beq avf_done
tsti r1,0
beq avf_done
movi AGRAdr0, 0x0
movi AGRInc0, 0x4
movi AGRSiz0, 0xffff
movi AGRAdr1, 0x2
movi AGRInc1, 0x4
movi AGRSiz1, 0xffff
andi r1,r0,CMD1_AVF_LR_ON
tsti r1,CMD1_AVF_LR_ON
bne chk_avf_left_channel
// AVF_LR_ON: clear L & R
movi r1,0
loop 256,avf_LR_zero
movhf i0,r1
movhf i1,r1
avf_LR_zero:
j avf_done
chk_avf_left_channel:
andi r1,r0,CMD1_AVF_L_ON
tsti r1,CMD1_AVF_L_ON
bne chk_avf_right_channel
// AVF_L_ON: copy R to L
loop 256,avf_R_2_L
movhf r1,i1
movhf i0,r1
avf_R_2_L:
j avf_done
chk_avf_right_channel:
andi r1,r0,CMD1_AVF_R_ON
tsti r1,CMD1_AVF_R_ON
bne avf_done
// AVF_R_ON: copy L to R
loop 256,avf_L_2_R
movhf r1,i0
movhf i1,r1
avf_L_2_R:
avf_done:
//------------- HW_ECHO? ---------------------------------------------
movi DcacheBase,MEM_SEG
nop
nop
dlw r0,USER_ICFG
nop
andi r0,ICFG_HWECHO_MASK
tsti r0,ICFG_HWECHO_MASK
beq total_echo_done
//--------------------------------------------------------------------
;******* 3D spatializer ***********************************************
;******* test if some echo is required ********************************
movhf r0, %echo_com
tstsi r0, 0x0
blt echo_mixing_done2 ; if no echo is required do nothing
;******* do the echo **************************************************
//------------- bypass reverb ? --------------------------------------
movi DcacheBase,MEM_SEG
nop
nop
dlw r0,USER_ICFG
nop
andi r0,ICFG_REVERB_BYPASS_MASK
tsti r0,ICFG_REVERB_BYPASS_MASK
beq no_reverb
//--------------------------------------------------------------------
jsr r11, SUB_echo
nop
no_reverb:
;******* perform the rate conversion on the microphone input **********
jsr r11, SUB_rate
movi DcacheBase, DataSeg
;****** add the echo to the direct input and mix with audio ***********
movi AGRAdr4, local_micro_44
movi AGRInc4, 0x2
movi AGRSiz4, 0xffff
movi AGRAdr5, local_micro_out
movi AGRInc5, 0x2
movi AGRSiz5, 0xffff
movi AGRAdr0, 0x0
movi AGRInc0, 0x2
movi AGRSiz0, 0xffff
// movi r3, 0x7fff
// li r3,0x006fffff
// li r4,0x004fffff
li r3,0x007fffff
li r4,0x007fffff
loop 256, add_echo
mulhf r0, r3, a0(0) ; left audio signal
maddhf r0, r4, a5(0) ; presence (left=right)
nop
rndhf i0, r0 ; left channel=L+0.75*(L-R)^echo
mulhf r0, r3, a0(0) ; right audio signal
// msubhf r0, r4, i5 ; presence (left=right)
maddhf r0, r4, i5 ; ZhangWei:R=R+echo
nop
rndhf i0, r0 ; right channel=R-0.75(L-R)^echo
add_echo:
;******* enable interrupt *******************
movi TrapReg, 0x24
// j echo_mixing_done remove later
echo_mixing_done2:
;******* if no echo is required, just mix microphone with audio data **
#if MICRO
mixing_no_echo:
movi AGRAdr0, 0x0
movi AGRInc0, 0x2
movi AGRSiz0, 0xffff
#ifdef EFFECT
movi AGRAdr4, local_micro_44
movi AGRInc4, 0x2
movi AGRSiz4, 0xffff
#else //EFFECT
movi AGRAdr2, local_micro_44
movi AGRInc2, 0x2
movi AGRSiz2, 0xffff
#endif //EFFECT
// li r2, 0x006fffff
// li r3, 0x004fffff
li r2, 0x007fffff
li r3, 0x003fffff
; movi r2, 0x7fff
;******* desable interrupt **************
; movi TrapReg, 0x0
; nop
; nop
loop 256, mic_mix_no_echo
#ifdef EFFECT
mulhf r0, r2, a0(0)
//tchou maddhf r0, r2, i4
//-------------------------------------------
tsti r15,0x128
bne not_ls128_mix1
maddhf r0, r3, a4(0)
j not_ls128_mix1_done
not_ls128_mix1:
maddhf r0, r3, i4
not_ls128_mix1_done:
//-------------------------------------------
nop
#else //EFFECT
mulhf r0, r2, a0(0)
maddhf r0, r2, i2
#endif //EFFECT
rndhf i0, r0 ; mix left
#ifdef EFFECT
mulhf r0, r2, a0(0)
//tchou maddhf r0, r2, i4
//-------------------------------------------
tsti r15,0x128
bne not_ls128_mix2
maddhf r0, r3, a4(4)
j not_ls128_mix2_done
not_ls128_mix2:
maddhf r0, r3, i4
not_ls128_mix2_done:
//-------------------------------------------
nop
#else //EFFECT
mulhf r0, r2, a0(0)
maddhf r0, r2, i2
#endif //EFFECT
rndhf i0, r0 ; mix right
mic_mix_no_echo:
;******* enable interrupt *****************
; movi TrapReg, 0x24
; nop
#if 0
test_11:
dlw r9,0x9f00
nop
addi r9,1
dsw r9,0x9f00
nop
tsti r9,600
blt keep_going
test_12:
nop
nop
nop
j test_12
keep_going:
#endif
echo_mixing_done:
nop
total_echo_done:
#if 0
;******* synchronise the microphone buffer, even no micro input *******
;******* read the microphone command : micro or not *******************
movhf r0, %micro_com
tstsi r0, 0x0
bgte mic_sync_done ; if micro is required, sync is done
movh r0, %mic_data_ptr ; read the current address of pointer
;******* update the microphone read pointer ***************************
addi r0, 0x400
tsti r0, MIC_BUF_END_B
blt no_micro_sync_wrap
subi r0, MIC_BUF_SIZE_B
no_micro_sync_wrap:
nop
movh %mic_data_ptr, r0
mic_sync_done:
#endif
#endif //MICRO
;;;;;; debug;;;;;
mov r0, TrapReg
movi r1, 0xc2b0
; dshr r0, r1
#endif //?
;******* load a new sequence in PCM_OUT *******************************
//done in pcm_pcm jsr r11, pcm_load
;******* return to main routine ***************************************
;;;;;; debug ;;;;;;
mov r0, TrapReg
movi r1, 0xc270
; dshr r0, r1
j r27 //return
;******* end of pcm_out routine ***************************************
;**********************************************************************
//-------------------------------------------------------------------
SUB_read_data:
// dlw r0, Stream_Rd_Ptr
LdStrRdPtr r0
dlw r1, Stream_End
dlw r2, Stream_Start
movi r3, local_FApcm_buf_word ; word addr
movi DMASize, 31 ;32 words each block
movi BlockSkip, 0
movi BlockSize, 0 ;block size = 1.
shr r0, 2 //to word addr
loop 8, Lget_data
mov LocalAddr, r3
dmarr r0 ;read data from DRAM
wait_dma_21: bdb wait_dma_21
addi r3, 32 ;32 words each block
addi r0, 32
Lget_data:
shl r0, 2 //back to byte addr
tst r0, r1
blt Lno_wrap
mov r0, r2 //wraping to start
Lno_wrap:
// dsw r0, Stream_Rd_Ptr //update Rd_Ptr
SvStrRdPtr r0
movw LWibufRdPtr,r0
#if LS388
rswi r0, Comm_Reg3 //for host
andi r1,r0,0xffff
movh r3,LIold_rd_ptr
tst r1,r3
bgte 1f
addi r1,PCM_IBUF_SIZE
1: sub r1,r3
movh LIold_rd_ptr,r0
movw r3,LWbytecount
add r3,r1
movw LWbytecount,r3
#endif // LS388
// update block count
movb r1,LBblknum
addi r1,1
tsti r1, 6
blte blk_ok
movi r1,1 ; starts with 1
blk_ok:
movb LBblknum,r1
j r27 //return
//*********************** Mic auto_mute for LS128 ******************
//ZhangWei:for ls128,L = R
SUB_automute_mic:
movi DcacheBase, MEM_SEG
movi AGRAdr0,local_micro_44
movi AGRInc0,2
movi AGRInc0,0xffff
dlh r3,mute_num_mic
movhf r6,%dc_offset_44
nop
tsti r3,0xa
beq dcoff44
loop 256,dcoff44
movhf r2,a0(4)
sub r2,r6
shra r2,11
add r6,r2
dcoff44:
nop
movi AGRAdr0,local_micro_44
movi r1,0
loop 256,test_mute_mic
movhf r2,a0(4)
sub r2,r6
abs r2,r2
shr r2,8
// dsw r2,0xff90 //debug
tsti r2,0x1000
blt tst_m0_mic
movi r1,1
tst_m0_mic:
nop
test_mute_mic:
movhf %dc_offset_44,r6
tsti r1,0
beq add_mute_num_mic
movi r0,0
dsh r0,mute_num_mic
j test_mute_end_mic
add_mute_num_mic:
dlh r0,mute_num_mic
nop
nop
addi r0,1
tsti r0,0xa
bgt mute_mic
dsh r0,mute_num_mic
j test_mute_end_mic
mute_mic:
movi AGRAdr0,local_micro_44
nop
loop 256,mute_mic_done
movhf a0(2),r6 //mute
movhf a0(2),r6 //mute
nop
mute_mic_done:
movi r0,0xa
dsh r0,mute_num_mic
test_mute_end_mic:
nop
j r11
nop
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -