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

📄 c2cx0064.asm

📁 TI DSP常用例程
💻 ASM
字号:
         .file      "c2cx0064.asm"
         .title     "0064 point DIT Radix-2, Complex FFT"
         .width     120
N        .set       64   ; NUMBER OF POINTS FOR FFT
******************************************************************************
*                                                                            *
*     64 - POINT COMPLEX, RADIX-2 DIF FFT WITH THE TMS320C2x                 *
*    -------------------------------------------------------                 *
*                                                                            *
* THE PROGRAM IS BASED ON THE BOOK 'DIGITAL SIGNAL PROCESSING APPLICATIONS'  *
* FROM TEXAS INSTRUMENTS P. 69. IT IS OPTIMIZED FOR THE TMS320C5x INCLUDING  *
* BIT REVERSAL ADDRESSING MODE.                                              *
*                                                                            *
* THE PROGRAM IS A MIXTURE OF LOOPED AND STRAIGHT FORWARD CODE TO OPTIMIZE   *
* CODESIZE AND EXECUTION TIME. TWO OPTIMIZATION FACTORS FOR CODESIZE AND     *
* EXECUTION TIME EVALUATION ARE POSSIBLE (divid = 2 and 4).                  *
*                                                                            *
*    WRITTEN BY: MANFRED CHRIST  REVISION: 1.00    5. Sept. 90               *
*                                                                            *
*    COPYRIGHT TEXAS INSTRUMENTS INC. 1990                                   *
*                                                                            *
******************************************************************************
*                                                                            *
*    USED  REGISTER: AR0..AR7, ACCU, PREG, TREG, 2 STACKLEVEL, BLOCK B2      *
*                                                                            *
*    COEFFICIENTS  :   16 BITS  (Q15 Format)  SCALING:   1/2^6=1/64          *
*                                                                            *
*                      c25/e25/e26   320c25-50 only                          *
*                     ------------- ----------------  program twiddle        *
* dsp   divid cycles   t-cyc=100ns    t_cyc=80ns      words    words         *
* ----- ----- ------- ------------- ----------------  -------  -----         *
* all     2     2,971      297.1 us     237.68 us      294        81         *
* all     4     2,8821     288.1 us     230.48 us      536        82         *
*                                                                            *
* all: 320c25/e25/c26 up,uc                                                  *
*                                                                            *
*    PROGRAMSEQUENCE: 0. INITIALISATION FOR FFT/COEFF     ADD:  300H -  3..H *
*                     1. INPUT NEW DATA INTO 'INPUT'      ADD: 2000H - 207FH *
*                     2. CALL SUBROUTINE FFT              ADD:  800H -  9..H *
*                     2.1. BITREVERSAL FROM INPUT TO DATA ADD:  200H -  27FH *
*                     2.2. FFT WITH WORK SPACE DATA       ADD:  200H -  27FH *
*                     3. OUTPUT THE RESULTS FROM DATA     ADD:  200H -  27FH *
*                                                                            *
*    INPUT DATA AT ADDRESS 2000h-207fh:                                      *
*    ----------------------------------                                      *
*    THE DATA ARE STORED IN 'INPUT' IN THE SEQUENCE: X(0),X(1),...,X(63)     *
*                                                    Y(0),Y(1),...,Y(63)     *
*                                                                            *
*    OUTPUT DATA AT ADDRESS 0200h-027fh:                                     *
*    -----------------------------------                                     *
*    THE DATA ARE STORED IN 'DATA' IN THE SEQUENCE:                          *
*    X(0),Y(0),X(1),Y(1),... ... ,X(127),Y(127)                              *
******************************************************************************
*                                                                            *
*    THIS PROGRAM INCUDES FOLLOWING FILE:                                    *
*    ------------------------------------                                    *
*    THE FILE 'TWIDDLES.Q15' CONSISTS OF TWIDDLE FACTORS IN Q15 FORMAT       *
*    THE FILE 'C2CXRAD2.MAC' macro files                                     *
*    THE FILE 'INIT_FFT.ASM' initialisation File                             *
*    THE FILE 'DIVID.ASM' defines the optimisation (used in $loop repeat)    *
******************************************************************************
         .include DIVID.ASM
         .include C2CXRAD2.MAC
;
         .def    TWIDLEN,FFTLEN,TWIDSTRT,INPUT,INIT,FFT
         .def    STAGE1,STAGE3,STAGE4,SINES4
;
         .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     .data
         .space  N*2*16         ; working data array
;
         .include init-fft.asm
;
         .sect    "fftprogram"
;
;    FFT CODE WITH BIT-REVERSED INPUT SAMPLES / ARP=AR3 / DP=0
;
FFT:     lar     ar3,DATAADD   ; TRANSFER 2*N WORDS FROM 'input' to 'data'
         lar     ar0,NN        ; indexregister = N
         rpt     #N*2-1        ; 2*N-1 TIMES
         bldd    #INPUT,*BR0+
;
;    FFT CODE for STAGES 1 and 2 / ARP=AR3
;
STAGE1:  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 16            ; repeat 16 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 8             ; repeat 8 times
;
;    FFT CODE FOR STAGE 4  / ARP=AR2
;
STAGE4:  lar     ar0,#16       ; index register = 16
         sar     ar0,TEMP+1
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA16    ; ar2 -> DATA+16
         lar     ar6,#3        ; loopcounter = 3
;
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     ar0,#32       ; index register = 32
         sar     ar0,TEMP+1
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA32    ; ar2 -> DATA+16
         lar     ar6,#1        ; loopcounter = 1
;
loop5:   lar     ar3,cos5      ; start of cosine in stage 5
         lar     ar4,sin5      ; start of sine in stage   5
         do_btfly 16           ; setup for 16 butterflies
         banz    loop5,*-,ar2
;
;
;    FFT CODE FOR STAGE 6  / ARP=AR2
;
STAGE6:  lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA64    ; ar2 -> DATA+64
;
         lar     ar3,cos6      ; start of cosine in stage 6
         lar     ar4,sin6      ; start of sine in stage   6
; the next two macros finish the FFT
         do_loops 32           ; setup for 32 butterflies
         ex_btfly              ; execute the butterflies
FFTLEN   .set    $-FFT
         .end

⌨️ 快捷键说明

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