📄 fir.asm
字号:
.mmregs
.def fir_init ;initialize FIR filter
.def fir_task ;perform FIR filtering
;FIR缓冲
.data
_fir_size .word 0x41
_fir_size1 .word 0x40
_fir_data_addr .word 0
_fir_coff_addr .word 0
.sect "fir_coff"
;FIR系数表缓冲
fir_coff_table: ;zx it must be placed in bit bound
.word 00000H,0FFEDH
.word 0FFE2H,0FFE7H,00000H,00024H,0003FH
.word 00036H,00000H,0FFB1H,0FF79H,0FF8FH
.word 00000H,0009EH,00105H,000D7H,00000H
.word 0FEE0H,0FE2BH,0FE82H,00000H,001FCH
.word 0033FH,002AAH,00000H,0FC4FH,0F9BAH
.word 0FA8BH,00000H,0096DH,0143AH,01CCBH
.word 0200EH,01CCBH,0143AH,0096DH,00000H
.word 0FA8BH,0F9BAH,0FC4FH,00000H,002AAH
.word 0033FH,001FCH,00000H,0FE82H,0FE2BH
.word 0FEE0H,00000H,000D7H,00105H,0009EH
.word 00000H,0FF8FH,0FF79H,0FFB1H,00000H
.word 00036H,0003FH,00024H,00000H,0FFE7H
.word 0FFE2H,0FFEDH,00000H
;FIR数据缓冲
d_data_buffer .usect "fir_bfr",256 ;zx it must be placed in bit bound.Q15
.text
;--------------------------------------
;初始化FIR滤波器
;--------------------------------------
fir_init:
; 初始化滤波器状态
STM d_data_buffer,AR4
RPT #255
ST #0,*AR4+
FIR_coff:
; 以_fir_data_addr保存FIR数据指针
LD *(_fir_size1),A
ADD #d_data_buffer,A
STL A,*(_fir_data_addr)
; 以_fir_coff_addr保存FIR系数表指针
ST #fir_coff_table,*(_fir_coff_addr)
RET
;This subroutine performs FIR filtering using MAC instruction.
;accumulator A (filter output) = h(n)*x(n-i) for i = 0,1...15
;------------------------------------------
;实现FIR滤波
;输入:以A保存输入数据
;输出: 以A保存输出数据
;------------------------------------------
fir_task:
SSBX OVM
SSBX FRCT
NOP
NOP
STM #1,AR0
LD *(_fir_size),B
STLM B,BK
;STM #K_FIR_BFFR,BK ;FIR circular bffr value
;LD *INBUF_P+,A ;load the input value
LD *(_fir_coff_addr),B
NOP
STLM B,AR2
NOP
NOP
LD *(_fir_data_addr),B
NOP
STLM B,AR3
NOP
NOP
fir_filter:
STL A,*AR3+% ;replace oldest sample with newest sample
LD #0,A
NOP
NOP
RPT *(_fir_size1)
MAC *AR2+0%,*AR3+0%,A ;filtering
NOP
NOP
LDM AR2,B
NOP
STL B,*(_fir_coff_addr)
LDM AR3,B
NOP
STL B,*(_fir_data_addr)
fir_filter_loop
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -