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

📄 test.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 S
📖 第 1 页 / 共 5 页
字号:
		rndhf	i1,r2
spkfon_vol_adj:
		movi	DcacheBase, DataSeg
		
#endif

/*===================================================================================*\
**	record
\*-----------------------------------------------------------------------------------*/	
#ifdef ENABLE_REREAD
		nop
		jsr     r11,SUB_record
		nop
		jsr     r11,SUB_play                  // first do record  
		nop
#if 0
		movi	AGRAdr0, 0
		movi	AGRSiz0, 0xffff	
		nop
		movi    r0,0	
                loop    0,clear_pcm_data1
                mov     a0(4),r0
                nop
                nop
clear_pcm_data1:
                nop
#endif                
#endif /* ENABLE_REREAD */                

//====================================================================================

;******* 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
		bne	clear_micro_done
		
		movi	AGRAdr4, local_micro_44
		movi	AGRInc4, 0x2
		movi	AGRSiz4, 0xffff

		movi	AGRAdr5, local_DL1FB
		movi	AGRInc5, 0x2
		movi	AGRSiz5, 0xffff
		
		movi	r0,0
		loop	256,clear_micro_done1
		mov	a4(4),r0
clear_micro_done1:
		nop
		loop	32,clear_micro_done
		mov	a4(4),r0
clear_micro_done:		
//--------------------------------------------------------------------

;******* 3D spatializer ***********************************************
;******* test if some echo is required ********************************
		movhf	r0, %echo_com		;tchou
		tstsi	r0, 0x0
		blte	echo_mixing_done2	; if no echo is required do nothing
//		blt		echo_mixing_done	; 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,0x007fffff
		li		r4,0x007fffff

#if	0
		dlw		r5,mic1_vol			;mic1 (R) volume
		dlw		r4,mic2_vol			;mic2 (L) volume
		tst		r5,r4
		blt		get_higher_gain		;r4 has higher gain
		mov		r4,r5
get_higher_gain:
#endif

		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,0x007fffff		;7fffff
		li	r3,0x005fffff		;2fffff

		loop	256, mic_mix_no_echo
#ifdef	EFFECT
		mulhf	r0, r2, a0(0)			
//tchou		maddhf	r0, r2, i4			
//-------------------------------------------
		tsti	r15,FLAG_LS128
		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,FLAG_LS128
		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

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		;tchou
//		dlw		r0,micro_com
//		nop
		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

//*********************************************************
#if	AUTO_MUTE
		jsr	r11,SUB_Automute
#endif
//*********************************************************

#endif	//?

;******* load a new sequence in PCM_OUT *******************************

//done in pcm_pcm		jsr	r11, pcm_load

;******* return to main routine ***************************************

		j	r27		//return

;******* end of pcm_out routine ***************************************
;**********************************************************************

//-------------------------------------------------------------------
SUB_read_data:
	dlw	r0, Stream_Rd_Ptr
	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

// 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
#if	1
SUB_automute_mic:
	movi	DcacheBase, MEM_SEG
        mov    r7,AGRSiz0
        movi	AGRAdr0,local_micro_44
        movi	AGRSiz0,0xffff
	movi	AGRInc0,2
	
	dlh	r3,mute_num_mic
	nop
//	movhf	r6,%dc_offset_44
	dlw	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	AGRSiz0,0xffff        
	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
	dsw	r6,dc_offset_44
	
	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
        movi	AGRSiz0,0xffff
        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
        mov    AGRSiz0,r7     //recover AGRSize0, if not, echo not work
	j	r11
	nop
	nop

#endif

//***************************  automute  *****************************
//ZhangWei:for VCD test Disc
#if	AUTO_MUTE
SUB_Automute:
	movi	DcacheBase, MEM_SEG
//	mov	AGRAdr0,r3
	movi	AGRAdr0,0x0
	movi	r1,0
	loop	256,test_mute
	mov	r0,a0(4)
	shra	r2,r0,16
	shl	r0,16
	shra	r0,16
	abs	r0,r0
	abs	r2,r2	
//	tsti	r0,3
	tsti	r0,0x10
	bgt	tst_m0
//	tsti	r2,3
	tsti	r2,0x10
	bgt	tst_m0
	j	tst_m1
tst_m0:	
	movi	r1,1
tst_m1:
	nop
test_mute:
	tsti	r1,0
	beq	add_mute_num
	movi	r0,0
	dsh	r0,mute_num
#if	1
	rlwi	r0,0x44>>2
	nop
	nop
	ori	r0,0x1000
	rswi	r0,0x44>>2
#endif
	j	test_mute_end
add_mute_num:
	dlh	r0,mute_num
	nop
	addi	r0,1
	nop
	tsti	r0,0x20
	bgt	send_mute_msg
	dsh	r0,mute_num
	j	test_mute_end
send_mute_msg:
#if	1
	rlwi	r0,0x44>>2
	nop
	nop
	andi	r0,0xefff
	rswi	r0,0x44>>2
#endif	
	movi	r0,0x20
	dsh	r0,mute_num
test_mute_end:
	nop
	j	r11
#endif
//********************************************************************	

⌨️ 快捷键说明

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