fir2.asm

来自「FIR(有限冲激相应)滤波器的DSP实现程序」· 汇编 代码 · 共 42 行

ASM
42
字号
			.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 + =
减小字号Ctrl + -
显示快捷键?