📄 gaectxa.s55
字号:
*-------------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2002 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED" *
* *
*-------------------------------------------------------------------------*/
.mmregs
.cpl_on
.arms_on
.include "gaeci.h55"
.sect ".ftext1"
;-------------------------------------------------------------------------
.global _GAEC_aasFBS
.global _GAEC_aasFBR
.global _GAEC_aasFBX
.global _gaec_utl_exp
;-------------------------------------------------------------------------
.global _gaec_tx_analysis
;-------------------------------------------------------------------------
_gaec_tx_analysis
; GAEC_tDb *pDb = ar0,
; GAEC_tSc *pSc = ar1
; S16 *psTx = ar2
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
bit(ST1, #ST1_FRCT) = #1;
pshboth(xar6)
pshboth(xar5)
xar4 = mar(*ar0(#(GAEC_tDb.asTbuf+GAEC_FR_SZ)))
xar3 = mar(*ar0(#(GAEC_tDb.asTbuf)))
repeat (#(GAEC_TBUF_SZ-GAEC_FR_SZ-1))
*ar3+ = *ar4+
repeat (#(GAEC_FR_SZ-1))
*ar3+ = *ar2+;
xar3 = mar(*ar0(#(GAEC_tDb.aasT)))
xar4 = mar(*ar0(#(GAEC_tDb.aasT+GAEC_BLKS)))
brc0 = #(GAEC_BANDS*2-1)
t0 = #(GAEC_BLKS+1)
localrepeat {
repeat (#(GAEC_ERR_SZ-GAEC_BLKS-2))
*ar3+ = *ar4+
*(ar3+t0) = *(ar4+t0)
}
xar2 = mar(*ar0(#(GAEC_tDb.asTbuf)))
xcdp = mar(*ar1(#(GAEC_tSc.u.asTmp)))
t1 = #(GAEC_ERR_SZ);
t0 = #(1-GAEC_FBS_SZ/2);
xar5 = mar(*ar0(#(GAEC_tDb.aasT + GAEC_ERR_SZ-GAEC_BLKS)))
xar6 = #(GAEC_BLKS-1);
L01
brc0 = #(GAEC_FBS_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #_GAEC_aasFBS;
xar4 = #(_GAEC_aasFBS + GAEC_FBS_SZ/2);
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBS_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBS_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBS_SZ/2))
}
brc0 = #(GAEC_FBS_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+0));
xar4 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+1));
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBS_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBS_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBS_SZ/2))
}
mar (ar5 - #(GAEC_ERR_SZ*(2*GAEC_BANDS)-1));
mar (ar2 + #GAEC_BLK_SZ);
if (*ar6- != #0) goto L01
.arms_on
bit(ST2, #ST2_ARMS) = #1;
bit(ST1, #ST1_FRCT) = #0;
xar5 = popboth();
xar6 = popboth();
return;
;-------------------------------------------------------------------------
.global _gaec_tx_vad_fb
;-------------------------------------------------------------------------
_gaec_tx_vad_fb
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
;
; init ptrs
xar2 = mar(*ar1(#(GAEC_tSc.sRinEn)));
xar3 = mar(*ar0(#(GAEC_tDb.sVadRinNse)));
xar4 = mar(*ar0(#(GAEC_tDb.sVadRinCrit)));
; tc2 = uAdfMode < 3
t0 = *ar0(#(GAEC_tDb.uAdfMode))
t1 = #3;
tc2 = t0 < t1;
ac0 = *ar2; ; ac0 = sVadTxEn
ac1 = ac0 - #GAEC_VAD_NSE_MIN;
if (ac1 <= #0) goto L42
ac2 = ac0 - *ar3 ; ac2 = sDlt
ac1 = ac2 - #GAEC_VAD_CRIT_THR;
ac3 = *ar4 + ac1;
ac1 = #GAEC_CRIT_MAX;
ac3 = min (ac1, ac3);
ac1 = #GAEC_CRIT_MIN;
ac3 = max (ac1, ac3);
*ar4 = ac3;
;
; adjust nse
if (ac3 >= #0) goto L41
;
; if VadCrit < 0 : inactive
ac2 = ac2 << #-3;
if (!tc2) execute (D_unit)
|| ac2 = ac2 << #-2;
ac1 = ac2 + *ar3;
ac0 = #GAEC_VAD_NSE_MAX;
ac1 = min(ac0, ac1);
ac0 = #GAEC_VAD_NSE_MIN;
ac1 = max(ac0, ac1);
*ar3 = ac1;
goto L44 ; end cicle
L41
ac0 = ac0 - #GAEC_VAD_NSE_MAX;
if (ac0 >= #0) goto L44;
ac3 = *ar3;
ac3 = ac3 + #1;
if (tc2) execute (D_unit)
ac3 = ac3 + #9;
*ar3 = ac3;
goto L44
L42
ac0 = *ar4
ac0 = ac0 - #GAEC_VAD_CRIT_THR;
ac1 = #GAEC_CRIT_MIN
ac0 = max(ac1, ac0)
*ar4 = ac0;
L44
return;
;-------------------------------------------------------------------------
.global _gaec_tx_vad
;-------------------------------------------------------------------------
_gaec_tx_vad
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
; ar2 -> pSc->sVadTxEn;
; ar3 -> pDb->sVadTxNse;
; ar4 -> pDb->sVadTxCrit;
; ar5 = loop cntr
;
pshboth(xar5);
;
; set t0 = sMaxEn;
xar2 = mar(*ar1(#(GAEC_tSc.asRinEn)));
brc0 = #(GAEC_BANDS+1-1);
t0 = #(-32768);
localrepeat {
t1 = *ar2+;
t0 = max(t1, t0);
}
;
; tc1 = (sMaxEn > _VAD_NSE_MAX
t1 = #(GAEC_VAD_NSE_MAX);
tc1 = t0 < t1;
;
; tc2 = uAdfMode < 3
t0 = *ar0(#(GAEC_tDb.uAdfMode))
t1 = #3;
tc2 = t0 < t1;
;
; init ptrs
xar2 = mar(*ar1(#(GAEC_tSc.asRinEn)));
xar3 = mar(*ar0(#(GAEC_tDb.asVadRinNse)));
xar4 = mar(*ar0(#(GAEC_tDb.asVadRinCrit)));
xar5 = #(GAEC_BANDS+1-1);
;
; loop start
L23
ac0 = *ar2; ; ac0 = sVadTxEn
ac1 = ac0 - #GAEC_VAD_NSE_MIN;
if (ac1 <= #0) goto L22
ac2 = ac0 - *ar3 ; ac2 = sDlt
ac1 = ac2 - #GAEC_VAD_CRIT_THR;
ac3 = *ar4 + ac1;
ac1 = #GAEC_CRIT_MAX;
ac3 = min (ac1, ac3);
ac1 = #GAEC_CRIT_MIN;
ac3 = max (ac1, ac3);
*ar4 = ac3;
;
; adjust nse
if (ac3 >= #0) goto L21
;
; if VadCrit < 0 : inactive
ac2 = ac2 << #-3;
if (!tc2) execute (D_unit)
|| ac2 = ac2 << #-2;
ac1 = ac2 + *ar3;
ac0 = #GAEC_VAD_NSE_MAX;
ac1 = min(ac0, ac1);
ac0 = #GAEC_VAD_NSE_MIN;
ac1 = max(ac0, ac1);
*ar3 = ac1;
goto L24 ; end cicle
L21
; if VadCrit >= 0, active
if (!tc1) goto L24;
ac0 = ac0 - #GAEC_VAD_NSE_MAX;
if (ac0 >= #0) goto L24;
ac3 = *ar3;
ac3 = ac3 + #1;
if (tc2) execute (D_unit)
ac3 = ac3 + #9;
*ar3 = ac3;
goto L24
L22
ac0 = *ar4
ac0 = ac0 - #GAEC_VAD_CRIT_THR;
ac1 = #GAEC_CRIT_MIN
ac0 = max(ac1, ac0)
*ar4 = ac0;
L24
mar(*ar2+)
mar(*ar3+)
mar(*ar4+)
if(*ar5- != #0) goto L23
xar5 = popboth();
return;
;-------------------------------------------------------------------------
.global _gaec_tx_att
;-------------------------------------------------------------------------
_gaec_tx_att
; GAEC_tDb *pDb = ar0,
; GAEC_tSc *pSc = ar1
;
xar2 = mar(*ar1(#(GAEC_tSc.asAttRin)))
xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
xar4 = #(GAEC_BANDS+1-1)
L11
t0 = *ar2+;
t0 = -t0;
call _gaec_utl_exp
*ar3+ = t0;
if (*ar4- != 0) goto L11
xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp+1)))
repeat (#(GAEC_BANDS-1-1))
*ar3+ = *ar2+
xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
xar3 = mar(*ar1(#(GAEC_tSc.aasErr0)))
xar4 = mar(*ar0(#(GAEC_tDb.aasT)))
brc0 = #(GAEC_BANDS*2-1);
brc1 = #(GAEC_ERR_SZ-1)
localrepeat {
t0 = *ar2+;
|| localrepeat {
ac0 = t0 * *ar4+
*ar3+ = HI(rnd(ac0 << #4));
}
}
return
_MULT .set (31821)
_INC .set (13849)
;-------------------------------------------------------------------------
.global _gaec_tx_nse
;-------------------------------------------------------------------------
_gaec_tx_nse
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
xar2 = mar(*ar0(#(GAEC_tDb.asVadRinNse)));
xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
xar4 = #(GAEC_BANDS+1-1)
L31
t1 = *ar2+
t0 = *ar3;
t0 = t0 - #(GAEC_1DB*6);
t1 = min(t0, t1);
t0 = *ar3
t0 = t0 + *ar0(#(GAEC_tDb.Cfg.sWhiteThr))
t0 = max(t1, t0)
t0 = t0 + #(GAEC_1DB*13)
call _gaec_utl_exp
*ar3+ = t0;
if (*ar4- != #0) goto L31
;
; add up to bands*2
xar2 = mar(*ar1(#(GAEC_tSc.u.asTmp+1)));
repeat (#(GAEC_BANDS-1-1))
*ar3+ = *ar2+
brc0 = #(2*GAEC_BANDS-1)
brc1 = #(GAEC_ERR_SZ-1)
xar2 = mar(*ar1(#(GAEC_tSc.aasErr0)));
xar3 = mar(*ar1(#(GAEC_tSc.u.asTmp)));
ac2 = #_MULT << #16; ; ac2 = MULT
ac3 = #_INC; ; ac3 = INC
t1 = *ar0(#(GAEC_tDb.sNseSav)); ; t1 = Seed
localrepeat {
ac1 = *ar3+ << #16; ; ac1H = sLevel
ac0 = ac3;
|| localrepeat {
ac0 = ac0 + (ac2 * t1);
t1 = ac0;
|| ac0 = *ar2 << #15;
ac0 = ac0 + (ac1 * t1);
*ar2+ = HI(saturate(rnd(ac0 << #1)));
|| ac0 = ac3;
} ; 9*4*20*200 = 0.15 MIPS
}
*ar0(#(GAEC_tDb.sNseSav)) = t1; ; save Seed
.if 0
.endif
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -