📄 dtmfasm.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 "dtmfi.h54"
.sect ".dtmfd"
__apsLoDev .word _dtmf_a697, _dtmf_a770, _dtmf_a852, _dtmf_a941
__apsHiDev .word _dtmf_a1209, _dtmf_a1336, _dtmf_a1477, _dtmf_a1633
__aasLoDevFlt .word 23220, 77, 18493, 90, 14473, 112, 11353, 139
__aasHiDevFlt .word 16916, 100, 12640, 115, 9888, 139, 7614, 175
.sect ".dtmfp"
_dtmf_as2k .word 1230, -2060, 3472, -6516, 20712
.word 20712, -6516, 3472, -2060, 1230
.text
;-------------------------------------------------------------------------
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
;-------------------------------------------------------------------------
.global _dtmf_en2log
_dtmf_en2log
;-------------------------------------------------------------------------
; S32 slEn = a
;
; function returns
; a = energy in log
;
ssbx sxm
add #1, a
exp a
ld #0x780, b
norm a
ld a, -16, a
add a, -5, b
mac #-512, b, a
ret
;-------------------------------------------------------------------------
.global _dtmf_move_data_in
_dtmf_move_data_in
;-------------------------------------------------------------------------
;DTMF_tDb *pDb, = ac0
;DTMF_tSc *pSc, = sp(1)
;S16 *psIn = sp(2)
;
stlm a, ar5
ssbx sxm
nop
mvdk *sp(1), ar3
mvdk *sp(2), ar4
mvmm ar5, ar2
st #0, *ar3(#(DTMF_tSc.sTestFailed));
mar *+ar3(#(DTMF_tSc.as2kData));
mar *+ar2(#(DTMF_tDb.as2kDataSav));
rpt #(DTMF_2KFLT_SZ-1)
mvdd *ar2+, *ar3+
stm #(IDTMF_FR_SZ-1), brc
rptb dtmf_move_data_in1-1
ld *ar4+, -3, a
stl a, *ar3+
dtmf_move_data_in1
mvmm ar5, ar2
mvdk *sp(1), ar3
mar *+ar2(#(DTMF_tDb.asBpDataSav));
mar *+ar3(#(DTMF_tSc.asBpData));
rpt #(DTMF_BPFLT_SZ-1)
mvdd *ar2+, *ar3+
mvmm ar5, ar2
mvdk *sp(1), ar3
mar *+ar2(#(DTMF_tDb.asLoDataSav));
mar *+ar3(#(DTMF_tSc.asLoData));
rpt #(DTMF_LOSD_SZ-1)
mvdd *ar2+, *ar3+
.if (IDTMF_FR_SZ != 80)
mvmm ar5, ar2
mvdk *sp(1), ar3
mar *+ar2(#(DTMF_tDb.asHiDataSav));
mar *+ar3(#(DTMF_tSc.asHiData));
rpt #(DTMF_HISD_SZ-1)
mvdd *ar2+, *ar3+
.endif
mvmm ar5, ar2
mar *+ar2(#(DTMF_tDb.v.asSumEn+4));
rpt #(5-1)
delay *ar2-
ret
;-------------------------------------------------------------------------
.global _dtmf_2k_filter
_dtmf_2k_filter
;-------------------------------------------------------------------------
;DTMF_tDb *pDb, = ac0
;DTMF_tSc *pSc, = sp(1)
;
ssbx sxm
mvdk *sp(1), ar2 ; psPos
mvdk *sp(1), ar3 ; psCentre
mar *+ar2(#(DTMF_tSc.as2kData))
mar *+ar3(#(DTMF_tSc.as2kData+DTMF_2KFLT_HSZ*2-1))
mvdk *sp(1), ar4 ; psOut
mar *+ar4(#(DTMF_tSc.asBpData+DTMF_BPFLT_SZ))
frame #-5
ld #0, a
dst a, *sp(0) ; ac0
dst a, *sp(2) ; ac3
stm #IDTMF_FR_SZ/2-1, brc
stm #0, bk
stm #2, ar0
rptb dtmf_filter_2k1-1
rptz a, #(DTMF_2KFLT_HSZ*2-1)
macp *ar2+0%, _dtmf_as2k, a
mar *+ar2(#(-DTMF_2KFLT_HSZ*4+2))
ld a, b
add *ar3, 15, a
sth a, *ar4+
squr a, a
dadd *sp(0), a
dst a, *sp(0)
ld b, a
sub *ar3+0%, 15, a
squr a, a
dadd *sp(2), a
dst a, *sp(2)
dtmf_filter_2k1
dld *sp(2), a
en2log 0
stl a, *sp(2)
dld *sp(0), a
en2log 0
sub *sp(2), a
nop
nop
nop
frame #5
nop
nop
nop
mvdk *sp(1), ar2
stl a, *ar2(#(DTMF_tSc.s2kEnDlt))
ret
;-------------------------------------------------------------------------
.global _dtmf_lo_filter
_dtmf_lo_filter
;-------------------------------------------------------------------------
;DTMF_tDb *pDb, = ac0
;DTMF_tSc *pSc, = sp(1)
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asLoData+DTMF_LOSD_SZ))
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asBpData))
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.slLoBpEn))
ld #0, a
dst a, *ar4
stm #DTMF_DFR_SZ-1, brc
rptb L_dtmf_filter_lo - 1
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aLoBpI, a
sth a, *ar2+
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ))
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aLoBpQ, a
sth a, *ar2+
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ+DTMF_BPDR))
L_dtmf_filter_lo
dld *ar4, a
en2log 0
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.sLoBpEn))
stl a, *ar4
ret
;-------------------------------------------------------------------------
.global _dtmf_hi_filter
_dtmf_hi_filter
;-------------------------------------------------------------------------
;DTMF_tDb *pDb, = ac0
;DTMF_tSc *pSc, = sp(1)
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asHiData+DTMF_HISD_SZ))
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asBpData))
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.slHiBpEn))
ld #0, a
dst a, *ar4
stm #DTMF_DFR_SZ-1, brc
rptb L_dtmf_filter_hi - 1
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aHiBpI, a
sth a, *ar2+
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ))
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aHiBpQ, a
sth a, *ar2+
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ+DTMF_BPDR))
L_dtmf_filter_hi
dld *ar4, a
en2log 0
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.sHiBpEn))
stl a, *ar4
ret
;-------------------------------------------------------------------------
.global _dtmf_dial_filter
_dtmf_dial_filter
;-------------------------------------------------------------------------
;DTMF_tDb *pDb, = ac0
;DTMF_tSc *pSc, = sp(1)
;
stlm a, ar5
ssbx sxm
nop
mvdk *sp(1), ar2
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asBpData))
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.slDialEn))
ld #0, a
dst a, *ar4
stm #DTMF_DFR_SZ/2-1, brc
rptb L_dtmf_filter_dial - 1
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aDialI, a
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ))
rptz a, #DTMF_BPFLT_SZ-1
macp *ar3+, _dtmf_aDialQ, a
squr a, b
dadd *ar4, b
dst b, *ar4
mar *+ar3(#(-DTMF_BPFLT_SZ+DTMF_BPDR*2))
L_dtmf_filter_dial
dld *ar4, a
mvdk *sp(1), ar2
dadd *ar5(#(DTMF_tDb.v.slDialEn)),a;
dadd *ar2(#(DTMF_tSc.slHiBpEn)),a;
dadd *ar2(#(DTMF_tSc.slLoBpEn)),a;
en2log 0
stl a, *ar2(#(DTMF_tSc.sSumDialEn))
dld *ar4, a
dst a, *ar5(#(DTMF_tDb.v.slDialEn));
ret
;-------------------------------------------------------------------------
.global _dtmf_lo_dft_main
_dtmf_lo_dft_main
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asLoData)); psI
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asLoData+1)); psQ
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.asLoMainEn)); psOut
stm #_dtmf_aLo, ar5
stm #2, ar0
stm #0, bk
stm #4-1, brc
rptb L_dtmf_dft_lo_main - 1
rptz a, #DTMF_LO_DFT_SZ-1
mac *ar2+0%, *ar5+, a
mar *+ar2(#(-DTMF_LO_DFT_SZ*2))
mar *+ar5(#(-DTMF_LO_DFT_SZ))
rptz b, #DTMF_LO_DFT_SZ-1
mac *ar3+0%, *ar5+, b
mar *+ar3(#(-DTMF_LO_DFT_SZ*2))
rpt #DTMF_LO_DFT_SZ-1
mac *ar2+0%, *ar5+, b
mar *+ar2(#(-DTMF_LO_DFT_SZ*2))
mar *+ar5(#(-DTMF_LO_DFT_SZ))
rpt #DTMF_LO_DFT_SZ-1
mas *ar3+0%, *ar5+, a
mar *+ar3(#(-DTMF_LO_DFT_SZ*2))
sth b, *sp(1)
squr a, b
squra *sp(1), b
ld b, a
en2log 0
stl a, *ar4+
L_dtmf_dft_lo_main
ret
;-------------------------------------------------------------------------
.global _dtmf_hi_dft_main
_dtmf_hi_dft_main
;-------------------------------------------------------------------------
;DTMF_tDb *pDb,
;DTMF_tSc *pSc
;
ssbx sxm
mvdk *sp(1), ar2
mar *+ar2(#(DTMF_tSc.asHiData)); psI
mvdk *sp(1), ar3
mar *+ar3(#(DTMF_tSc.asHiData+1)); psQ
mvdk *sp(1), ar4
mar *+ar4(#(DTMF_tSc.asHiMainEn)); psOut
stm #_dtmf_aHi, ar5
stm #2, ar0
stm #0, bk
stm #4-1, brc
rptb L_dtmf_dft_hi_main - 1
rptz a, #DTMF_HI_DFT_SZ-1
mac *ar2+0%, *ar5+, a
mar *+ar2(#(-DTMF_HI_DFT_SZ*2))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -