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

📄 fir.asm

📁 使用DSP和MATLAB设计的一个低通FIR滤波器
💻 ASM
字号:
				.mmregs
				.global begin
K_FIR_INDEX		.set	1				;索引计数器
K_FIR_BFFR		.set	37				;FIR缓冲器大小
K_FRAME_SIZE	.set	256				;一帧数据大小
				.data
OUTPUT			.space	K_FRAME_SIZE*16
INPUT			.copy	firinput2.txt
;36阶FIR滤波器系数
COFF_FIR_START	.sect "COFF_FIR"	;输入FIR滤波器系数
				.word	-79			
				.word	-101			
				.word	0			
				.word	179			
				.word	255			
				.word	 68			
				.word	-306		
				.word	-524			
				.word	 -250			
				.word	443		
				.word	974		
				.word	664		
				.word	-566		
				.word	-1831		
				.word	-1718	
				.word	652	
				.word	4734		
				.word	8635	
				.word	10240	
				.word	8653	
				.word	4734		
				.word	652	
				.word	-1718	
				.word	-1831		
				.word	-566		
				.word	664		
				.word	974		
				.word	443		
				.word	-250			
				.word	-524		
				.word	-306		
				.word	68		
				.word	255			
				.word	179			
				.word	0  			
				.word	-101		
				.word	-79
COFF_FIR_END
;STACK			.usect	"STACK",20h		;allocate space for stack
FIR_DP			.usect	"FIR_VARS",0
D_FILIN			.usect 	"FIR_VARS",1
D_FILOUT		.usect 	"FIR_VARS",1
FIR_COFF		.usect 	"FIR_COFF",20
D_DATA_BUFFER	.usect 	"FIR_BFR",40	;滤波器缓冲器大小
				.def	FIR_INIT		;初始化FIR滤波器		
				.def	FIR_TASK		;执行FIR滤波程序		
;				.include "init_c54.inc"
				.text
;功能说明:下面这段程序对输入数据和滤波器系数的循环缓冲器
;大小进行初始化
	.asg 	AR0,FIR_INDEX_P
	.asg 	AR4,FIR_DATA_P
	.asg 	AR5,FIR_COFF_P
begin:
;	CALL	init_54
FIR_INIT:
	STM		#FIR_COFF,FIR_COFF_P
	RPT		#K_FIR_BFFR-1				;将FIR系数从程序存储器
										;移动到数据存储器
	MVPD	#COFF_FIR_START,*FIR_COFF_P+
	STM		#K_FIR_INDEX,FIR_INDEX_P
	STM		#D_DATA_BUFFER,FIR_DATA_P	;装载最新的采样值地址
	RPTZ	A,#K_FIR_BFFR				
	STL		A,*FIR_DATA_P+				;使缓冲器复位
	STM		#(D_DATA_BUFFER+K_FIR_BFFR-1),FIR_DATA_P
	STM		#FIR_COFF,FIR_COFF_P
;功能说明:下面这段程序完成FIR滤波功能
;累加器A的内容(即滤波器输出数据)=H(N)*X(N-1) FOR i=0,1,...36
	.asg	AR6,INBUF_P
	.asg	AR7,OUTBUF_P
	.asg	AR4,FIR_DATA_P
	.asg	AR5,FIR_COFF_P
FIR_TASK:
	STM		#INPUT,INBUF_P
	STM		#OUTPUT,OUTBUF_P
	STM		#K_FRAME_SIZE-1,BRC			;使块重复256次
	RPTBD	FIR_FILTER_LOOP-1
	STM		#K_FIR_BFFR,BK				;FIR循环缓冲器大小
	LD		*INBUF_P+,A					;装载输入数据
FIR_FILTER:
	STL		A,*FIR_DATA_P+%				;用最新的采样值取代最旧的采样值
	RPTZ	A,(K_FIR_BFFR-1)
	MAC		*FIR_DATA_P+0%,*FIR_COFF_P+0%,A;FIR滤波
	STH		A,*OUTBUF_P+				;代替最旧的缓冲器的值
FIR_FILTER_LOOP
EEND:	B		EEND

;init_54:
;	STM		#K_SWWSR,SWWSR
;	STM		#K_BSCR,BSCR
;	STM		#K_ST0,ST0
;	STM		#K_ST1,ST1
;	RETD
;	STM		#K_PMST,PMST	
	.end



⌨️ 快捷键说明

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