📄 iir.asm
字号:
.mmregs
.def _c_int00
.ref filter_start
K_DATA_SIZE .set 256 ; input data size
K_BUFFER_SIZE .set 8 ; processing buffer size,must be greater than the number of a and b, and must be power of 2
K_STACK_SIZE .set 256 ; stack size
K_A .set 3 ; the number of a
K_B .set 4 ; the number of b
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
inputdata
.WORD 75, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16305
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304
.WORD 21315, 4595, -2444, 11368, 15066, -2014, -8408, 6957
.WORD 12879, -1643, -5536, 11893, 19128, 4966, 428, 16304
.text
.asg AR2,ORIGIN
.asg AR3,INPUT
.asg AR4,FILTER
.asg AR5,OUTPUT
_c_int00
SSBX FRCT
SSBX INTM
LD #DATA_DP,DP
STM #STACK,SP
CALL filter_start
NOP
NOP
NOP
LOOP
B LOOP
***************************************************************
* Y(z) 0.1589 + 0.4768*z-1 + 0.4768*z-2 + 0.1589*z-3
* ------=----------------------------------------------------
* X(z) 1 - (-0.1268*z-1 + 0.5239*z-2 - 0.1257*z-3)
***************************************************************
.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 #inputdata,ORIGIN
STM #bufferdatax,INPUT
STM #bufferdatay,FILTER
STM #filterdata,OUTPUT
STM #bufferdatay,FILTER
STM #bufferdatax,INPUT
;filtering
STM #K_DATA_SIZE-3-1,BRC ;let go the first 3 values as initial y
STM #K_CIR,BK
STM #1,AR0 ;set the circular buffer size and the step size
RPTB filter_end-1
;waiting for input ;wainting for interrupt when in hardware processing
MVDD *ORIGIN+,*INPUT
RPT #K_B-1-1 ; the number of b (b1,b2,b3 b4 here)
MAR *INPUT-0% ;adjust input to its proper place
MPY *INPUT+0%,#b4,B ;B=b4*x(i)
LD B,A
MPY *INPUT+0%,#b3,B ;B=b3*x(i+1)
ADD B,A
MPY *INPUT+0%,#b2,B ;B=b2*x(i+2)
ADD B,A
MPY *INPUT+0%,#b1,B ;B=b1*x(i+3)
ADD B,A ;y(x+3)=A
MPY *FILTER+0%,#a3,B ;B=y(i)*a3
ADD B,A ;A=A+B
MPY *FILTER+0%,#a2,B ;B=y(i+1)*a2
ADD B,A ;A=A+B
MPY *FILTER+0%,#a1,B ;B=y(i+2)*a1
ADD B,A ;y(x+3)=A+B
STH A,*FILTER-0% ;FILTER++
STH A,*OUTPUT+
MAR *FILTER-0% ;adjust FILTER to its proper place
filter_end:
NOP
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -