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

📄 clida.s55

📁 用c语言写的基于TI的DSP平台的FSK制式的来电显示(CLID)的算法程序
💻 S55
📖 第 1 页 / 共 2 页
字号:
*-------------------------------------------------------------------------*/
	.global _clid_move_data_out
;	.sym _clid_move_data_out, _clid_move_data_out, 32, 2, 0
_clid_move_data_out
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb 	= xar0
;CLID_tSc *pSc	= xar1
;
	ac0 = *ar1(#(CLID_tSc.sCurrBitLen));
	*ar0(#(CLID_tDb.sCurrBitLen)) = ac0;

	ac0 = *ar1(#(CLID_tSc.sBits));
	*ar0(#(CLID_tDb.sBits)) = ac0;

	ac0 = *ar1(#(CLID_tSc.sAlignment));
	*ar0(#(CLID_tDb.sAlignment)) = ac0;

	xar2 = mar(*ar0(#(CLID_tDb.asBpSav)));
	xar3 = mar(*ar1(#(CLID_tSc.asBp+ICLID_FR_SZ)));
	repeat (#(CLID_BPF_SSZ-1))
		*ar2+ = *ar3+;

	xar2 = mar(*ar0(#(CLID_tDb.asLpISav)));
	xar3 = mar(*ar1(#(CLID_tSc.asLpI+ICLID_FR_SZ)));
	repeat (#(CLID_LPF_SSZ-1))
		*ar2+ = *ar3+;
		
	xar2 = mar(*ar0(#(CLID_tDb.asLpQSav)));
	xar3 = mar(*ar1(#(CLID_tSc.asLpQ+ICLID_FR_SZ)));
	repeat (#(CLID_LPF_SSZ-1))
		*ar2+ = *ar3+;

	xar2 = mar(*ar0(#(CLID_tDb.asMfISav)));
	xar3 = mar(*ar1(#(CLID_tSc.asMfI+CLID6_FR_SZ)));
	repeat (#(CLID_MF_SSZ-1))
		*ar2+ = *ar3+;

	xar2 = mar(*ar0(#(CLID_tDb.asMfQSav)));
	xar3 = mar(*ar1(#(CLID_tSc.asMfQ+CLID6_FR_SZ)));
	repeat (#(CLID_MF_SSZ-1))
		*ar2+ = *ar3+;

	xar2 = mar(*ar0(#(CLID_tDb.asOutSav)));
	xar3 = mar(*ar1(#(CLID_tSc.asOut+CLID6_FR_SZ)));
	repeat (#(CLID_OUT_SSZ-1))
		*ar2+ = *ar3+;
		
	return;

*-------------------------------------------------------------------------*/
	.global _clid_cas_bp_filter
_clid_cas_bp_filter
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc	= xar1
;S16 *psIn		= xar2
;
	pshboth(xar5)
	t0   = *ar0(#(CLID_tDb.Cfg.sNormShift));
	t1   = *ar0(#(CLID_tDb.sCasIdx));
	xar3 = mar(*ar1(#(CLID_tSc.asCasBp)));
	xar4 = mar(*ar0(#(CLID_tCasDb.asBpSav)));
	repeat (#(CLID_CAS_FD_SSZ))
		*ar3+ = *ar4+;
	brc0 = #(ICLID_FR_SZ);
	localrepeat {
		ac0 = *ar2+ << t0;
		*ar3+ = ac0;
	}
	
	xcdp = mar(*ar1(#(CLID_tSc.asCasBp))); psFrom
	xar2 = mar(*ar0(#(CLID_tCasDb.asLoI + CLID_CAS_FD_SSZ))); psToI
	xar3 = mar(*ar0(#(CLID_tCasDb.asLoQ + CLID_CAS_FD_SSZ))); psToI
	xar4 = #_CLID_asCasLoI;	
	xar5 = #_CLID_asCasLoQ;	
	mar (ar3 + t1);
	mar (ar4 + t1);
	ac0 = *ar4+ * coef(*cdp+),
	ac1 = *ar5+ * coef(*cdp+);
	|| repeat (#(CLID_CAS_BP_ASZ-2))
		ac0 = ac0 + (*ar4+ * coef(*cdp+)),
		ac1 = ac1 + (*ar5+ * coef(*cdp+));
	*ar2 = HI(rnd(ac0 << #1));
	*ar3 = HI(rnd(ac1 << #1));
	
	xcdp = mar(*ar1(#(CLID_tSc.asCasBp))); psFrom
	xar2 = mar(*ar0(#(CLID_tCasDb.asHiI + CLID_CAS_FD_SSZ))); psToI
	xar3 = mar(*ar0(#(CLID_tCasDb.asHiQ + CLID_CAS_FD_SSZ))); psToI
	xar4 = #_CLID_asCasHiI;	
	xar5 = #_CLID_asCasHiQ;	
	mar (ar3 + t1);
	mar (ar4 + t1);
	ac0 = *ar4+ * coef(*cdp+),
	ac1 = *ar5+ * coef(*cdp+);
	|| repeat (#(CLID_CAS_BP_ASZ-2))
		ac0 = ac0 + (*ar4+ * coef(*cdp+)),
		ac1 = ac1 + (*ar5+ * coef(*cdp+));
	*ar2 = HI(rnd(ac0 << #1));
	*ar3 = HI(rnd(ac1 << #1));

	xar4 = mar(*ar0(#(CLID_tCasDb.asBpSav)));
	xar5 = mar(*ar1(#(CLID_tSc.asBp + ICLID_FR_SZ)));
	repeat (#(CLID_CAS_BP_SSZ-1))
		*ar4+ = *ar5+;
	xar5 = popboth();
	return;
*-------------------------------------------------------------------------*/
	.global _clid_cas_move_data_in
_clid_cas_move_data_in
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc	= xar1
;
	xar2 = mar(*ar0(#(CLID_tCasDb.asLoI)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasLoI)));
	repeat (#(CLID_CAS_FD_ASZ-1))
		*ar3+ = *ar2+;
		
	xar2 = mar(*ar0(#(CLID_tCasDb.asLoQ)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasLoQ)));
	repeat (#(CLID_CAS_FD_ASZ-1))
		*ar3+ = *ar2+;

	xar2 = mar(*ar0(#(CLID_tCasDb.asHiI)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasHiI)));
	repeat (#(CLID_CAS_FD_ASZ-1))
		*ar3+ = *ar2+;
		
	xar2 = mar(*ar0(#(CLID_tCasDb.asHiQ)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasHiQ)));
	repeat (#(CLID_CAS_FD_ASZ-1))
		*ar3+ = *ar2+;
		
	ac0 = *ar0(#(CLID_tDb.uCasReg));
	ac0 = ac0 << #1;
	*ar0(#(CLID_tDb.uCasReg)) =  ac0;
	return;

*-------------------------------------------------------------------------*/
	.global _clid_cas_freqdet_flt
_clid_cas_freqdet_flt
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc	= xar1
;
	xcdp = #_CLID_asCasFd;		psFlt
	xar4 = mar(*ar1(#(CLID_tSc.Cas)));	psTo
	t0 = #(1-CLID_CAS_FD_ASZ);
	
	xar2 = mar(*ar1(#(CLID_tSc.asCasLoI)));	psFromI
	xar3 = mar(*ar1(#(CLID_tSc.asCasLoQ)));	psFromI
	brc0 = #(4-1);
	localrepeat {
		ac0 = *ar2+ * coef(*cdp+),
		ac1 = *ar3+ * coef(*cdp+);
		|| repeat (#(CLID_CAS_FD_ASZ-3))
			ac0 = ac0 + (*ar2+ * coef(*cdp+)),
			ac1 = ac1 + (*ar3+ * coef(*cdp+));
		ac0 = ac0 + (*(ar2+t0) * coef(*cdp+)),
		ac1 = ac1 + (*(ar3+t0) * coef(*cdp+));
		*ar4+ = HI(rnd(ac0 << #1));
		*ar4+ = HI(rnd(ac1 << #1));
	}

	xar2 = mar(*ar1(#(CLID_tSc.asCasHiI)));	psFromI
	xar3 = mar(*ar1(#(CLID_tSc.asCasHiQ)));	psFromI
	brc0 = #(4-1);
	localrepeat {
		ac0 = *ar2+ * coef(*cdp+),
		ac1 = *ar3+ * coef(*cdp+);
		|| repeat (#(CLID_CAS_FD_ASZ-3))
			ac0 = ac0 + (*ar2+ * coef(*cdp+)),
			ac1 = ac1 + (*ar3+ * coef(*cdp+));
		ac0 = ac0 + (*(ar2+t0) * coef(*cdp+)),
		ac1 = ac1 + (*(ar3+t0) * coef(*cdp+));
		*ar4+ = HI(rnd(ac0 << #1));
		*ar4+ = HI(rnd(ac1 << #1));
	}
	return;

*-------------------------------------------------------------------------*/
	.global _clid_cas_freqdet
_clid_cas_freqdet
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc 	= xar1
;
	xar2 = mar(*ar1(#(CLID_tSc.Cas)));
	
	ac0 = *ar2(#(CLID_tCas.sLoIC1)) << #16;
	ac0 = ac0 + (*ar2(#(CLID_tCas.sLoQS1)) << #16);
	ac1 = *ar2(#(CLID_tCas.sLoIS1)) << #16;
	ac1 = ac1 - (*ar2(#(CLID_tCas.sLoQC1)) << #16);
	ac2 = ac0 * ac0;
	ac2 = ac2 + (ac1 * ac1);
	en2log ac2, t0;
	
	ac0 = *ar2(#(CLID_tCas.sLoIC2)) << #16;
	ac0 = ac0 + (*ar2(#(CLID_tCas.sLoQS2)) << #16);
	ac1 = *ar2(#(CLID_tCas.sLoIS2)) << #16;
	ac1 = ac1 - (*ar2(#(CLID_tCas.sLoQC2)) << #16);
	ac3 = ac0 * ac0;
	ac3 = ac3 + (ac1 * ac1);
	en2log ac3, t0;

	ac0 = ac2;
	ac0 = ac0 - ac3;
	ac0 = ac0 << #16;
	ac0 = ac0 * #8026;
	*ar2(#(CLID_tCas.sLoFreq)) = HI(ac0 << #1);

	ac1 = ac2;
	ac1 = ac1 + ac3;
	ac1 = ac1 << #-1;
	ac1 = ac1 + #_CORR;
	*ar2(#(CLID_tCas.sLoEn)) = ac1;
	

	ac0 = *ar2(#(CLID_tCas.sHiIC1)) << #16;
	ac0 = ac0 + (*ar2(#(CLID_tCas.sHiQS1)) << #16);
	ac1 = *ar2(#(CLID_tCas.sHiIS1)) << #16;
	ac1 = ac1 - (*ar2(#(CLID_tCas.sHiQC1)) << #16);
	ac2 = ac0 * ac0;
	ac2 = ac2 + (ac1 * ac1);
	en2log ac2, t0;
	
	ac0 = *ar2(#(CLID_tCas.sHiIC2)) << #16;
	ac0 = ac0 + (*ar2(#(CLID_tCas.sHiQS2)) << #16);
	ac1 = *ar2(#(CLID_tCas.sHiIS2)) << #16;
	ac1 = ac1 - (*ar2(#(CLID_tCas.sHiQC2)) << #16);
	ac3 = ac0 * ac0;
	ac3 = ac3 + (ac1 * ac1);
	en2log ac3, t0;

	ac0 = ac2;
	ac0 = ac0 - ac3;
	ac0 = ac0 << #16;
	ac0 = ac0 * #8026;
	*ar2(#(CLID_tCas.sHiFreq)) = HI(ac0 << #1);

	ac1 = ac2;
	ac1 = ac1 + ac3;
	ac1 = ac1 << #-1;
	ac1 = ac1 + #_CORR
	*ar2(#(CLID_tCas.sHiEn)) = ac1;
	
	return;

*-------------------------------------------------------------------------*/
	.global _clid_cas_test
_clid_cas_test
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc	= xar1
;
	xar2 = mar(*ar0(#(CLID_tDb.Cfg)));
	ac3 = #0;		sTest
	
	ac0 = *ar1(#(CLID_tSc.Cas.sLoEn));
	ac1 = ac0 - *ar2(#(ICLID_tCfg.sMinEn));
	if (ac1 < #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_LO_MIN_EN_MASK;
	
	ac1 = ac0 - *ar2(#(ICLID_tCfg.sMaxEn));
	if (ac1 > #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_LO_MAX_EN_MASK;

	ac0 = *ar1(#(CLID_tSc.Cas.sHiEn));
	ac1 = ac0 - *ar2(#(ICLID_tCfg.sMinEn));
	if (ac1 < #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_HI_MIN_EN_MASK;
		
	ac1 = ac0 - *ar2(#(ICLID_tCfg.sMaxEn));
	if (ac1 > #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_HI_MAX_EN_MASK;

	ac0 = ac0 - *ar1(#(CLID_tSc.Cas.sLoEn));
	ac0 = |ac0|;
	ac0 = ac0 - *ar2(#(ICLID_tCfg.sMaxTwist));
	if (ac0 > #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_TWIST_MASK;
	
	ac0 = *ar1(#(CLID_tSc.Cas.sLoFreq));
	ac0 = |ac0|;
	ac0 = ac0 - *ar2(#(ICLID_tCfg.sMaxFreqDev));
	if (ac0 > #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_LO_FREQ_DEV_MASK;
	
	ac0 = *ar1(#(CLID_tSc.Cas.sHiFreq));
	ac0 = |ac0|;
	ac0 = ac0 - *ar2(#(ICLID_tCfg.sMaxFreqDev));
	if (ac0 > #0) execute (D_unit)
		ac3 = ac3 | #CLID_CAS_HI_FREQ_DEV_MASK;

	if (ac3 == #0) execute (D_unit)
		*ar0(#(CLID_tDb.uCasReg)) = *ar0(#(CLID_tDb.uCasReg)) | #1;
		
	*ar1(#(CLID_tSc.Cas.sTest)) = ac3;
	return;

*-------------------------------------------------------------------------*/
	.global _clid_cas_move_data_out
_clid_cas_move_data_out
*-------------------------------------------------------------------------*/
;CLID_tDb *pDb	= xar0
;CLID_tSc *pSc	= xar1
;
	xar2 = mar(*ar0(#(CLID_tCasDb.asLoI)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasLoI+CLID_CAS_IDX)));
	repeat (#(CLID_CAS_FD_SSZ-1))
		*ar2+ = *ar3+;
		
	xar2 = mar(*ar0(#(CLID_tCasDb.asLoQ)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasLoQ+CLID_CAS_IDX)));
	repeat (#(CLID_CAS_FD_SSZ-1))
		*ar2+ = *ar3+;
		
	xar2 = mar(*ar0(#(CLID_tCasDb.asHiI)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasHiI+CLID_CAS_IDX)));
	repeat (#(CLID_CAS_FD_SSZ-1))
		*ar2+ = *ar3+;
		
	xar2 = mar(*ar0(#(CLID_tCasDb.asHiQ)));
	xar3 = mar(*ar1(#(CLID_tSc.asCasHiQ+CLID_CAS_IDX)));
	repeat (#(CLID_CAS_FD_SSZ-1))
		*ar2+ = *ar3+;
		
	return;

⌨️ 快捷键说明

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