?? 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 + -