📄 agc.asm
字号:
*****************************************************************************
** Description: agc() in agc.c **
** **
** Inputs **
** **
** xar6---Word16 *sig_out **
** xar4---Word16 *sig_in **
** xar5---agcState *st **
** **
** Outputs: **
** xar6---Word16 *sig_out **
** **
** Return value : 0 **
** **
** Attribute : Cycles:4049 Pm: 71 **
** Modified Registers: all **
** **
** Programmer : Qi Ying **
*****************************************************************************
.global _agc
.ref _energy_new
.ref _div_s
.ref _inv_sqrt
_agc:
movl xar3, xar6 ;input:xar3=sig_out
LCR _energy_new ;output:acc=s
movb xar0, #0
cmpl acc, xar0
sb _Line_206, NEQ
mov *xar5, #0 ;st->past_gain=0
LRETR
_Line_206:
csb acc
dec T ;T=exp
lsll acc, T
add acc, #0x0800<<#4
mov ar1, ah ;ar1=gain_out
push T
movl xar3, xar4 ;input:xar3=sig_in
LCR _energy_new ;output:acc=s
pop T
movl xar7, acc
movb xar0, #0
cmpl acc, xar0
sb _Line_242, EQ ;ar0=g0=0
mov ar3, T ;ar3=exp
csb acc ;T=i
lsll acc, T
add acc, #0x0800<<#4
mov ar2, ah ;ar2=gain_in
push T
LCR _div_s ;input:ar1=gain_out,ar2=gain_in
;output:al
mov ah, al
mov al, #16
mov T, al
asrl acc, T ;acc=s
lsl acc, #7
pop T ;i
push acc
mov al, ar3 ;exp
cmp al, T
sb _Line_228, GEQ
sub T, al
pop acc
lsll acc, T
sb _Line_230, UNC
_Line_228:
sub al, T
mov T, al
pop acc
asrl acc, T
_Line_230:
LCR _inv_sqrt
lsl acc, #9
add acc, #0x0800<<#4 ;ah=i
mpy acc, ah, #3276
lsl acc, #1
mov ar0, ah ;ar0=g0
_Line_242:
movz ar2, *xar5 ;ar2=gain
mov ar3, #39
_Loop_244:
mpy acc, ar2, #29491
lsl acc, #1
add ah, ar0 ;ah=gain
mov ar2, ah
mov T, ah ;gain
mpy acc, T, *xar6 ;sig_out[i]
lsl acc, #4
mov *xar6++, ah
banz _Loop_244, ar3--
mov *xar5, ar2 ;st->past_gain=gain
subb xar6, #40
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -