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

📄 gaecfba.s54

📁 TI公司DSP/tms320c55x/tms320c54x系列的声学回声消除代码
💻 S54
字号:
*-------------------------------------------------------------------------*
*                                                                         *
*   THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY   *
*   INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:    *
*      "COPYRIGHT 2003 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED"         *
*                                                                         *
*-------------------------------------------------------------------------*/
	.mmregs
	.include "gaeci.h54"
	.sect ".ftext3"

;-------------------------------------------------------------------------
	.global _gaec_fb_snd_analysis
;-------------------------------------------------------------------------
_gaec_fb_snd_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
; S16 *psIn
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
;
; shift old data	
	mvmm	ar2, ar4
	mar		*+ar4(#GAEC_tDb.asSbuf)
	mvmm	ar2, ar5
	mar		*+ar5(#GAEC_tDb.asSbuf+GAEC_FR_SZ)
	rpt		#(GAEC_SBUF_SZ-GAEC_FR_SZ)-1
		mvdd 	*ar5+, *ar4+	; from -> to
;
; add new data
	mvdk	*sp(2), ar5
	rpt		#GAEC_FR_SZ-1
		mvdd	*ar5+, *ar4+
		
;
; loop for all blks
; ar2 -> coeffs
; ar3 -> psTmp
; ar4 -> psFrom
; ar7 -> psTo
;
	pshm	ar6
	pshm	ar7
	orm		#1, *(pmst)
	mvmm	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.asSbuf)
	mvmm	ar3, ar7	
	mar		*+ar7(#GAEC_tSc.aasSin)
	stm		#_GAEC_aasFBS, ar2
	stm		#GAEC_BLKS-1, ar6
	stm		#GAEC_BLKS, ar0
	mar 	*+ar3(#GAEC_tSc.u.asTmp)
F10	
;	
; symmetric						
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBS_SZ-1))
		stm		#GAEC_FBS_SZ/2-1, brc
		rptb	F11-1
			add	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
F11
		mar 	*+ar3(#(-GAEC_FBS_SZ/2))
		mar 	*+ar4(#(-GAEC_FBS_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	F12-1
			rptz	a, #(GAEC_FBS_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add		#1, 14,  a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBS_SZ/2)
F12		
;
; asymmetric
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBS_SZ-1))
		stm		#GAEC_FBS_SZ/2-1, brc
		rptb	F13-1
			sub	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
F13
		mar 	*+ar4(#(-GAEC_FBS_SZ/2))
		mar 	*+ar3(#(-GAEC_FBS_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	F14-1
			rptz	a, #(GAEC_FBS_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add 	#1, 14, a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBS_SZ/2)
F14	
	.if 0
	.endif
		mar		*+ar7(#-(GAEC_BLKS*(2*GAEC_BANDS)-1))
		mar 	*+ar4(#GAEC_BLK_SZ)
		mar 	*+ar2(#-GAEC_FBS_SZ*GAEC_BANDS)
	banz	F10, *ar6-

	andm	#~1, *(pmst)
	popm	ar7
	popm	ar6
	ret
	
;-------------------------------------------------------------------------
	.global _gaec_fb_rcv_analysis
;-------------------------------------------------------------------------
_gaec_fb_rcv_analysis
; GAEC_tDb *pDb,
; GAEC_tSc *pSc, 
; S16 *psIn
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
;
; loop for all blks
; ar2 -> coeffs
; ar3 -> psTmp
; ar4 -> psFrom
; ar7 -> psTo
;
	pshm	ar6
	pshm	ar7
	orm		#1, *(pmst)
	mvmm	ar2, ar4
	mar 	*+ar4(#GAEC_tDb.asRbuf)
	
	mvdk	*ar2(#GAEC_tDb.psRcv), ar7	
	mar		*+ar7(#GAEC_RCV_SZ-GAEC_BLKS)
	stm		#_GAEC_aasFBR, ar2
	stm		#GAEC_BLKS-1, ar6
	stm		#GAEC_RCV_SZ, ar0
	mar 	*+ar3(#GAEC_tSc.u.asTmp)
F20	
;	
; symmetric						
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBR_SZ-1))
		stm		#GAEC_FBR_SZ/2-1, brc
		rptb	F21-1
			add	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
F21
		mar 	*+ar3(#(-GAEC_FBR_SZ/2))
		mar 	*+ar4(#(-GAEC_FBR_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	F22-1
			rptz	a, #(GAEC_FBR_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add		#1, 14,  a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBR_SZ/2)
F22		
;
; asymmetric
		mvmm	ar4, ar5
		mar		*+ar5(#(GAEC_FBR_SZ-1))
		stm		#GAEC_FBR_SZ/2-1, brc
		rptb	F23-1
			sub	 	*ar4+, *ar5-, a
			sth 	a, *ar3+
F23
		mar 	*+ar4(#(-GAEC_FBR_SZ/2))
		mar 	*+ar3(#(-GAEC_FBR_SZ/2))
		stm		#GAEC_BANDS-1, brc
		rptb	F24-1
			rptz	a, #(GAEC_FBR_SZ/2)-1
				mac		*ar3+, *ar2+, a
			add 	#1, 14, a
			sth		a, 1, *ar7+0
			mar 	*+ar3(#-GAEC_FBR_SZ/2)
F24	
	.if 0
	.endif
		mar		*+ar7(#-(GAEC_RCV_SZ*(2*GAEC_BANDS)-1))
		mar 	*+ar4(#GAEC_BLK_SZ)
		mar 	*+ar2(#-GAEC_FBR_SZ*GAEC_BANDS)
	banz	F20, *ar6-

	andm	#~1, *(pmst)
	popm	ar7
	popm	ar6
	ret	
	
	.if 1
;-------------------------------------------------------------------------
	.global	_gaec_fb_synthesis
;-------------------------------------------------------------------------
_gaec_fb_synthesis
; S16 ppsErr[][GAEC_ERR_SZ] = a /ar5
; S16 *psSout 		= sp(1)			/ ar7
;
	pshm	ar7
	pshm	ar6
	pshm	ar1
	stlm	a, ar5
	ssbx	sxm
	orm		#1, *(pmst)
	mvdk	*sp(1+3), ar7
	
	
	stm		#(GAEC_BLKS-1), ar6
	stm 	#(GAEC_ERR_SZ - GAEC_LFCTR+1), ar0
	stm		#0, bk
	; cycle for blks
F30
		stm		#(GAEC_BLK_SZ/2-1), ar1
		stm 	#(_GAEC_aasFBX + GAEC_FBZ_SZ*         0), ar3;	
		stm		#(_GAEC_aasFBX + GAEC_FBZ_SZ*GAEC_BANDS), ar4;
F31		
		; cycle for k within the blk
			mvmm	ar5, ar2
			stm		#(2*GAEC_BANDS-1), brc
			ld 		#0, a
			ld 		#0, b
			rptb 	F32-1 ; cycle for bands
				.loop (GAEC_LFCTR-1) ; cycle for n
					mac 	*ar3+, *ar2, a
					mac		*ar4+, *ar2+, b;
				.endloop
				mac		*ar3+, *ar2, a
				mac		*ar4+, *ar2+0%, b
F32			
			; round & save results
			add 	#1, 14, a
			add 	#1, 14, b
			sth 	a, 1, *ar7+ 
			sth		b, 1, *ar7+
		banz	F31, *ar1-
		mar 	*ar5+;
		mar 	*+ar3(#(-GAEC_FBZ_SZ*GAEC_BANDS))
		mar 	*+ar4(#(-GAEC_FBZ_SZ*GAEC_BANDS))
	
	banz	F30, *ar6-
	
	andm	#~1, *(pmst)
	popm	ar1
	popm	ar6
	popm	ar7
	ret			
	
	.else
			
;-------------------------------------------------------------------------
	.global	_gaec_fb_snd_synthesis
;-------------------------------------------------------------------------
_gaec_fb_snd_synthesis
; GAEC_tDb *pDb		= a
; S16 ppsErr[][GAEC_ERR_SZ] = sp(1) /ar0
; S16 *psSout 		= sp(2)			/ ar1
;
	pshm	ar7
	pshm	ar6
	pshm	ar1
	ssbx	sxm
	orm		#1, *(pmst)
	
	stm		#-GAEC_BLK_SZ, ar0
	stm		#GAEC_BLKS-1, ar7
	stm		#0, bk
	
	mvdk	*sp(4), ar4
	mvdk	*sp(5), ar1
F43	
		stm		#_GAEC_aasFBZ + (GAEC_FBZ_SZ - GAEC_BLK_SZ), ar2
		stm		#GAEC_BLK_SZ-1, ar6	
F42	
			stm		#GAEC_BANDS*2-1, brc
			ld 		#0, a
			rptb	F41-1
				rpt		#GAEC_LFCTR	-1
					mac 	*ar4+, *ar2+0%, a
;
; next band		
				mar 	*+ar4(#GAEC_BLKS-1)
				mar 	*+ar2(#(GAEC_FBZ_SZ+GAEC_LFCTR*GAEC_BLK_SZ))
F41	
			add		#1, 14, a
			sth		a, 1, *ar1+
;
; next tap in out blk
			mar		*+ar2(#-GAEC_FBZ_SZ*2*GAEC_BANDS+1)
			mar 	*+ar4(#-GAEC_ERR_SZ*2*GAEC_BANDS)
		banz	F42, *ar6-
;
; next blk in output
		mar	*ar4+		; start from the next element
	banz	F43, *ar7-
	
	andm	#~1, *(pmst)
	popm	ar1
	popm	ar6
	popm	ar7
	ret			
		
	.endif

⌨️ 快捷键说明

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