?? c2cx0032.asm
字號:
;*************************************************************
; File Name : C2cx0032.asm
; Originator : Texas Instrument-Chongqing University DSPs Lab.
; Description: LF2407 DSK 32 Points FFT Algorithms Test Program
; Author : Zhuo Qingfeng
; Last Update: 7-14-2001
;**************************************************************
; INPUT : ADCHANN(0x0a01): One of the 0--15 AD channels
; OUTPUT : FFT result in 0x300-0x33f
; USED REGS.: ACC,DP,AR0,AR1,AR3,ST0,ST1
;**************************************************************
.file "c2cx0032.asm"
.title "0032 point DIT Radix-2, Complex FFT"
.width 120
N .set 32 ; NUMBER OF POINTS FOR FFT
.include C2CXRAD2.MAC
.include DIVID.ASM
;
.def TWIDLEN,FFTLEN,TWIDSTRT,FFT,DATA
.def STAGE1,STAGE3,STAGE4,SINES4,STAGE5,SINES5
.ref ADRESULT,ADCHANN
;
.sect "twiddles"
; table of twiddle factors for the FFT
TWIDSTRT .set $
.include twiddles.q15
TWIDLEN .set $-TWIDSTRT
;
;INPUT .usect "input",N*2 ; input data array
TWID .usect "twid",TWIDLEN ; reserve space for twiddles
DATA .usect ".data1",N*2
;DATA .set $
; .space N*2*16 ; working data array
;
.include init-fft.asm
;
.sect "fftprog"
;
; FFT CODE WITH BIT-REVERSED INPUT SAMPLES / ARP=AR3 / DP=6
;
FFT:
LAR AR3,DATAADD ; AR3 <= DATAADD start address
ZAC ; ACC <= 0
RPT #03Fh ; set repeat counter for 1fh+1=20h or 32 loops
SACL *+ ; write zeros to DATA
LAR ar3,DATAADD ; TRANSFER 2*N WORDS FROM 'input' to 'data'
LAR ar0,NN ; indexregister = N
LAR AR1,#ADCHANN
MAR *,AR1
LACL *,AR3
BCND FFTA,NEQ
RPT #N-1
BLDD #ADRESULT,*BR0+
B STAGE1
FFTA: SUB #1
BCND FFTB,NEQ
RPT #N-1
BLDD #ADRESULT+32,*BR0+
B STAGE1
FFTB: SUB #1
BCND FFTC,NEQ
RPT #N-1
BLDD #ADRESULT+64,*BR0+
B STAGE1
FFTC: SUB #1
BCND FFTD,NEQ
RPT #N-1
BLDD #ADRESULT+96,*BR0+
B STAGE1
FFTD: SUB #1
BCND FFTE,NEQ
RPT #N-1
BLDD #ADRESULT+128,*BR0+
B STAGE1
FFTE: SUB #1
BCND FFTF,NEQ
RPT #N-1
BLDD #ADRESULT+160,*BR0+
B STAGE1
FFTF: SUB #1
BCND FFTG,NEQ
RPT #N-1
BLDD #ADRESULT+192,*BR0+
B STAGE1
FFTG: SUB #1
BCND FFTH,NEQ
RPT #N-1
BLDD #ADRESULT+224,*BR0+
B STAGE1
FFTH: SUB #1
BCND FFTI,NEQ
RPT #N-1
BLDD #ADRESULT+256,*BR0+
B STAGE1
FFTI: SUB #1
BCND FFTJ,NEQ
RPT #N-1
BLDD #ADRESULT+288,*BR0+
B STAGE1
FFTJ: SUB #1
BCND FFTK,NEQ
RPT #N-1
BLDD #ADRESULT+320,*BR0+
B STAGE1
FFTK: SUB #1
BCND FFTL,NEQ
RPT #N-1
BLDD #ADRESULT+352,*BR0+
B STAGE1
FFTL: SUB #1
BCND FFTM,NEQ
RPT #N-1
BLDD #ADRESULT+384,*BR0+
B STAGE1
FFTM: SUB #1
BCND FFTN,NEQ
RPT #N-1
BLDD #ADRESULT+416,*BR0+
B STAGE1
FFTN: SUB #1
BCND FFTO,NEQ
RPT #N-1
BLDD #ADRESULT+448,*BR0+
B STAGE1
FFTO: SUB #1
BCND FFTB,NEQ
RPT #N-1
BLDD #ADRESULT+480,*BR0+
; FFT CODE for STAGES 1 and 2 / ARP=AR3
;
STAGE1:
LDP #6
lar ar0,#7 ; indexregister = 7
lar ar1,DATAADD ; pointer to DATA r1,i1
lar ar2,DATA2 ; pointer to DATA + 2 r2,i2
lar ar3,DATA4 ; pointer to DATA + 4 r3,i3
lar ar4,DATA6 ; pointer to DATA + 6 r4,i4
COMBO2X 8 ; repeat 8 times
;
; FFT CODE FOR STAGE 3 / ARP=AR2
;
STAGE3: lar ar0,#9 ; index register = 9
lar ar1,DATAADD ; ar1 -> DATA
lar ar2,DATA8 ; ar2 -> DATA+8
stage3l 4 ; repeat 4 times
;
; FFT CODE FOR STAGE 4 / ARP=AR2
;
STAGE4: lar ar0,#16 ; index register = 16
sar ar0,TEMP+1 ; save index register
lar ar1,DATAADD ; ar1 -> DATA
lar ar2,DATA16 ; ar2 -> DATA+16
lar ar6,#1 ; loopcounter = 1
;
loop4: lar ar3,cos4 ; start of cosine in stage 4
lar ar4,sin4 ; start of sine in stage 4
do_btfly 8 ; setup for 8 butterflies
banz loop4,*-,ar2
;
; FFT CODE FOR STAGE 5 / ARP=AR2
;
STAGE5: lar ar1,DATAADD ; ar1 -> DATA
lar ar2,DATA32 ; ar2 -> DATA+32
;
lar ar3,cos5 ; start of cosine in stage 5
lar ar4,sin5 ; start of sine in stage 5
do_loops 16 ; setup for 16 butterflies
ex_btfly ; execute the butterflies
RET
FFTLEN .set $-FFT
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -