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

📄 iir.asm

📁 此程序是用于DSP设计IIR数字滤波器的低通滤波器
💻 ASM
字号:
                    .mmregs
           		    .def     filter_start
           		    .def     _main         ;定义主函数入口
K_DATA_SIZE 	    .set     256           ; 输入数据个数
K_BUFFER_SIZE		.set     8             ; processing buffer size,must be greater than the number of a and b, and must be power of 2
K_STACK_SIZE 	 	.set     256		      ; 堆栈大小
K_A             	.set     3             ; a的个数
K_B             	.set     4             ; b的个数
K_CIR           	.set    K_BUFFER_SIZE

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

DATA_DP     	    .usect "filter_vars",0
filterdata  		.usect "filter_vars",K_DATA_SIZE
bufferdatay 		.usect "filter_vars",K_BUFFER_SIZE*2
bufferdatax 		.usect "filter_vars",K_BUFFER_SIZE*2
          
           .data
           .global   inputdata
inputdata
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16305
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16304
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16304
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16304
	.WORD	21315,	4595,	-2444,	11368,	15066,	-2014,	-8408,	6957
	.WORD	12879,	-1643,	-5536,	11893,	19128,	4966,	428,	16304
          
           .text
           .asg AR2,ORIGIN
           .asg AR3,INPUT
           .asg AR4,FILTER
           .asg AR5,OUTPUT
 
;START: 
_main:
           SSBX   FRCT
           SSBX   INTM
           LD     #DATA_DP,DP
           STM    #STACK,SP
           CALL   filter_start
           NOP
           NOP
           NOP
LOOP 
           B       LOOP
 
          .def    b1,b2,b3,a1,a2
          .def    filter_start

b1        .set    00EDH        	;b1=0.00725 
b2        .set    -02C9H        ;b2=-0.027625  
b3        .set    02C9H        	;b3=0.02762
b4        .set    -00EDH        ;b4=-0.00725 
a1        .set    12DFH       	;a1=0.1474375
a2        .set    0ED0H        	;a2=0.11475
a3        .set    0463H       	;a3=0.034275
          
          .text
filter_start:       
          STM    #inputdata,ORIGIN
          STM    #bufferdatax,INPUT
          STM    #bufferdatay,FILTER
          STM    #filterdata,OUTPUT
;************滤波*************
          STM    #K_DATA_SIZE-3-1,BRC   ;头3个值直接通过
          STM    #K_CIR,BK
          STM    #1,AR0 
          RPTB   filter_end-1
          MVDD   *ORIGIN+,*INPUT         
     	  RPT    #K_B-1-1                 	;b1,b2,b3, b4的个数
     	  MAR    *INPUT-0%              	;调整输入到相应位置
          MPY    *INPUT+0%,#b4,B        	;B=b4*x(i) 
          LD     B,A
          MPY    *INPUT+0%,#b3,B        	;B=b3*x(i+1) 
          ADD     B,A
          MPY    *INPUT+0%,#b2,B        	;B=b2*x(i+2) 
          ADD     B,A
          MPY    *INPUT+0%,#b1,B        	;B=b1*x(i+3)
          ADD    B,A                      	;y(x+3)=A
 ;***********************        
          MPY    *FILTER+0%,#a3,B       	;B=y(i)*a3
          ADD    B,A                      	;A=A+B  
          MPY    *FILTER+0%,#a2,B       	;B=y(i+1)*a2
          ADD    B,A                      	;A=A+B  
          MPY    *FILTER+0%,#a1,B       	;B=y(i+2)*a1
          ADD    B,A                      	;y(x+3)=A+B
          STH    A,*FILTER-0%           	;FILTER++  
          STH    A,*OUTPUT+
          MAR    *FILTER-0%                 ;调整滤波器到相应位置
filter_end:
          NOP     
          RET
          
          .sect	"VECTORS"
          .ref filter_start
reset:
		b	_main
	
          .end      

⌨️ 快捷键说明

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