📄 c16.asm
字号:
;***********************************************************
; Version 2.20.01
;***********************************************************
;============================================================================
; Description: C54x Double Precision 16-Point Complex FFT
;
; Author: Aaron Aboagye, Texas Instruments, Inc., Oct 14, 1998
; from inverse code by Mike Hannah, Texas Instruments, Inc., May 14, 1998
;
; Function: _cfft32_16
;
; Inputs: pInBuff in acc A
;
; Assumptions: Input data is in InBuff and output will be in InBuff.
; SXM=1 and FRCT=1. CPL=1 since called from C.
;
;=============================================================================
N .set 16
.global fftStage1and2
.global fftStage3
.global fftButterfly
.global Tempdw1
.global Tempdw2
.include sintab.q31
.mmregs
.text
.global _cfft32_16
_cfft32_16:
PSHM ST0 ; 1 cycle
PSHM ST1 ; 1 cycle
pshm ar1
pshm ar6
pshm ar7
RSBX OVA ; 1 cycle
RSBX OVB ; 1 cycle
rsbx ovm ;disable overflow mode
ssbx sxm ;sxm enabled
ssbx frct ;<<1 to make Q31 from Q30 product
stm #0, BK ;use circ addressing in butterfly with zero length
stlm A, ar1 ;store pInBuff into ar1
pshm ar1 ;put pInBuff on stack for reuse
ld #-2, ASM ;>>2 on stores to mem
;===== Compute 1st and 2nd stages of FFT =====
ld *SP(0),A ;pointer to DATA -> A
stlm A,ar2 ;pointer to DATA r1,i1
add #(2*2),A
stlm A,ar3 ;pointer to DATA + 2 r2,i2
ld *SP(0),A ;pointer to DATA -> A
add #(4*2),A
stlm A,ar4 ;pointer to DATA + 4 r3,i3
stm #7*2-1,ar0 ;index
stm #16/4-1,BRC ;execute N/4-1 times
ld *SP(0),A ;pointer to DATA -> A
add #(6*2),A
stlm A,ar5 ;pointer to DATA + 6 r4,i4
.if __far_mode
fcall fftStage1and2 ;in-place
.else
call fftStage1and2
.endif
;===== Compute 3rd stage of FFT =====
ld *SP(0),A ;pointer to DATA -> A
stlm A,ar2 ;pointer to DATA pr,pi
add #(8*2),A
stlm A,ar3 ;pointer to DATA + 8 qr,qi
stm #9*2-1,ar0 ;index
stm #16/8-1,BRC ;execute N/8-1 times '4 macros'
stm #Tempdw1,ar5 ;temp dword
stm #Tempdw2,ar6 ;temp dword
stm #SIN45+1,ar4 ;32-bit sin45 twiddle LSW
.if __far_mode
fcall fftStage3 ;in-place
.else
call fftStage3
.endif
;===== Compute 4th (last) stage of FFT =====
;laststag .macro DATA,stage,sin,cos
; laststag dstn,4,isin4,cos4
ld *SP(0),A ;pointer to DATA -> A
stlm A,ar2 ;ar2 -> DATA
add #(16*2),A
stlm A,ar3 ;ar3 -> DATA+(offset=N)
stm #16/2-2,BRC ;execute startup + num-2 times general butterfly
stm #cos4+1,ar4 ;start on LSW of cosine in stage
stm #isin4+1,ar5 ;start on LSW of sine in stage
.if __far_mode
fcalld fftButterfly ;in-place
.else
calld fftButterfly
.endif
stm #3,AR0 ;index offset for butterfly optimization
;!!!!! Call occurs here !!!!!
popm ar1 ;remove pInBuff from stack
popm ar7
popm ar6
popm ar1
POPM ST1 ; 1 cycle
POPM ST0 ; 1 cycle
.if __far_mode
fret
.else
ret
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -