📄 fir.asm
字号:
.include 240x.h
.global start,FIR
.data
.include "lowpass.inc" ;低通滤波器系数(32个)
N .set 32 ;32点FIR滤波
DPTRI .set 8000h ;输入波形地址
DPTRO .set 0a000h ;输出波形地址
i .set 1024 ;输入波形点数
.sect ".vectors"
b start
.bss buff,N ;系数缓存
.bss input,1 ;当前输入数据
.bss output,1 ;当前输出数据
.text
start:
ldp #0e0H
splk #6fH,WDCR
splk #5555H,WDKEY
splk #0aaaaH,WDKEY ;关闭看门狗中断
splk #81feH,SCSR1 ;设置DSP运行频率40m
ldp #buff
splk #0,input
splk #0,output
mar *,ar0
lar ar0,#buff
zac ;acc低16位清0
rpt #N-1 ;循环32次
sacl *+ ;系数缓存清零
lar ar2,#DPTRI ;ar2->输入存储区
lar ar3,#DPTRO ;ar3->输出缓冲区
lar ar7,#i ;ar7=处理波形点数
mar *,ar2 ;指定当前辅助存储器为ar2
done: lacl *+ ;读入当前输入值
sacl input
sacl buff ;存入系数缓存
call FIR ;调用滤波子程序完成滤波处理
mar *,ar3
sach output,1
sach *+,1,7 ;滤波后的结果右移1位存到输出缓冲区
banz done,*-,2 ;点数-1,如未处理完循环
b $
;子程序完成32点FIR滤波
FIR: mar *,ar1
lar ar1,#buff+N-1
mpyk #0 ;乘法器清零
zac ;累加器请零
rpt #N-1 ;计算32个累加和
macd coef,*- ;系数相乘、累加运算
apac
ret
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -