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

📄 c2cx0032.asm

📁 TI DSP常用例程
💻 ASM
字号:
         .file      "c2cx0032.asm"
         .title     "0032 point DIT Radix-2, Complex FFT"
         .width     120
N        .set       32   ; NUMBER OF POINTS FOR FFT
******************************************************************************
*                                                                            *
*     32 - 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^5=1/32          *
*                                                                            *
*                      c25/e25/e26   320c25-50 only                          *
*                     ------------- ----------------  program twiddle        *
* dsp   divid cycles   t-cyc=100ns    t_cyc=80ns      words    words         *
* ----- ----- ------- ------------- ----------------  -------  -----         *
* all     2     1,193      119.3 us      95.44 us      282       34          *
* all     4     1,160      116.0 us      92.80 us      524       34          *
*                                                                            *
* all: 320c25/e25/c26 up,uc                                                  *
*                                                                            *
*    PROGRAMSEQUENCE: 0. INITIALISATION FOR FFT/COEFF     ADD:  300H -  3..H *
*                     1. INPUT NEW DATA INTO 'INPUT'      ADD: 2000H - 203FH *
*                     2. CALL SUBROUTINE FFT              ADD:  800H -  9..H *
*                     2.1. BITREVERSAL FROM INPUT TO DATA ADD:  200H -  23FH *
*                     2.2. FFT WITH WORK SPACE DATA       ADD:  200H -  23FH *
*                     3. OUTPUT THE RESULTS FROM DATA     ADD:  200H -  23FH *
*                                                                            *
*    INPUT DATA AT ADDRESS 2000h-203Fh:                                      *
*    ----------------------------------                                      *
*    THE DATA ARE STORED IN 'INPUT' IN THE SEQUENCE: X(0),X(1),...,X(31)     *
*                                                    Y(0),Y(1),...,Y(31)     *
*                                                                            *
*    OUTPUT DATA AT ADDRESS 0200h-023fh:                                     *
*    -----------------------------------                                     *
*    THE DATA ARE STORED IN 'DATA' IN THE SEQUENCE:                          *
*    X(0),Y(0),X(1),Y(1),... ... ,X(31),Y(31)                                *
******************************************************************************
*                                                                            *
*    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 C2CXRAD2.MAC
         .include DIVID.ASM
;
         .def    TWIDLEN,FFTLEN,TWIDSTRT,INPUT,INIT,FFT
         .def    STAGE1,STAGE3,STAGE4,SINES4,STAGE5,SINES5
;
         .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 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 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
FFTLEN   .set    $-FFT
         .end

⌨️ 快捷键说明

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