📄 fircasmfunc.asm
字号:
;FIRCASMfunc.asm ASM function called from C to implement FIR
;A4 = Samples address, B4 = coeff address, A6 = filter order
;Delays organized as:x(n-(N-1))...x(n);coeff as h[0]...h[N-1]
.def _fircasmfunc
_fircasmfunc: ;ASM function called from C
MV A6,A1 ;setup loop count
MPY A6,2,A6 ;since dly buffer data as byte
ZERO A8 ;init A8 for accumulation
ADD A6,B4,B4 ;since coeff buffer data as byte
SUB B4,1,B4 ;B4=bottom coeff array h[N-1]
loop: ;start of FIR loop
LDH *A4++,A2 ;A2=x[n-(N-1)+i] i=0,1,...,N-1
LDH *B4--,B2 ;B2=h[N-1-i] i=0,1,...,N-1
NOP 4
MPY A2,B2,A6 ;A6=x[n-(N-1)+i]*h[N-1-i]
NOP
ADD A6,A8,A8 ;accumlate in A8
LDH *A4,A7 ;A7=x[(n-(N-1)+i+1]update delays
NOP 4 ;using data move "up"
STH A7,*-A4[1] ;-->x[(n-(N-1)+i] update sample
SUB A1,1,A1 ;decrement loop count
[A1] B loop ;branch to loop if count # 0
NOP 5
MV A8,A4 ;result returned in A4
B B3 ;return addr to calling routine
NOP 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -