📄 fir.asm
字号:
;
; fir.asm - FIR filter
;
; prototype: extern void fir(int *,int *,int *,unsigned int)
;
; Entry: arg0: AR0 - (in) FIR filter input buffer pointer
; arg1: AR1 - (out) FIR filter output buffer pointer
; arg2: AR2 - (coeff) FIR coefficients array pointer
; arg3: T0 - (L) FIR filter order
;
; Return: T0 = signal buffer index
;
.def _fir
_fir
pshm ST1_55 ; Save ST1, ST2, and ST3
pshm ST2_55
pshm ST3_55
or #0x340,mmap(ST1_55); Set FRCT,SXMD,SATD
bset SMUL ; Set SMUL
mov mmap(AR0),BSA01 ; AR1=base address for input
mov mmap(AR2),BSA23 ; AR1=base address for coeff
mov mmap(T0),BK03 ; Set coefficient array size
or #0x5,mmap(ST2_55) ; AR0 & AR2 as circular pointers
mov #0,AR0 ; Start from zero offset
mov #0,AR2 ; Start from zero offset
sub #3,T0
mov T0,CSR ; Init loop L-2 times
mpym *AR0+,*AR2+,AC0 ; Do the 1st operation
|| rpt CSR ; Start loop
macm *AR0+,*AR2+,AC0
macmr *AR0,*AR2+,AC0 ; Do the last operation
mov hi(AC0),T0 ; Save Q15 filtered value
popm ST3_55 ; Restore ST1, ST2, and ST3
popm ST2_55
popm ST1_55
ret
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -