?? 3-10.asm
字號(hào):
.mmregs
.ref filter_start
K_DATA_SIZE .set 256 ;輸入數(shù)據(jù)個(gè)數(shù)
K_BUFFER_SIZE .set 8 ;緩沖大小,必須是大于a和b并且是2的整數(shù)次冪
K_STACK_SIZE .set 256 ;堆棧大小
K_A .set 3 ;濾波器a參數(shù)的個(gè)數(shù)
K_B .set 4 ;濾波器b參數(shù)的個(gè)數(shù)
K_CIR .set K_BUFFER_SIZE
STACK .usect "stack",K_STACK_SIZE
SYSTEM_STACK .set K_STACK_SIZE+STACK
DATA_DP .usect "filter_vars",0
filterdata .usect "filter_vars",K_DATA_SIZE
bufferdatay .usect "filter_vars",K_BUFFER_SIZE*2
bufferdatax .usect "filter_vars",K_BUFFER_SIZE*2
.data
.global inputdata
.text
.asg AR2,ORIGIN
.asg AR3,INPUT
.asg AR4,FILTER
.asg AR5,OUTPUT
START:
SSBX FRCT
SSBX INTM
LD #DATA_DP,DP
STM #STACK,SP
CALL filter_start
NOP
NOP
NOP
LOOP
B LOOP
.def b1,b2,b3,a1,a2
.def filter_start
b1 .set 1456H ;b1=0.1589
b2 .set 3D07H ;b2=0.4768
b3 .set 3D07H ;b3=0.4768
b4 .set 1456H ;b4=0.1589
a1 .set -103AH ;a1=-0.1268
a2 .set 430FH ;a2=0.5239
a3 .set -1016H ;a3=-0.1257
.text
filter_start:
STM #K_CIR,BK
STM #1,AR0 ;設(shè)置循環(huán)緩沖區(qū)大小和步長
STM #inputdata,ORIGIN
STM #bufferdatax,INPUT
STM #bufferdatay,FILTER
STM #filterdata,OUTPUT
;初始化
RPT #K_A-1 ;系數(shù) a1,a2,a3 的個(gè)數(shù)
MVDD *ORIGIN+,*INPUT+0% ;初始化頭3 個(gè)Ys
STM #bufferdatax,INPUT
;設(shè)置初始化濾波數(shù)據(jù)
RPT #K_A-1 ;系數(shù)a1,a2,a3的個(gè)數(shù)
MVDD *INPUT+0%,*FILTER+0% ;初始化3 個(gè)Ys
STM #bufferdatay,FILTER
STM #bufferdatax,INPUT
;濾波
STM #K_DATA_SIZE-3-1,BRC ;設(shè)置塊循環(huán)計(jì)數(shù)器
RPTB filter_end-1 ;頭3個(gè)值直接通過
MVDD *ORIGIN+,*INPUT
RPT #K_B-1-1 ;系數(shù)b1,b2,b3, b4的個(gè)數(shù)
MAR *INPUT-0% ;調(diào)整輸入到相應(yīng)位置
MPY *INPUT+0%,#b4,B ;計(jì)算B=b4*x(i)
LD B,A
MPY *INPUT+0%,#b3,B ;計(jì)算B=b3*x(i+1)
ADD B,A
MPY *INPUT+0%,#b2,B ;計(jì)算B=b2*x(i+2)
ADD B,A
MPY *INPUT+0%,#b1,B ;計(jì)算B=b1*x(i+3)
ADD B,A ;計(jì)算y(x+3)=A
MPY *FILTER+0%,#a3,B ;計(jì)算B=y(i)*a3
ADD B,A ;計(jì)算A=A+B
MPY *FILTER+0%,#a2,B ;計(jì)算B=y(i+1)*a2
ADD B,A ;計(jì)算A=A+B
MPY *FILTER+0%,#a1,B ;計(jì)算B=y(i+2)*a1
ADD B,A ;計(jì)算y(x+3)=A+B
STH A,*FILTER-0% ;為下一次濾波保存數(shù)據(jù)
STH A,*OUTPUT+ ;輸出數(shù)據(jù)到OUTPUT的下一個(gè)單元
MAR *FILTER-0% ;調(diào)整濾波器到相應(yīng)位置
filter_end: NOP
RET
.end ;程序代碼結(jié)束
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -