📄 diir.asm
字号:
;直接形式的IIR数字滤波器通用程序
.title "diir.asm"
.mmregs
.global start
.def start,_c_int00
.copy "iirin.inc" ;输入信号x(n)
.copy "diirdata.inc" ;滤波器系数Bn.An
.data
BN .usect "BN",N+1
AN .usect "AN",N+1
INBUF .usect "INBUF",256 ;输入缓冲区在数据区0x2400
OUTPUT .usect "OUTPUT",256 ;输出缓冲区在数据区0x2600
.text
.asg AR0,INDEX_P
.asg AR2,XN_P
.asg AR3,ACOFF_P
.asg AR4,YN_P
.asg AR5,BCOFF_P
_c_int00
b start
nop
nop
NMI rete
nop
nop
nop
SINT17 .space 4*16
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rsbx intm
rete
nop
nop
INT1 rsbx intm
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: rete
nop
nop
RINT0: rete
nop
nop
nop
XINT0: rete
nop
nop
nop
RINT1: rete
nop
nop
nop
XINT1: rete
nop
nop
nop
INT3: rete
nop
nop
nop
start: SSBX FRCT
SSBX OVM
SSBX SXM
STM #BN+N,AR1
RPT #N
MVPD #table,*AR1-
STM #AN+N-1,AR1
RPT #N-1
MVPD #table+N+1,*AR1-
STM #OUTPUT,AR1
RPTZ A,#255
STL A,*AR1+
STM #INBUF,AR1
RPT #255
MVPD #INPUT,*AR1+
STM #OUTPUT,YN_P
STM #INBUF,XN_P
STM #N-1,INDEX_P
IIR: SUB A,A
STM #BN,BCOFF_P
STM #AN,ACOFF_P
RPT #N-1 ;计算前向通道
MAC *XN_P+,*BCOFF_P+,A
MAC *XN_P,*BCOFF_P,A
MAR *XN_P-0 ;将AR2指针指向x(n-N)
RPT #N-1 ;计算反馈通道
MAC *YN_P+,*ACOFF_P+,A
STH A,*YN_P-0 ;保存y(n)
B IIR
EEND B EEND
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -