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

📄 fft.asm

📁 TMS320F2812 512点的FFT程序 给定14比特AD采样数据
💻 ASM
字号:

N				.set 		512			;N=8点

L				.set        9			;N=2^L

				.asg xar0,px_i;
				.asg xar1,qx_i;
				.asg xar2,px;
				.asg xar3,qx;
				.asg xar4,wr;
				.asg xar5,wi;
				.asg ar6,temp
				.asg ar7,temp1 ;

				.data
fft_input		.copy		FIR_Input.asm
;fft_input		.copy		test.asm
fft_temp		.copy		fft_temp.asm
fft_real		.copy		FIR_Output.asm
fft_imag		.copy		FIR_Output.asm
sintable		.copy		sintable.asm
costable		.copy		costable.asm

butterfly_pointer 	.word 0
group_pointer 		.word 0
pointer3 		.word 0
gate1 			.word 0
gate2 			.word 0
gate3 			.word 0
p_offset 		.word 0
q_offset 		.word 0
m1 				.word 0
m2 				.word 0
m4 				.word 0
u 				.long 0
v 				.long 0
times 			.word 0
w_offset 		.word 0
w_times 		.word 128			
				
				.text
				.global  _c_int00


_c_int00:		C28OBJ	; Enable C28x Object Mode
  				C28ADDR	; Enable C27x/C28x Address Mode
  				.c28_amode	; Tell assembler we are in C27x/C28x addr mode

				setc	sxm

				MOVL XAR2, #fft_input ;位反序寻址
				MOVL XAR3, #fft_temp
				MOV @AR0, #N/2 ; Load AR0 with size of array, N must be a multiple of 2
				MOV @AR1, #N-1 ; Load AR1 with loop count N
Loop:
				NOP 	*,ARP2 ; Set ARP pointer to point to XAR2				
				MOV 	AL,*XAR2++
				NOP 	*,ARP3
				MOV 	*BR0++, AL; post.increment with reverse carry add
				BANZ 	Loop,AR1-- ;
				;When doing FFT , AR0 is initialized with the (FFT size) /2.

				MOVL XAR2, #fft_temp ;位反序寻址
				MOVL XAR3, #fft_real
				
				MOV @AR1, #N-1 ; Load AR1 with loop count N 
				
				;MOV		AH,#32768
Loop_br:
				
				MOV 	AL,*XAR2
				AND		AL,#32768
				B		K1,NEQ
				MOV		AH,#0
				LB		K2
K1				MOV		AH,#-1
K2				MOV		AL,*XAR2++
				MOVL 	*XAR3++, ACC ; post.increment with reverse carry add
				BANZ 	Loop_br,AR1-- ;

								
;butterfly		
				
				movw dp,#butterfly_pointer;
				;movw dp,#w_times
				mov @group_pointer,#0
				mov @gate1, #L ;
				mov @gate2, #N-1
				mov @gate3, #0
				mov al,@gate3
				mov @m1,al
				inc @m1
				mov acc,@m1

				lsl acc,#1
				mov @m2,acc
				mov acc,#N
				rpt #15
				||subcu acc,@m2
				mov @times,al
				spm 0
loop1: 
				mov acc,@gate2
				sfr acc,#1
				mov @gate2,acc
				;mov butterfly_counter,#-1
				mov @butterfly_pointer,#-1
				;****************************************************
loop2:
				inc @butterfly_pointer
				mov t,@m2
				mpy p,t,@butterfly_pointer
				mov @m4,p
				mov @pointer3,#-1
				;-----------------------------
loop3:          clrc  c
				movl wr,#costable
				movl wi,#sintable
				movl px,#fft_real
				movl qx,#fft_real
				movl px_i,#fft_imag
				movl qx_i,#fft_imag
				inc @pointer3
			    clrc  c	
				mov al,@pointer3
				add al,@m4
				mov @p_offset,al
				add al,@m1
				mov @q_offset,al
				mov al,@p_offset
				add ar0,al
				add ar2,al
				add ar0,al
				add ar2,al				

				mov al,@q_offset
				add ar1,al
				add ar3,al
				add ar1,al
				add ar3,al				
				
				mov t,@times
				mpy p,t,@pointer3
				mov @w_offset,p
				mov al,@w_offset
				add ar4,al
				add ar5,al
				add ar4,al
				add ar5,al

				zapa
				;mov	ah,#0
				;mov  al,*wr
				movl xt,*wr
				impyl acc,xt,*qx
				;movl acc,p
				movl @u,acc
				
				;mov ah,#0
				;mov al,*wi
				movl xt,*wi
				impyl acc,xt,*qx_i
				;movl acc,p
				addl @u,acc
				movl acc,@u
				sfr acc,#7
				movl @u,acc
				
				;movl acc,@u
				;rpt #15
				;||subcu acc,@w_times
				;mov @u,acc

				;mov ah,#0
				;mov al,*wr
				movl xt,*wr
				impyl acc,xt,*qx_i
				movl @v,acc
				;mov ah,#0
				;mov al,*wi
				movl xt,*wi
				impyl acc,xt,*qx
				;movl acc,p				
				subl @v,acc
				movl acc,@v
				sfr acc,#7
				movl @v,acc

				;movl acc,@v
				;rpt #15
				;||subcu acc,@w_times
				;mov @v,acc


				movl acc,*px
				;mpy	p,t,@w_times
				;mov  al,p
				subl  acc,@u
				movl  *qx,acc

				movl acc,*px_i
				;mpy	p,t,@w_times
				;mov  al,p
				subl  acc,@v
				movl  *qx_i,acc

				movl acc,*px
				;mpy	p,t,@w_times
				;mov  al,p
				addl  acc,@u
				movl  *px,acc

				movl acc,*px_i
				;mpy	p,t,@w_times
				;mov  al,p
				addl  acc,@v
				movl  *px_i,acc

				mov al,@gate3
				cmp al,@pointer3
				b loop3,neq
;-----------------------------
				;inc butterfly_counter
				mov temp1,@butterfly_pointer
				mov temp,@gate2
				bar loop2,temp1,temp,neq

				mov acc,@gate3
				lsl acc,#1
				add acc,#1
				mov @gate3,acc

				mov al,@gate3
				mov @m1,al
				inc @m1
				mov acc,@m1
				lsl acc,#1
				mov @m2,acc
				mov acc,#N
				rpt #15
				||subcu acc,@m2
				mov @times,al
				;********************************************************
				inc @group_pointer
				mov temp1,@group_pointer
			    mov temp,@gate1
				bar loop1,temp1,temp,neq														
L1				LB			L1
				.end

⌨️ 快捷键说明

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