?? fir2.asm
字號:
.mmregs
.global start
.def start,_c_int00
KS .set 256
N .set 16
COEF_FIR .sect "COEF_FIR"
.word 62,188,86,-764,-1453,625,6202,11439
.data
INPUT .copy "firin.inc" ;輸入數據在數據區0x2400
OUTPUT .space 1024 ;輸出數據在數據區0x2500
COEFTAB .usect "COEFTAB",N/2 ;;;;;;;修改過的;;;;;;;;
x_new .usect "DATA1",N/2
x_old .usect "DATA2",N/2
size .set N/2
TEMP .space 1
.text
_c_int00
b start
nop
nop
start: SSBX FRCT ;設置FRCT(小數方式位)
STM #x_new,AR2 ;AR2指向New緩沖區第一個單元
STM #x_old+(size-1),AR3 ;AR3指向Old緩沖區最后一個單元
STM #-1,AR0
STM #INPUT,AR4 ;模擬輸入數據指針AR4初始化
STM #OUTPUT,AR5 ;濾波器輸出數據指針AR5初始化
STM #COEFTAB,AR7 ;;;;;;;修改過的;;;;;;;;
RPT #N/2-1 ;;;;;;;修改過的;;;;;;;;
MVPD #COEF_FIR,*AR7+
STM #KS-1,BRC ;;//塊重復次數
RPTBD LOOP-1
STM #size,BK ;循環緩沖區塊大小BK=size
LD *AR4+,A
STL A,*AR2 ;輸入樣本值
STM #COEFTAB,AR7
STM #size-1,AR6
FIT_FILTER: ADD *AR2+0%,*AR3+0%,A
STH A,T
MAC *AR7+0%,B
BANZ FIT_FILTER,*AR6-
;原程序:
;FIR_FILTER: ADD *AR2+0%,*AR3+0%,A ;AH=x(n)+x(n-15)
; RPTZ B,#size-1 ;;//重復執行下一條指令size次
; firs *AR2+0%,*AR3+0%,COEF_FIR;B=B+AH*h(0),AH=x(n-1)+x(n-14)
STH A,*AR5+ ;保存濾波輸出數據到AP5所指向單元
MAR *+AR2(2)% ;修正AR2,指向New緩沖區最老的數據替代
MAR *AR3+% ;修正AR3,指向OLD緩沖區最老的數據替代
MVDD *AR2,*AR3+0% ;用New緩沖區最老的數據替代Old緩沖區中最老的數據
LOOP:
EEND B EEND
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -