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

📄 c2cx0256.asm

📁 TI DSP常用例程
💻 ASM
字号:
         .file      "c2cx0256.asm"
         .title     "0256 point DIT Radix-2, Complex FFT"
         .width     120
N        .set       256  ; NUMBER OF POINTS FOR FFT
******************************************************************************
*                                                                            *
*    256 - POINT COMPLEX, RADIX-2 DIT 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^8=1/256         *
*                                                                            *
*                      c25/e25/e26   320c25-50 only                          *
*                     ------------- ----------------  program twiddle        *
* dsp   divid cycles   t-cyc=100ns    t_cyc=80ns      words    words  type   *
* ----- ----- ------- ------------- ----------------  -------  -----  ----   *
* e/c25   2    19,028    1,902.7 us   1,522.76 us      321       366   mp/mc *
*   c26   2    16,587    1,658.7 us     -------        321       366   mp    *
* e/c25   4    18,476    1,847.6 us   1,478.08 us      564       366   mp/mc *
*   c26   4    16,035    1,603.5 us     -------        564       366   mp    *
*                                                                            *
*    PROGRAMSEQUENCE: 0. INITIALISATION FOR FFT/COEFF     ADD:  400H -  5..H *
*                     1. INPUT NEW DATA INTO 'INPUT'      ADD: 2000H - 21FFH *
*                     2. CALL SUBROUTINE FFT              ADD:  800H -  9..H *
*                     2.1. BITREVERSAL FROM INPUT TO DATA ADD:  200H -  3FFH *
*                     2.2. FFT WITH WORK SPACE DATA       ADD:  200H -  3FFH *
*                     3. OUTPUT THE RESULTS FROM DATA     ADD:  200H -  3FFH *
*                                                                            *
*    INPUT DATA AT ADDRESS 2000h-21FFh:                                      *
*    ----------------------------------                                      *
*    THE DATA ARE STORED IN 'INPUT' IN THE SEQUENCE: X(0),X(1),...,X(255)    *
*                                                    Y(0),Y(1),...,Y(255)    *
*                                                                            *
*    OUTPUT DATA AT ADDRESS 0200h-03FFh:                                     *
*    -----------------------------------                                     *
*    THE DATA ARE STORED IN 'DATA' IN THE SEQUENCE:                          *
*    X(0),Y(0),X(1),Y(1),... ... ,X(255),Y(255)                              *
******************************************************************************
*                                                                            *
*    THIS PROGRAM INCUDES FOLLOWING FILE:                                    *
*    ------------------------------------                                    *
*    THE FILE 'TWIDDLES.Q15' CONSISTS OF TWIDDLE FACTORS IN Q15 FORMAT       *
*    THE FILE 'C2CXRAD2.MAC' macro files                                     *
*    THE FILE 'DIVID.ASM' defines the optimisation (used in $loop repeat)    *
******************************************************************************
         .include divid.asm    ; define optimization: 2 + 4 are tested
         .include c2cxrad2.mac ; macrofile
;
         .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     #255
         bldd    #INPUT,*BR0+
         rpt     #255
         bldd    #INPUT+100h,*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 64            ; repeat 64 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 32            ; repeat 32 times
;
;    FFT CODE FOR STAGE 4  / ARP=AR2
;
STAGE4:  lar     ar0,#16       ; index register = 16
         sar     ar0,TEMP+1    ; save index
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA16    ; ar2 -> DATA+16
         lar     ar6,#15       ; repat loop4 16 times
;
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    ; save index
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA32    ; ar2 -> DATA+32
         lar     ar6,#7        ; repat loop5 8 times
;
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     ar0,#64       ; index register = 64
         sar     ar0,TEMP+1    ; save index
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA64    ; ar2 -> DATA+64
         lar     ar6,#3        ; repat loop6 4 times
;
loop6:   lar     ar3,cos6      ; start of cosine in stage 6
         lar     ar4,sin6      ; start of sine in stage   6
         do_btfly 32           ; setup for 32 butterflies
         banz    loop6,*-,ar2
;
;    FFT CODE FOR STAGE 7  / ARP=AR2
;
STAGE7:  lar     ar0,#128      ; index register = 128
         sar     ar0,TEMP+1    ; save index
         lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA128   ; ar2 -> DATA+128
         lar     ar6,#1        ; repat loop7 2 times
;
loop7:   lar     ar3,cos7      ; start of cosine in stage 7
         lar     ar4,sin7      ; start of sine in stage   7
         do_btfly 64           ; setup for 32 butterflies
         banz    loop7,*-,ar2
;
;    FFT CODE FOR STAGE 8  / ARP=AR2
;
STAGE8:  lar     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA256   ; ar2 -> DATA+256
;
         lar     ar3,cos8      ; start of cosine in stage 8
         lar     ar4,sin8      ; start of sine in stage   8
; the next two macros finish the FFT
         do_loops 128          ; setup for 128 butterflies
         ex_btfly              ; execute the butterflies
FFTLEN   .set    $-FFT
         .end

⌨️ 快捷键说明

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