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

📄 fft.asm

📁 FFT算法
💻 ASM
字号:
***********************************************
*		作者:熊先越		      *
*	   Email: xianyuexiong@163.com        *
*					      *
*	       DIT,FFT programe               *
*              filename: fft.asm              *
***********************************************
		.title	"fft.asm"
		.mmregs
		.def    _c_int00
N		.set	128
length  .set    256


;input data from file
		.data
M 		.word   8
		.align length
data	.copy	input

w		.copy	w
pow		.space 	length*16

fftdata		.space	2*length*16

;define variable for data and twiddle

;defind stack
BOS		.usect	"stack",0fh
TOS		.usect	"stack",1

;programe line
		.text
_c_int00:
 		stm	#TOS,sp
		ld	#0,dp
		rsbx	frct
*********************************************
*       step1: bit revers	       	        *
*		the needed register:		       	*
*		ar0-----the index of bit revers		*
*		ar3-----point to fft_data     		*
*		ar1-----point to data	       		*
*********************************************

	
		stm   	#length,bk
		stm		#fftdata,ar3
		stm		#data,ar2
		
		stm		#length-1,brc
		rptbd	#plend-1
		stm		#N,ar0
		
		mvdd	*ar2,*ar3+	
		st 		#0h,*ar3+
		mar		*ar2+0B
	
		
plend:
		
*********************************************
*       step2: fft			       	        *
*		the needed register:		       	*
*		ar2-----point to fftdata			*
*		ar1-----point to w 			  		*
*		ar3-----point to pos1	       		*
*		ar4-----point to pos2	       		*
*		ar6-----point to w_pos	       		*
*********************************************
		
			.data
	

first		.word	0h			;i
second		.word	0h			;j
third		.word	0h			;k

groupnum	.word	N
cellnum		.word	0001h

realin		.word	0000h
imagein		.word	0000h


		.text

fft:
		stm	w,ar1
		stm	fftdata,ar2
		ld	#0h,b
		stm	first,ar5
		st	#0h,*ar5
		
jump3:
		stm	second,ar5
		st	#0h,*ar5
jump2:
		stm	third,ar5
		st	#0h,*ar5
		
jump1:		
		rsbx	frct
		stm		cellnum,ar5	;get pos1 pos1 = ar2 + (cellnum*2*second + third)*2
		nop					;store it in ar3
		nop	
		ld		*ar5,t	
		nop
		nop
		stm		second,ar5
		nop
		nop
		mpy		*ar5,a
		nop
		nop
		nop
		sftl 	a,1
		nop
		nop
		stm		third,ar5
		nop
		nop
		add		*ar5,a
		nop
		nop
		sftl	a,1
		nop
		nop
		add		ar2,a
		nop
		nop
		stlm	a,ar3

		stm		cellnum,ar5	;get pos2 pos2 = pop + cellnum*2
		nop					;store it in ar4
		nop
		add		*ar5,1,a
		nop
		nop	
		stlm	a,ar4		
		
		stm		third,ar5	;get w_pos,w_pos = ar1 + (third*groupnum)*2
		nop
		nop
		ld		*ar5,t
		stm		groupnum,ar5
		nop
		nop
		mpy		*ar5,a	
		nop
		nop
		nop	
		sfta	a,1
		nop
		nop
		add		ar1,a
		nop
		nop
		stlm	a,ar6
		nop
		nop	
		ssbx	frct	
		ld		*ar6+,t		;w.real
		nop
		nop
		mpy		*ar4+,a		;real * w.real
		nop
		nop
		nop
		mpy		*ar4-,b		;image * w.real
		nop
		nop
		nop
		ld		*ar6-,t		;w.image
		nop
		nop
		mac		*ar4+,b		;real*w.image + image*w.real
		nop
		nop
		nop
		mas		*ar4-,a		;real*w.real - image*w.image
		nop
		nop
		nop
		stm		realin,ar5
		nop
		nop
		sth		a,1,*ar5
		nop
		nop
		stm		imagein,ar5
		nop
		nop
		sth		b,1,*ar5

		ld		*ar3+,a		;fftdata[pos2] = fftdata[pos1] - w*fftdata[pos2]
		ld		*ar3-,b

		stm		realin,ar5
		nop
		nop
		sub		*ar5,a
		nop
		nop
		stm		imagein,ar5
		nop
		nop
		sub		*ar5,b

		stl		a,-1,*ar4+
		nop
		nop
		stl		b,-1,*ar4
		
		ld		*ar3+,a		;fftdata[pos1] = fftdata[pos1] + w*fftdata[pos2]
		stm		realin,ar5
		nop
		nop
		add		*ar5,a
		ld		*ar3-,b
		nop
		nop
		stm		imagein,ar5
		nop
		nop
		add		*ar5,b

		stl		a,-1,*ar3+
		stl		b,-1,*ar3

		stm		third,ar5	;third++,if third<cellnum,jump1
		nop
		nop
		addm	#0001h,*ar5
		nop
		nop		
		ld		*ar5,a
		stm		cellnum,ar5
		nop
		nop
		sub		*ar5,a,b
		nop
		nop
		bc		jump1,blt

		stm		second,ar5	;second++,if second<groupnum,jump2
		nop
		nop
		addm	#0001h,*ar5
		nop
		nop
		ld		*ar5,a
		nop
		nop
		stm		groupnum,ar5
		nop
		nop
		sub		*ar5,a,b
		nop
		nop
		bc		jump2,blt

		stm		cellnum,ar5	;cellnum*2
		nop
		nop
		ld		*ar5,1,a
		nop
		nop
		stl		a,*ar5

		stm		groupnum,ar5;groupnum/2
		nop
		nop
		ld		*ar5,-1,a
		nop
		nop
		stl		a,*ar5

		stm		first,ar5	;first++,if first<M,jump3
		nop
		nop
		addm	#0001h,*ar5
		nop
		nop
		ld		*ar5,a	
		nop
		nop	
		stm		M,ar5
		nop
		nop
		sub		*ar5,a,b
		nop
		nop
		bc		jump3,BLT
		
*********************************************
*       step3: power spectual      	        *
*		the needed register:		       	*
*		ar5-----point to power				*
*		ar2-----point to fftdata	  		*
*********************************************

power:
		stm		pow,ar5
		ld		#0001h,b
		ld		#00h,a
jump4:
		ld		#00h,a
		squra	*ar2+,a
		nop
		nop
		nop
		nop
		squra	*ar2+,a
		nop
		nop
		nop
		nop
		sth		a,*ar5+
		add		#01h,b
		nop
		nop
		sub		#0100h,0,b,a
		nop
		nop
		bc		jump4,alt
		
		.end

	
		
				
		

⌨️ 快捷键说明

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