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

📄 fft.asm

📁 FFT的实验程序
💻 ASM
字号:
		.title		"FFT.asm"
		.mmregs
		.global		_MFFT
		.text

sine1:			.sect	   "sine1"
      .word 	0    ,201  ,402  ,603   
      .word     804  ,1005 ,1205 ,1407  
      .word 	1607 ,1808 ,2009 ,2210  
      .word     2410 ,2611 ,2811 ,3011  
      .word     3211 ,3411 ,3611 ,3811
      .word     4011 ,4210 ,4409 ,4609  
      .word     4808 ,5006 ,5205 ,5403  
      .word     5602 ,5800 ,5997 ,6195  
      .word     6392 ,6589 ,6786 ,6983  
      .word 	7179 ,7375 ,7571 ,7766  
      .word     7961 ,8156 ,8351 ,8545  
      .word     8739 ,8933 ,9126 ,9319  
      .word     9512 ,9704 ,9896 ,10087
      .word     10278,10469,10659,10849
      .word     11039,11228,11416,11605
      .word     11793,11980,12167,12353 
      .word     12539,12725,12910,13094
      .word     13278,13462,13645,13828
      .word     14010,14191,14372,14552
      .word     14732,14912,15090,15269
      .word     15446,15623,15800,15976
      .word     16151,16325,16499,16673
      .word     16846,17018,17189,17360
      .word     17530,17700,17869,18037
      .word     18204,18371,18537,18703
      .word     18868,19032,19195,19358
      .word     19519,19681,19841,20001
      .word     20159,20318,20475,20631
      .word     20787,20942,21097,21250
      .word     21403,21555,21706,21856
      .word     22005,22154,22301,22448
      .word     22594,22740,22884,23027
      .word     23170,23312,23453,23593
      .word     23732,23870,24007,24144
      .word     24279,24414,24547,24680
      .word     24812,24943,25073,25201
      .word     25330,25457,25583,25708
      .word     25832,25955,26077,26199
      .word     26319,26438,26557,26674
      .word     26790,26905,27020,27133
      .word     27245,27356,27466,27576
      .word     27684,27791,27897,28002
      .word     28511,28609,28707,28803
      .word     28898,28993,29086,29178
      .word     29269,29359,29447,29535
      .word     29621,29707,29791,29874
      .word     29956,30037,30117,30196
      .word     30273,30350,30425,30499
      .word     30572,30644,30714,30784
      .word     30852,30919,30985,31050
      .word     31114,31176,31237,31298
      .word     31357,31414,31471,31526
      .word     31581,31634,31685,31736
      .word     31785,31834,31881,31927
      .word     31971,32015,32057,32098
      .word     32138,32176,32214,32250
      .word     32285,32319,32351,32383
      .word     32413,32442,32469,32496
      .word     32521,32545,32568,32589
      .word     32610,32629,32647,32663
      .word     32679,32693,32706,32718
      .word     32728,32737,32745,32752
      .word     32758,32762,32765,32767
      .word     32767,32767,32765,32762
      .word     32758,32752,32745,32737
      .word     32728,32718,32706,32693
      .word     32679,32663,32647,32629
      .word     32610,32589,32568,32545
      .word     32521,32496,32469,32442
      .word     32413,32383,32351,32319
      .word     32285,32250,32214,32176
      .word     32138,32098,32057,32015
      .word     31971,31927,31881,31834
      .word     31785,31736,31685,31634
      .word     31581,31526,31471,31414
      .word     31357,31298,31237,31176
      .word     31114,31050,30985,30919
      .word     30852,30784,30714,30644
      .word     30572,30499,30425,30350
      .word     30273,30196,30117,30037
      .word     29956,29178,29086,28993
      .word     28898,28803,28707,28609     
      .word     28511,28002,27897,27791      
      .word     27684,27576,27466,27356
      .word     27245,27133,27020,26905
      .word     26790,26674,26557,26438
      .word     26319,26199,26077,25955
      .word     25832,25708,25583,25457
      .word     25330,25201,25073,24943
      .word     24812,24680,24547,24414
      .word     24279,24144,24007,23870
      .word     23732,23593,23453,23312
      .word     23170,23027,22884,22740
      .word     22594,22448,22301,22154
      .word     22005,21856,21706,21555
      .word     21403,21250,21097,20942
      .word     20787,20631,20475,20318
      .word     20159,20001,19841,19681
      .word     19519,19358,19195,19032
      .word     18868,18703,18537,18371
      .word     18204,18037,17869,17700
      .word     17530,17360,17189,17018
      .word     16846,16673,16499,16325
      .word     16151,15976,15800,15623
      .word     15446,15269,15090,14912
      .word     14732,14552,14372,14191
      .word     14010,13828,13645,13462
      .word     13278,13094,12910,12725
      .word     12539,12353,12167,11980
      .word     11793,11605,11416,11228
      .word     11039,10849,10659,10469
      .word     10278,10087,9896 ,9704
      .word     9512 ,9319 ,9126 ,8933
      .word     8739 ,8545 ,8351 ,8156
      .word     7961 ,7766 ,7571 ,7375
      .word 	7179 ,6983 ,6786 ,6589
      .word     6392 ,6195 ,5997 ,5800
      .word     5602 ,5403 ,5205 ,5006
      .word     4808 ,4609 ,4409 ,4210
      .word     4011 ,3811 ,3611 ,3411
      .word     3211 ,3011 ,2811 ,2611
      .word     2410 ,2210 ,2009 ,1808
      .word 	1607 ,1407 ,1205 ,1005
      .word     804  ,603  ,402  ,201
   
    

cosine1			.sect      "cosine1"		
      .word     32767,32767,32765,32762
      .word     32758,32752,32745,32737
      .word     32728,32718,32706,32693
      .word     32679,32663,32647,32629
      .word     32610,32589,32568,32545
      .word     32521,32496,32469,32442
      .word     32413,32383,32351,32319
      .word     32285,32250,32214,32176
      .word     32138,32098,32057,32015
      .word     31971,31927,31881,31834
      .word     31785,31736,31685,31634
      .word     31581,31526,31471,31414
      .word     31357,31298,31237,31176
      .word     31114,31050,30985,30919
      .word     30852,30784,30714,30644
      .word     30572,30499,30425,30350
      .word     30273,30196,30117,30037
      .word     29956,29178,29086,28993
      .word     28898,28803,28707,28609     
      .word     28511,28002,27897,27791      
      .word     27684,27576,27466,27356
      .word     27245,27133,27020,26905
      .word     26790,26674,26557,26438
      .word     26319,26199,26077,25955
      .word     25832,25708,25583,25457
      .word     25330,25201,25073,24943
      .word     24812,24680,24547,24414
      .word     24279,24144,24007,23870
      .word     23732,23593,23453,23312
      .word     23170,23027,22884,22740
      .word     22594,22448,22301,22154
      .word     22005,21856,21706,21555
      .word     21403,21250,21097,20942
      .word     20787,20631,20475,20318
      .word     20159,20001,19841,19681
      .word     19519,19358,19195,19032
      .word     18868,18703,18537,18371
      .word     18204,18037,17869,17700
      .word     17530,17360,17189,17018
      .word     16846,16673,16499,16325
      .word     16151,15976,15800,15623
      .word     15446,15269,15090,14912
      .word     14732,14552,14372,14191
      .word     14010,13828,13645,13462
      .word     13278,13094,12910,12725
      .word     12539,12353,12167,11980
      .word     11793,11605,11416,11228
      .word     11039,10849,10659,10469
      .word     10278,10087,9896 ,9704
      .word     9512 ,9319 ,9126 ,8933
      .word     8739 ,8545 ,8351 ,8156
      .word     7961 ,7766 ,7571 ,7375
      .word 	7179 ,6983 ,6786 ,6589
      .word     6392 ,6195 ,5997 ,5800
      .word     5602 ,5403 ,5205 ,5006
      .word     4808 ,4609 ,4409 ,4210
      .word     4011 ,3811 ,3611 ,3411
      .word     3211 ,3011 ,2811 ,2611
      .word     2410 ,2210 ,2009 ,1808
      .word 	1607 ,1407 ,1205 ,1005
      .word     804  ,603  ,402  ,201
      .word 	0    ,-201  ,-402  ,-603   
      .word     -804  ,-1005 ,-1205 ,-1407  
      .word 	-1607 ,-1808 ,-2009 ,-2210  
      .word     -2410 ,-2611 ,-2811 ,-3011  
      .word     -3211 ,-3411 ,-3611 ,-3811
      .word     -4011 ,-4210 ,-4409 ,-4609  
      .word     -4808 ,-5006 ,-5205 ,-5403  
      .word     -5602 ,-5800 ,-5997 ,-6195  
      .word     -6392 ,-6589 ,-6786 ,-6983  
      .word 	-7179 ,-7375 ,-7571 ,-7766  
      .word     -7961 ,-8156 ,-8351 ,-8545  
      .word     -8739 ,-8933 ,-9126 ,-9319  
      .word     -9512 ,-9704 ,-9896 ,-10087
      .word     -10278,-10469,-10659,-10849
      .word     -11039,-11228,-11416,-11605
      .word     -11793,-11980,-12167,-12353 
      .word     -12539,-12725,-12910,-13094
      .word     -13278,-13462,-13645,-13828
      .word     -14010,-14191,-14372,-14552
      .word     -14732,-14912,-15090,-15269
      .word     -15446,-15623,-15800,-15976
      .word     -16151,-16325,-16499,-16673
      .word     -16846,-17018,-17189,-17360
      .word     -17530,-17700,-17869,-18037
      .word     -18204,-18371,-18537,-18703
      .word     -18868,-19032,-19195,-19358
      .word     -19519,-19681,-19841,-20001
      .word     -20159,-20318,-20475,-20631
      .word     -20787,-20942,-21097,-21250
      .word     -21403,-21555,-21706,-21856
      .word     -22005,-22154,-22301,-22448
      .word     -22594,-22740,-22884,-23027
      .word     -23170,-23312,-23453,-23593
      .word     -23732,-23870,-24007,-24144
      .word     -24279,-24414,-24547,-24680
      .word     -24812,-24943,-25073,-25201
      .word     -25330,-25457,-25583,-25708
      .word     -25832,-25955,-26077,-26199
      .word     -26319,-26438,-26557,-26674
      .word     -26790,-26905,-27020,-27133
      .word     -27245,-27356,-27466,-27576
      .word     -27684,-27791,-27897,-28002
      .word     -28511,-28609,-28707,-28803
      .word     -28898,-28993,-29086,-29178
      .word     -29269,-29359,-29447,-29535
      .word     -29621,-29707,-29791,-29874
      .word     -29956,-30037,-30117,-30196
      .word     -30273,-30350,-30425,-30499
      .word     -30572,-30644,-30714,-30784
      .word     -30852,-30919,-30985,-31050
      .word     -31114,-31176,-31237,-31298
      .word     -31357,-31414,-31471,-31526
      .word     -31581,-31634,-31685,-31736
      .word     -31785,-31834,-31881,-31927
      .word     -31971,-32015,-32057,-32098
      .word     -32138,-32176,-32214,-32250
      .word     -32285,-32319,-32351,-32383
      .word     -32413,-32442,-32469,-32496
      .word     -32521,-32545,-32568,-32589
      .word     -32610,-32629,-32647,-32663
      .word     -32679,-32693,-32706,-32718
      .word     -32728,-32737,-32745,-32752
      .word     -32758,-32762,-32765,-32767		
		
sine		.usect		"sine",512
cosine		.usect		"cosine",512
fft_data    .usect      "fft_data",2048
d_input     .usect      "d_input",2048
;fft_out     .usect      "fft_out"64

K_DATA_IDX_1			.set	2
K_DATA_IDX_2			.set	4
K_DATA_IDX_3			.set	8
K_TWID_TBL_SIZE			.set	512
K_TWID_IDX_3			.set	128
K_FLY_COUNT_3			.set	4
K_FFT_SIZE			.set	32   ;N
K_LOGN				.set	5    ;LOG(N)

		.bss		d_twid_idx,1
		.bss		d_data_idx,1
		.bss		d_grps_cnt,1
		.bss        input_ptr,1
		.bss        output_ptr,1
			
		
_MFFT:
		PSHM		AR1
		PSHM		AR6
		PSHM		AR7
		SSBX		OVM
		SSBX		FRCT
		SSBX        SXM
		STM		    #sine1,AR2
		STM		    #sine,AR3
		RPT		    #511
		MVDD		*AR2+,*AR3+
		STM		    #cosine1,AR2
		STM		    #cosine,AR3
		RPT		    #511
		MVDD		*AR2+,*AR3+
        STM         #fft_data,AR2
        NOP
        RPTZ        B,#2048-1
        STL         B,*AR2+
        
        STM         #d_input,AR2
        NOP
        RPTZ        B,#2048-1
        STL         B,*AR2+
        
		STLM		A,AR2
		STM         #d_input,AR3
		STL         A,*(input_ptr)
		LD          04h,A
		STL         A,*(output_ptr)
        RPT         #2*K_FFT_SIZE-1
        MVDD        *AR2+,*AR3+
        
        .asg        AR2,REORDERED
        .asg        AR3,ORIGINAL_INPUT
        .asg        AR7,DATA_PROC_BUF
        
        STM         #d_input,ORIGINAL_INPUT
        STM         #fft_data,DATA_PROC_BUF
        MVMM        DATA_PROC_BUF,REORDERED
        STM		    #K_FFT_SIZE-1,BRC
		RPTBD		bit_rev_end-1
		STM		    #K_FFT_SIZE,AR0
		NOP
		MVDD		*ORIGINAL_INPUT+,*REORDERED+
		MVDD		*ORIGINAL_INPUT-,*REORDERED+
		MAR		    *ORIGINAL_INPUT+0B
		NOP
		
