📄 fft.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 + -