⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.asm

📁 c5402的几个小程序dsp开发板。学校实验室的程序
💻 ASM
字号:
				.mmregs
				.global codestart	;2.2版中似乎start成了保留字
K_DATA_SIZE		.set 256		;输入数据个数
K_BUFFER_SIZE 	.set 8			;缓冲大小,需是2的整数次幂,并大于a、b的个数
K_STACK_SIZE	.set 256		;堆栈大小
K_A				.set 3			;a向量个数
K_B				.set 4			;b向量的个数
K_CIR			.set 4			;>=a、b的长度,也可以设为K_BUFFER_SIZE-1 

STACK			.usect "stack",K_STACK_SIZE
SYSTEM_STACK	.set K_STACK_SIZE+STACK

				.data
DATA_DP:				
				.align 	K_BUFFER_SIZE
bufferdatax:	.space K_BUFFER_SIZE*16 ;size in bits
bufferdatay:	.space K_BUFFER_SIZE*16	;size in bits					
inputdata:		.word 0
filterdata:		.word 0				

				.text
				.asg AR2, ORIGIN
				.asg AR3, INPUT
				.asg AR4, FILTER
				.asg AR5, OUTPUT

				
codestart:
				SSBX FRCT
				SSBX INTM
				LD #DATA_DP,DP
				STM #SYSTEM_STACK, SP
				CALL filter_start
				NOP
				NOP
				NOP
				
LOOP:
				B LOOP
				
				.def b0,b1,b2,b3,a1,a2,a3;
				.def filter_start
b0				.set 1456H	;b1=0.1589  *2^15
b1				.set 3D07H	;b2=0.4768
b2				.set 3D07H	;b3=0.4768
b3				.set 1456H	;b4=0.1589
a1				.set -103AH	;a1=-0.1268
a2				.set 430FH	;a2=0.5239
a3				.set -1016H ;a3=-0.1257

;=================================================================
;滤波子程序:filter_start
;=================================================================				.text
filter_start:	
			STM #K_CIR,BK			;设置环形buffer的大小
			STM #1,AR0				;和步长
			STM #inputdata,ORIGIN	;AR2
			STM #bufferdatax,INPUT	;AR3
			STM #bufferdatay,FILTER	;AR4
			STM #filterdata,OUTPUT	;AR5
			;初始化	
			RPT #K_B-1-1				;
			ST #0,*INPUT+0%			;x(-1)、x(-2)、x(-3)设为0
			RPT #K_A-1
			ST  0,*FILTER+%			;y(-1)、y(-2)、y(-3)设为0
			STM #bufferdatay,FILTER
			
			STM #K_DATA_SIZE-1,BRC	;块循环次数,头三个值已经直接通过了
			RPTB filter_end-1		;块循环结束位置
			;可以把块循环改成中断调用,有新数据就中断一次。	
			nop						;数据从件导入点,加nop保证数据在使用前导入
			nop
			MVDD *ORIGIN,*INPUT		;新数据
			MAR *+INPUT(-K_B+1)%
			MPY *INPUT+0%,#b3,B		;B=x(n-3)*b3, i=i+1
			LD	B,A
			MPY *INPUT+0%,#b2,B		;B=x(n-2)*b2, i=i+1
			ADD B,A
			MPY *INPUT+0%,#b1,B		;B=x(n-1)*b1, i=i+1	                                                                          				                                                                          				                                                                          				                                                                          
			ADD B,A
			MPY *INPUT+0%,#b0,B		;B=x(n)*b0, i=i+1	                                                                          				                                                                          				                                                                          				                                                                          
			ADD B,A
			MPY *FILTER+0%,#a3,B	;B=y(n-3)*a3, j=j+1	j=n-3为y的指针	                                                                          				                                                                          				                                                                          				                                                                          
			ADD B,A
			MPY *FILTER+0%,#a2,B	;B=y(n-2)*a2, j=j+1		                                                                          				                                                                          				                                                                          				                                                                          
			ADD B,A
			MPY *FILTER+0%,#a1,B	;B=y(n-1)*a1, j=j+1		                                                                          				                                                                          				                                                                          				                                                                          
			ADD B,A							
			STH A,*FILTER			;传送y(n)至y区,		;16位小数相乘得到的是32位小数
			STH A,*OUTPUT			;传送y(n)至结果区	;取前16位就行了
			MAR *+FILTER(-K_A+1)%
			nop
			nop						;数据文件导出点,加nop保证数据在导出前已更新
filter_end:	NOP						;循环结束
			RET
			.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -