📄 fir.asm
字号:
.title "fir.asm"
.copy "init.h"
H: .equ 3F0h ;存放滤波器系数的起始地址
X: .equ 300h ;存放输入数据的起始地址
Y: .equ 2300h ;存放滤波器输出数据的起始地址
XN: .equ 380h ;线性缓冲区
.data
INPUT .copy "testdata.dat" ;模拟输入在数据存储区0x300
OUTPUT .sect "output" ;输出数据在数据区0x2000
.space 128*16 ;K_FRAME_SIZE*16 ;
;h0=h10=000h,h1=h9=2FEh,h2=h8=675h,h3=h7=9B0h,h4=h6=0BF9h,h5=0CCDh
DH: .word 000h,02FEh,0675h,09B0h,0BF9h,0CCDh
.word 0BF9h, 09B0h, 0675h, 02FEh, 000h ;滤波器系数
.text
START: SOVM
LARP 1
LAR AR1,#H
RPT #10
BLDD #DH,*+ ;将滤波器系数移至3f0h开始的单元中
LAR AR0,#380h ;#XN
ZAC
MAR *,AR0
RPT #10
SACL *+ ;将存放N个样本的数据缓冲区清0
LAR AR1,#X
LAR AR3,#Y
LAR AR4,#127
NEXT: SOVM
LAR AR5,#38Ah ;N(11)个单元数据缓冲区的底部
LAR AR2,#H
MAR *,AR1
LACC *+
LDP #7
SACL XN ;读入样本到数据缓冲区的顶部
MAR *,AR5
ZAC
LT *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+,AR5
LTD *-,AR2
MPY *+
APAC ;读取N个输入样本并进行N次乘法和累加
LARP 3
SACH *+,2 ;保存滤波器输出,滤波结果右移14位
LARP 4
BANZ NEXT
HERE: B HERE
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -