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

📄 clida.s54

📁 This R2.9 revision of the CLID detector provides the TYPE 1 (on-hook, between first and second ring,
💻 S54
字号:
*-------------------------------------------------------------------------*
*                                                                         *
*   THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY   *
*   INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:    *
*      "COPYRIGHT 2001 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED"          *
*                                                                         *
*-------------------------------------------------------------------------*/
	.mmregs
	.include "clidi.h54"

*--------------------- local defs ----------------------------------------*/

_CORR   			.set 	(22*170+2*17)

	.sect ".ftext"
en2log		.macro added
	add		#1, a
	exp		a
	ld		#(0x780+added), b
	norm	a
	ld		a, -16, a
	add		a, -5, b
	mac		#-512, b, a
	.endm

*--------------------- public vars ---------------------------------------*/
*--------------------- local vars ----------------------------------------*/
*--------------------- local functions -----------------------------------*/
;-------------------------------------------------------------------------
	.global				__en2log
;	.sym _cpd_en2log, _cpd_en2log, 32, 2, 0
;-------------------------------------------------------------------------
__en2log
;	S32 slEn 	= a
;
	ssbx	sxm
	add		#1, a
	exp		a
	ld		#0, b
	norm	a
	ld		a, -16, a
	add		a, -5, b
	mac		#-512, b, a
	ret

*-------------------------------------------------------------------------*/
	.global	_clid_move_data_in
	.sym _clid_move_data_in, _clid_move_data_in, 32, 2, 0
_clid_move_data_in
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb,		a
;CLID_tSc *pSc,		sp(1)
;S16 *psIn			sp(2)
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	
	ld  	*ar2(#(CLID_tDb.sCurrBitLen)), a;
	stl 	a, *ar3(#(CLID_tSc.sCurrBitLen));

	ld 		*ar2(#(CLID_tDb.sBits)), a;
	stl 	a, *ar3(#(CLID_tSc.sBits));

	ld 		*ar2(#(CLID_tDb.sAlignment)), a;
	stl 	a, *ar3(#(CLID_tSc.sAlignment));

	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asBpSav))
	mar		*+ar5(#(CLID_tSc.asBp))
	rpt		#(CLID_BPF_SSZ-1)
		mvdd 	*ar4+, *ar5+;
		
	mvdk	*ar2(#(CLID_tDb.Cfg.sNormShift)), t
	mvdk 	*sp(2), ar4
	stm		#(ICLID_FR_SZ-1), brc
	rptb	L_clid_move_data_in-1
		ld 		*ar4+, ts, a
		stl 	a, *ar5+
L_clid_move_data_in	

	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asLpISav));
	mar		*+ar5(#(CLID_tSc.asLpI));
	rpt 	#(CLID_LPF_SSZ-1);
		mvdd 	*ar4+, *ar5+;
		
	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asLpQSav));
	mar		*+ar5(#(CLID_tSc.asLpQ));
	rpt 	#(CLID_LPF_SSZ-1);
		mvdd	*ar4+, *ar5+;

	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asMfISav));
	mar		*+ar5(#(CLID_tSc.asMfI));
	rpt 	#(CLID_MF_SSZ-1);
		mvdd 	*ar4+, *ar5+;

	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asMfQSav));
	mar		*+ar5(#(CLID_tSc.asMfQ));
	rpt 	#(CLID_MF_SSZ-1);
		mvdd	*ar4+, *ar5+;
		
	mvmm	ar2, ar4
	mvmm	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asOutSav));
	mar		*+ar5(#(CLID_tSc.asOut));
	rpt 	#(CLID_OUT_SSZ-1);
		mvdd	*ar4+, *ar5+;
		
	ret;
;
*-------------------------------------------------------------------------*/
	.global _clid_bp_filter
	.sym _clid_bp_filter, _clid_bp_filter, 32, 2, 0
_clid_bp_filter
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb,				a
;CLID_tSc *pSc				sp(1)
;
	mvdk	*sp(1), ar2
	ssbx	sxm
	mvmm	ar2, ar3	
	mar		*+ar3(#(CLID_tSc.asBp));
	mvmm	ar2, ar4	
	mar		*+ar4(#(CLID_tSc.asLpI + CLID_LPF_SSZ));
	mvmm	ar2, ar5	
	mar		*+ar5(#(CLID_tSc.asLpQ + CLID_LPF_SSZ));

	stm		#(ICLID_FR_SZ-1), brc
	rptb	L_clid_bp_filter-1
		rptz	a, #CLID_BPF_SZ-1
			macp 	*ar3+, _CLID_asBpfI, a
		add 	#1, 14, a
		sth 	a, 1, *ar4+
		mar		*+ar3(#(-CLID_BPF_SZ)) 
		
		rptz	a, #CLID_BPF_SZ-1
			macp 	*ar3+, _CLID_asBpfQ, a
		add 	#1, 14, a
		sth 	a, 1, *ar5+
		mar		*+ar3(#(1-CLID_BPF_SZ)) 
L_clid_bp_filter	
    ret;

*-------------------------------------------------------------------------*/
	.global _clid_convert_baseband
	.sym _clid_convert_baseband, _clid_convert_baseband, 32, 2, 0
_clid_convert_baseband
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb,			xar0
;CLID_tSc *pSc			xar1
;
	mvdk	*sp(1), ar2
	ssbx	sxm
	ssbx	frct

	mvmm	ar2, ar3
	mar		*+ar3(#(CLID_tSc.asLpI + CLID_LPF_SSZ));
	mvmm	ar2, ar4
	mar		*+ar4(#(CLID_tSc.asLpQ + CLID_LPF_SSZ));
	stm		#_CLID_as1700, ar5
	stlm 	a, ar2
	nop
	nop
	mar		*+ar2(#(CLID_tDb.sEven))
	bitf	*ar2, #1;
	stm		#20, ar0			; latency for xc
	xc		2, tc
		mar		*+ar5(#40)
	xorm	#1, *ar2
		
	stm		#0, bk
	stm		#(ICLID_FR_SZ-1), brc
	rptb 	L_clid_convert_baseband-1
		mpy 	*ar4, *ar5, a
		mpy 	*ar3, *ar5+0%, b
		masr	*ar3, *ar5, a 	
		macr	*ar4, *ar5, b
		sth 	a, *ar3+
		sth 	b, *ar4+
		mar 	*+ar5(#(-19))
L_clid_convert_baseband	
	rsbx	frct
	ret;	


*-------------------------------------------------------------------------*/
	.global _clid_resample_6k
	.sym _clid_resample_6k, _clid_resample_6k, 32, 2, 0
_clid_resample_6k
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb,			a
;CLID_tSc *pSc			sp(1)
;
	mvdk	*sp(1), ar4
	ssbx	sxm
	ssbx	frct
	pshm	ar6
	nop
	nop
	mvmm	ar4, ar2
	mar		*+ar2(#(CLID_tSc.asLpI));				psFromI
	mvmm	ar4, ar3
	mar		*+ar3(#(CLID_tSc.asLpQ));				psFromQ
	mvmm	ar4, ar5
	mar		*+ar5(#(CLID_tSc.asMfI+CLID_MF_SSZ));	psToI
	mvmm	ar4, ar6
	mar		*+ar6(#(CLID_tSc.asMfQ+CLID_MF_SSZ));	psToQ
	
	stm		#(_CLID_asLpf24 + 2), ar4
	stm		#3, ar0
	stm		#0, bk
	stm		#(ICLID_FR_SZ/4-1), brc
	rptb	L_clid_resample_6k - 1
; pair 0
; I	
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar2+, *ar4+0%, a
		macr		*ar2+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3))
		mar		*+ar2(#(1-CLID_LPF_SZ))
		sth		a, *ar5+
; Q		
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar3+, *ar4+0%, a
		macr		*ar3+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3-1))
		mar		*+ar3(#(1-CLID_LPF_SZ))
		sth		a, *ar6+
; pair 1
; I
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar2+, *ar4+0%, a
		macr		*ar2+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3))
		mar		*+ar2(#(1-CLID_LPF_SZ))
		sth		a, *ar5+
;Q		
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar3+, *ar4+0%, a
		macr		*ar3+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3-1))
		mar		*+ar3(#(1-CLID_LPF_SZ))
		sth		a, *ar6+
;pair 2		
;I
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar2+, *ar4+0%, a
		macr		*ar2+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3))
		mar		*+ar2(#(2-CLID_LPF_SZ))
		sth		a, *ar5+
;Q		
		rptz	a, #CLID_LPF_SZ-2
			mac		*ar3+, *ar4+0%, a
		macr		*ar3+, *ar4+0%, a
		mar		*+ar4(#(-CLID_LPF_SZ*3+2))
		mar		*+ar3(#(2-CLID_LPF_SZ))
		sth		a, *ar6+
L_clid_resample_6k	
	popm ar6
	rsbx	frct
	ret;

*-------------------------------------------------------------------------*/
	.global _clid_matched_filter
	.sym _clid_matched_filter, _clid_matched_filter, 32, 2, 0
_clid_matched_filter
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= a
;CLID_tSc *pSc	= sp(1)
;
	mvdk	*sp(1), ar2
	ssbx	sxm
	nop
	frame	#-4
	
	mvmm	ar2, ar3
	mar		*+ar3(#(CLID_tSc.asMfI));				psFromI
	mvmm	ar2, ar4
	mar		*+ar4(#(CLID_tSc.asMfQ));				psFromQ
	mvmm	ar2, ar5
	mar		*+ar5(#(CLID_tSc.asOut+CLID_OUT_SSZ));	psTo
	
	stm		#(CLID6_FR_SZ - 1), brc
	rptb	L_clid_matched_filter-1
	
		rptz	a, #CLID_MF_SZ-1
			macp	*ar3+, #_CLID_asMfI, a
		sth		a, *sp(0)
		mar		*+ar3(#(-CLID_MF_SZ))

		rptz	a, #CLID_MF_SZ-1
			macp	*ar4+, #_CLID_asMfI, a
		sth		a, *sp(1)
		mar		*+ar4(#(-CLID_MF_SZ))
		
		rptz	a, #CLID_MF_SZ-1
			macp	*ar3+, #_CLID_asMfQ, a
		sth		a, *sp(2)
		mar		*+ar3(#(1-CLID_MF_SZ))

		rptz	a, #CLID_MF_SZ-1
			macp	*ar4+, #_CLID_asMfQ, a
		sth		a, *sp(3)
		mar		*+ar4(#(1-CLID_MF_SZ))
		
		ld 		*sp(1), t
		mpy		*sp(2), b
		ld 		*sp(0), t
		mas 	*sp(3), b
		
		abs 	b, a
		add 	#1, a
		exp		a
		nop
		norm	a
		ld 		a, -5, a
		ld 		a, -16, a
		mac 	#-512, a
		add 	#30*512, a
		
		xc 		1, blt
			neg 	a
		xc 		1, beq
			ld 		b, a
		add 	*ar2(#(CLID_tSc.sAlignment)), a
		stl 	a, *ar5+
L_clid_matched_filter	
	frame	#4

	mar 	*ar5-;
	rptz 	a, #(CLID6_FR_SZ-1)
		add 	*ar5-, a
	add 	#1, 8, a
	stl 	a, -9, *ar2(#(CLID_tSc.sAverage))	
	ret;

*-------------------------------------------------------------------------*/
	.global _clid_match_byte
	.sym _clid_match_byte, _clid_match_byte, 32, 2, 0
_clid_match_byte
*-------------------------------------------------------------------------*/
; S16 *psIn		= a
; U16 *puByte 	= sp(1) (where to put uByte)
;
	stlm	a, ar2
	ssbx	sxm
	ld 		#0, a
	mvdk	*sp(1), ar3
	mvmm 	ar2, ar4
	mar 	*+ar4(#(-2))
	stm		#(10-1), brc
	frame 	#-1
	stm		#5, ar0
	stm		#0, bk
	st 		#1, *sp(0)	; mask
	st 		#0, *ar3
	rptb	L_clid_match_byte-1
		rptz 	b, #(5-1)
			macp	*ar4+, _CLID_asShape, b
		bit 	*ar2+0%, 15-15
		sub	 	b, a
		nop
		xc 		1, ntc
			add		b, 1, a
		ld 		*ar3, b
		xc 		1, ntc
			or		*sp(0), b
		stl 	b, *ar3
		ld 		*sp(0), b
		ld 		b,1,b
		stl 	b, *sp(0)
L_clid_match_byte	
	nop
	frame 	#1
	ld 		a, -8, a
	ret		
	
*-------------------------------------------------------------------------*/
	.global _clid_move_data_out
	.sym _clid_move_data_out, _clid_move_data_out, 32, 2, 0
_clid_move_data_out
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb 	= a
;CLID_tSc *pSc	= sp(1)
;
	stlm	a, ar2
	ssbx	sxm
	nop
	mvdk	*sp(1), ar3
	
	ld 		*ar3(#(CLID_tSc.sCurrBitLen)), a;
	stl 	a, *ar2(#(CLID_tDb.sCurrBitLen));

	ld 		*ar3(#(CLID_tSc.sBits)), a;
	stl 	a, *ar2(#(CLID_tDb.sBits));

	ld 		*ar3(#(CLID_tSc.sAlignment)), a;
	stl 	a, *ar2(#(CLID_tDb.sAlignment));

	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asBpSav));
	mar		*+ar5(#(CLID_tSc.asBp+ICLID_FR_SZ));
	rpt 	#(CLID_BPF_SSZ-1)
		mvdd 	*ar5+, *ar4+;

	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asLpISav));
	mar		*+ar5(#(CLID_tSc.asLpI+ICLID_FR_SZ));
	rpt 	#(CLID_LPF_SSZ-1)
		mvdd	*ar5+, *ar4+;
		
	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asLpQSav));
	mar		*+ar5(#(CLID_tSc.asLpQ+ICLID_FR_SZ));
	rpt 	#(CLID_LPF_SSZ-1)
		mvdd	*ar5+, *ar4+;

	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asMfISav));
	mar		*+ar5(#(CLID_tSc.asMfI+CLID6_FR_SZ));
	rpt 	#(CLID_MF_SSZ-1)
		mvdd	*ar5+, *ar4+;

	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asMfQSav));
	mar		*+ar5(#(CLID_tSc.asMfQ+CLID6_FR_SZ));
	rpt 	#(CLID_MF_SSZ-1)
		mvdd	*ar5+, *ar4+;

	mvmm 	ar2, ar4
	mvmm 	ar3, ar5
	mar		*+ar4(#(CLID_tDb.asOutSav));
	mar		*+ar5(#(CLID_tSc.asOut+CLID6_FR_SZ));
	rpt 	#(CLID_OUT_SSZ-1)
		mvdd	*ar5+, *ar4+;
		
	ret;
;
;

⌨️ 快捷键说明

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