📄 gaecdtda.s54
字号:
nop
mvdk *sp(1+1), ar3
_sDlt2 .set 0
_sErleLoss2 .set 1
frame #-2
;
; ptrs assignment
; ar0 = pDb->sExpectedErrEn
; ar1 = pDb->sVadRxNse
; ar3 = pSc->sErrEn
; ar4 = pDb->sErlCrit
; ar5 = pDb->sDtCrit
;
mvmm ar2, ar0
mar *+ar0(#GAEC_tDb.sExpectedErrEn)
mvmm ar2, ar1
mar *+ar1(#GAEC_tDb.sVadErrNse)
mar *+ar3(#GAEC_tSc.sErrEn)
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.sErlCrit)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.sDtCrit)
;
; adjust nse level
ld *ar0, a
sub *ar1, a, b
stl b, *sp(_sDlt2)
sub #_DTD_NSE_THR, b
nop
nop
xc 2, blt
sub *sp(_sDlt2), -1, a
xc 2, blt
add #_DTD_NSE_THR2, a
add #_DTD_NSE_THR, 1, b
nop
nop
xc 2, blt
sub *sp(_sDlt2), -1, a
xc 2, blt
sub #_DTD_NSE_THR2, a
; stl a, *ar3(#GAEC_tSc.asTmp+2-GAEC_tSc.sErrEn)
;
; make ErleLoss
ld *ar3, b
sub a, b
sub *ar2(#GAEC_tDb.Cfg.sDtThr), b
ld #(GAEC_CRIT_MIN>>3), a
max a
stl a, *sp(_sErleLoss2)
;
; update sErlCrit
sub *ar2(#GAEC_tDb.Cfg.sDtThr), a
add *ar4, a
ld #GAEC_CRIT_MAX, b
min a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar4
;
; limit erle loss
ld *sp(_sErleLoss2), a
ld #_DTD_CRIT_THR,1, b
min a
stl a, *sp(_sErleLoss2)
;
; update sDtCrit
ld *ar5, a
add *sp(_sErleLoss2), a
ld #GAEC_CRIT_MAX, b
min a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar5
; ld *sp(_sErleLoss2), a
; stl a, *ar3(#GAEC_tSc.asTmp - GAEC_tSc.sErrEn)
; ld *sp(_sDlt2), a
; stl a, *ar3(#GAEC_tSc.asTmp - GAEC_tSc.sErrEn+1)
;
; exit
frame #2
popm ar1
ret
;-------------------------------------------------------------------------
.global _gaec_dtd_criteria_sb
;-------------------------------------------------------------------------
_gaec_dtd_criteria_sb
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
;
stlm a,ar2
ssbx sxm
nop
mvdk *sp(1), ar3
nop
pshm ar1
; pshm ar6
_sDlt3 .set 0
_sErleLoss3 .set 1
_sMax3 .set 2
_band3 .set 3
_sErleMax3 .set 4
frame #-5
;
; ptrs assignment
; ar0 = pDb->sExpectedErrEn
; ar1 = pDb->sVadRxNse
; ar3 = pSc->sErrEn
; ar4 = pDb->sErlCrit
; ar5 = pDb->sDtCrit
;
; mvmm ar3, ar6
; mar *+ar6(#GAEC_tSc.asTmp)
mvmm ar2, ar0
mar *+ar0(#GAEC_tDb.asExpectedErrEn)
mvmm ar2, ar1
mar *+ar1(#GAEC_tDb.asVadErrNse)
mar *+ar3(#GAEC_tSc.asErrEn)
mvmm ar2, ar4
mar *+ar4(#GAEC_tDb.asErlCrit)
mvmm ar2, ar5
mar *+ar5(#GAEC_tDb.asDtCrit)
;
; find sMax
ld *ar0+, a
stm #GAEC_BANDS-1, brc
rptb #K60-1
ld *ar0+, b
max a
K60
stl a, *sp(_sMax3)
; stl a, *ar6+
mar *+ar0(#-(GAEC_BANDS+1))
sub *ar3(#GAEC_tSc.sErleMax-GAEC_tSc.asErrEn), a
stl a, *sp(_sErleMax3)
;
; loop start
st #0, *sp(_band3)
K61
ld *sp(_sMax3), a
sub *ar0, a
ld *ar0+, b
add a, -2, b
ld *sp(_sErleMax3), a
max a
cmpm *sp(_band3), #0
nop
nop
xc 2, tc
add #GAEC_1DB*4, a
cmpm *sp(_band3), #1
nop
nop
xc 2, tc
add #GAEC_1DB*2, a
; stl a, *ar6+
;
; adjust nse level
sub *ar1+, a, b
stl b, *sp(_sDlt3)
sub #_DTD_NSE_THR, b
nop
nop
xc 2, blt
sub *sp(_sDlt3), -1, a
xc 2, blt
add #_DTD_NSE_THR2, a
add #_DTD_NSE_THR, 1, b
nop
nop
xc 2, blt
sub *sp(_sDlt3), -1, a
xc 2, blt
sub #_DTD_NSE_THR2, a
; stl a, *ar6+
;
; make ErleLoss
ld *ar3+, b
sub a, b
sub *ar2(#GAEC_tDb.Cfg.sDtThr), b
ld #(GAEC_CRIT_MIN>>2), a
max a
stl a, *sp(_sErleLoss3)
; stl a, *ar6+
;
; update sErlCrit
sub *ar2(#GAEC_tDb.Cfg.sDtThr), a
add *ar4, a
ld #GAEC_CRIT_MAX, b
min a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar4+
;
; limit erle loss
ld *sp(_sErleLoss3), a
ld #_DTD_CRIT_THR,1, b
min a
stl a, *sp(_sErleLoss3)
;
; update sDtCrit
ld *ar5, a
add *sp(_sErleLoss3), a
ld #GAEC_CRIT_MAX, b
min a
ld #GAEC_CRIT_MIN, b
max a
stl a, *ar5+
; mar *ar0+
; mar *ar1+
; mar *ar3+
; mar *ar4+
; mar *ar5+
addm #1, *sp(_band3)
cmpm *sp(_band3), #(GAEC_BANDS+1)
bc K61, ntc
;
; exit
frame #5
; popm ar6
popm ar1
ret
;-------------------------------------------------------------------------
.global _gaec_dtd_dec_criteria
;-------------------------------------------------------------------------
_gaec_dtd_dec_criteria
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
;
stlm a,ar2
ssbx sxm
nop
mvmm ar2, ar3
mar *+ar3(#GAEC_tDb.asDtCrit)
ld #GAEC_CRIT_MIN, 16, b
st #(_DTD_CRIT_THR/3), *sp(1)
mvmm sp, ar4
mar *ar4+
stm #GAEC_BANDS, brc
rptb K70-1
sub *ar3, *ar4, a
max a
sth a, *ar3+
K70
mvmm ar2, ar3
mar *+ar3(#GAEC_tDb.sDtCrit)
sub *ar3, *ar4, a
max a
sth a, *ar3+
ret
;-------------------------------------------------------------------------
.global _gaec_dtd_avrg_erle_sb
;-------------------------------------------------------------------------
_gaec_dtd_avrg_erle_sb
; GAEC_tDb *pDb,
; GAEC_tSc *pSc,
;
stlm a, ar2
ssbx sxm
nop
mvdk *sp(1), ar3
pshm ar1
pshm ar6
pshm ar7
; ar0 -> pSc->asSndEn[band];
; ar1 -> pSc->asRcvEn[band];
; ar4 -> pDb->asErleAv[band];
; ar5 -> pDb->asErlAv[band];
; ar6 -> pDb->asVadRxNse[band];
; ar7 -> pDb->asDtCrit[band];
mvmm ar3, ar0
mar *+ar0(GAEC_tSc.asSinEn)
mvmm ar3, ar1
mar *+ar1(GAEC_tSc.asRoutEn)
mvmm ar2, ar4
mar *+ar4(GAEC_tDb.asErleAv)
mvmm ar2, ar5
mar *+ar5(GAEC_tDb.asErlAv)
mvmm ar2, ar6
mar *+ar6(GAEC_tDb.asVadErrNse)
mvmm ar2, ar7
mar *+ar7(GAEC_tDb.asDtCrit)
_sCoef4 .set 0
_sCorr4 .set 1
_uCond4 .set 2
frame #-3
;
; zero asTmp[0...bands+1]
mar *+ar3(GAEC_tSc.u.asTmp)
rpt #GAEC_BANDS
st #0, *ar3+
mar *+ar3(#-(GAEC_BANDS+1))
st #1024, *sp(_sCoef4)
cmpm *ar2(#GAEC_tDb.uAdfMode), #4
st #4096-GAEC_BANDS*300, *sp(_sCorr4)
; nop
; nop
xc 2, tc
st #256, *sp(_sCoef4)
cmpm *ar2(#GAEC_tDb.uAdfMode), #3
stm #GAEC_BANDS, brc
; nop
; nop
xc 2, tc
st #512, *sp(_sCoef4)
rptb K81-1
st #0, *sp(_uCond4)
; (pDb->asDtCrit[band] < 0))
ld *ar7+, a
; if (( pSc->asSndEn[band] - pDb->asErleAv[band] > pDb->asVadRxNse[band]) &&
ld *ar0+, b
sub *ar4, b
xc 2, alt
addm #1, *sp(_uCond4)
sub *ar6, b
; ((pSc->asRcvEn[band] - pDb->asErleAv[band] - pDb->asErlAv[band]) > pDb->asVadRxNse[band]) &&
ld *ar1+, a
sub *ar4+, a
xc 2, bgt
addm #1, *sp(_uCond4)
sub *ar5+, a
sub *ar6+, a
ld *sp(_sCoef4), t
mpy *sp(_sCorr4), b
; nop
; nop
xc 2, agt
addm #1, *sp(_uCond4)
cmpm *sp(_uCond4), #3
add #1, 11, b
xc 1, tc
sth b, 4, *ar3
mar *ar3+
addm #300, *sp(_sCorr4)
K81
mar *+ar3(#-(GAEC_BANDS+1))
mar *+ar4(#-(GAEC_BANDS+1))
;
; average erle
mvmm ar3, ar6
mar *+ar6(#GAEC_tSc.asErle-GAEC_tSc.u.asTmp)
stm #GAEC_BANDS, brc
rptb K82-1
ld *ar4, 16, a
sub *ar6+, 16, a
ld #GAEC_1DB*6, 16, b
min a
mpya *ar3+
add #1, 14, b
sth b, 1, *sp(_sCorr4)
ld *ar4, a
sub *sp(_sCorr4), a
ld #0, b
max a
stl a, *ar4+
K82
;
; average erl
mar *+ar3(#-(GAEC_BANDS+1))
mar *+ar5(#-(GAEC_BANDS+1))
mvmm ar3, ar7
mar *+ar7(#GAEC_tSc.asErl-GAEC_tSc.u.asTmp)
stm #GAEC_BANDS, brc
rptb K83-1
ld *ar7+, 16, a
sub *ar5, 16, a
ld *ar5, 15, b
maca *ar3+
add #1, 14, b
ld *ar2(#GAEC_tDb.Cfg.sErlMin), 15, a
max b
sth b, 1, *ar5+
K83
frame #3
popm ar7
popm ar6
popm ar1
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -