📄 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
x_new .usect "DATA1",N/2
x_old .usect "DATA2",N/2
size .set N/2
.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 #KS-1,BRC ;;//块重复次数
RPTBD LOOP-1
STM #size,BK ;循环缓冲区块大小BK=size
LD *AR4+,A
STL A,*AR2 ;输入样本值
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 B,*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 + -