bit_rev_end:
;FFT Code
		.asg		AR1,GROUP_COUNTER
		.asg		AR2,PX
		.asg		AR3,QX
		.asg		AR4,WR
		.asg		AR5,WI
		.asg		AR6,BUTTERFLY_COUNTER
		.asg		AR7,STAGE_COUNTER
;    stage 1
		STM		#0,BK
		LD		#-1,ASM
		STM		#fft_data,PX							
		LD		*PX,16,A
		STM		#fft_data+K_DATA_IDX_1,QX
		STM		#K_FFT_SIZE/2-1,BRC
		RPTBD		stage1end-1
		STM		#K_DATA_IDX_1+1,AR0
		SUB		*QX,16,A,B
		ADD		*QX,16,A
		STH		A,ASM,*PX+
		ST		B,*QX+
		||LD		*PX,A
		SUB		*QX,16,A,B
		ADD		*QX,16,A
		STH		A,ASM,*PX+0
		ST		B,*QX+0%
		||LD		*PX,A
		
stage1end:
;    stage 2
		STM		#fft_data,PX
		STM		#fft_data+K_DATA_IDX_2,QX
		STM		#K_FFT_SIZE/4-1,BRC
		LD		*PX,16,A
		RPTBD		stage2end-1
		STM		#K_DATA_IDX_2+1,AR0
;	1st bufferfly
		SUB		*QX,16,A,B
		ADD		*QX,16,A
		STH		A,ASM,*PX+
		ST		B,*QX+
		||LD		*PX,A
		SUB		*QX,16,A,B
		ADD		*QX,16,A
		STH		A,ASM,*PX+
		STH		A,ASM,*QX+
;	2st bufferfly
		MAR		*QX+
		ADD		*PX,*QX,A
		SUB		*PX,*QX-,B
		STH		A,ASM,*PX+
		SUB		*PX,*QX,A
		ST		B,*QX
		||LD		*QX+,B
		ST		A,*PX
		||ADD		*PX+0%,A
		ST		A,*QX+0%
		||LD		*PX,A
stage2end:
;    stage 3 through stage logN
		STM		#K_TWID_TBL_SIZE,BK
		ST		#K_TWID_IDX_3,d_twid_idx
		STM		#K_TWID_IDX_3,AR0
		STM		#cosine,WR
		STM		#sine,WI
		STM		#K_LOGN-2-1,STAGE_COUNTER
		ST		#K_FFT_SIZE/8-1,d_grps_cnt
		STM		#K_FLY_COUNT_3-1,BUTTERFLY_COUNTER
		ST		#K_DATA_IDX_3,d_data_idx
stage:
		STM		#fft_data,PX
		LD		d_data_idx,A
		ADD		*(PX),A
		STLM		A,QX
		MVDK		d_grps_cnt,GROUP_COUNTER
group:
		MVMD		BUTTERFLY_COUNTER,BRC
		RPTB		bufferflyend-1
		LD		*WR,T
		MPY		*QX+,A
		MACR		*WI+0%,*QX-,A
		ADD		*PX,16,A,B
		ST		B,*PX
		||SUB		*PX+,B
		ST		B,*QX
		||MPY		*QX+,A
		MASR		*QX,*WR+0%,A
		ADD		*PX,16,A,B
		ST		B,*QX+
		||SUB		*PX,B
		LD		*WR,T
		ST		B,*PX+
		||MPY		*QX+,A
bufferflyend:
;	Update pointers for next group
		PSHM		AR0
		MVDK		d_data_idx,AR0
		MAR		*PX+0
		MAR		*QX+0
		BANZD		group,*GROUP_COUNTER-
		POPM		AR0
		MAR		*QX-
;	Update counters and indices for next stage
		LD		d_data_idx,A
		SUB		#1,A,B
		STLM		B,BUTTERFLY_COUNTER
		STL		A,1,d_data_idx
		LD		d_grps_cnt,A
		STL		A,ASM,d_grps_cnt
		LD		d_twid_idx,A			
		STL		A,ASM,d_twid_idx
		BANZD		stage,*STAGE_COUNTER-
		MVDK		d_twid_idx,AR0
fft_end:
	    STM		#fft_data,AR2
		MVDM	*(input_ptr),AR3
		MVDM  	*(output_ptr),AR4
		STM		#K_FFT_SIZE-1,BRC
		NOP
		RPTB	power_end-1
		MVDD    *AR2,*AR3+ 
		SQUR	*AR2+,A
		MVDD    *AR2,*AR3+
		SQURA	*AR2+,A
		STH		A,*AR4+
		NOP

power_end:
		RSBX        SXM
		RSBX		OVM
		RSBX		FRCT
		POPM		AR7
		POPM		AR6
		POPM		AR1
		RET		
		
		
				
				
														

⌨️ 快捷键说明

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