?? init-fft.asm
字號:
;
; file: D:\FFT2X\INIT-FFT.ASM is the same for all 320C2X RADIX complex FFTs
;
; Update: 10. July 90 / Manfred Christ / Texas Instruments - Freising
;
.def divid,N,FFT32,NN,DATAADD
.sect "init"
;
NN .usect ".fftvar",1 ; number of fft-points
DATAADD .usect ".fftvar",1 ; START ADDRESS OF DATA
DATA2 .usect ".fftvar",1 ; DATA+2
DATA4 .usect ".fftvar",1 ; DATA+4
DATA6 .usect ".fftvar",1 ; DATA+6
DATA8 .usect ".fftvar",1 ; DATA+8
DATA16 .usect ".fftvar",1 ; DATA+16
TABINIT: .word N,DATA,DATA+2,DATA+4,DATA+6,DATA+8,DATA+16
; stage 3 and 4 costants
SINES4 .set TWID ; start of sine in stage 4
.word 5A82h ; cos(45)=sin(45)
.word SINES4,SINES4+4
cos45 .usect ".fftvar",1 ; sine/cosine in stage 3
sin4 .usect ".fftvar",1 ; start of sine in stage 4
cos4 .usect ".fftvar",1 ; start of cosine in stage 4
.if N>16
.def STAGE5,SINES5
SINES5 .set SINES4+11 ; start of sine in stage 5
.word DATA+32,SINES5,SINES5+8
DATA32 .usect ".fftvar",1 ; DATA+32
sin5 .usect ".fftvar",1 ; start of sine in stage 5
cos5 .usect ".fftvar",1 ; start of cosine in stage 5
.endif
TABEND: .set $
;
; Temp variables
;
sine .usect ".fftvar",1 ; sine value
cosine .usect ".fftvar",1 ; cosine value
TEMP .usect ".fftvar",2 ; used for temporary numbers
;
FFT32:
LDP #6 ; use only B2 and mmregs for direct addressing(300H/80H)
SPM 0 ; no shift from PREG to ALU
ROVM ; disable overflowmode
SSXM ; enable sign extension mode
;
; INIT Block B2
;
MAR *,AR0 ;~~~~~~~~~~
LAR AR0,#NN ; arp=ar0
LACC #TABINIT
RPT #TABEND-TABINIT-1
TBLR *+
;
; INIT TWIDDLE FACTORS
;
LAR AR0,#TWID ; arp is already pointing to ar0
LACC #TWIDSTRT
.if N<256
RPT #TWIDLEN-1 ; for N= 16 .. 128
TBLR *+
.else
LAR ar1,#TWIDLEN ; for n = 256 .. 1024 ..
TWIDLOOP tblr *+,ar1 ; transfer a word
addk 1 ; accu =+1
banz TWIDLOOP,*-,ar0
.endif
;
; EXECUTE THE FFT
;
LAR AR5,#TEMP ; pointer to 2 temp register
CALL FFT,*,AR3 ; ARP=AR3 FOR MACRO COMBO
;
RET ; THE SIMULATOR STOPS HERE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -