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

📄 c2cx0128.asm

📁 TI DSP常用例程
💻 ASM
字号:
         .file      "c2cx0128.asm"
         .title     "0128 point DIT Radix-2, Complex FFT"
         .width     120
N        .set       128  ; NUMBER OF POINTS FOR FFT
******************************************************************************
*                                                                            *
*    128 - 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^7=1/128         *
*                                                                            *
*                      c25/e25/e26   320c25-50 only                          *
*                     ------------- ----------------  program twiddle        *
* dsp   divid cycles   t-cyc=100ns    t_cyc=80ns      words    words         *
* ----- ----- ------- ------------- ----------------  -------  -----         *
* all     2     7,117      711.7 us     569.20 us      306       176         *
* all     4     6,887      688.7 us     550.96 us      548       176         *
*                                                                            *
* all: 320c25/e25/c26 up,uc                                                  *
*                                                                            *
*    PROGRAMSEQUENCE: 0. INITIALISATION FOR FFT/COEFF     ADD:  300H -  3..H *
*                     1. INPUT NEW DATA INTO 'INPUT'      ADD: 2000H - 20FFH *
*                     2. CALL SUBROUTINE FFT              ADD:  800H -  9..H *
*                     2.1. BITREVERSAL FROM INPUT TO DATA ADD:  200H -  2FFH *
*                     2.2. FFT WITH WORK SPACE DATA       ADD:  200H -  2FFH *
*                     3. OUTPUT THE RESULTS FROM DATA     ADD:  200H -  2FFH *
*                                                                            *
*    INPUT DATA AT ADDRESS 2000h-21FFh:                                      *
*    ----------------------------------                                      *
*    THE DATA ARE STORED IN 'INPUT' IN THE SEQUENCE: X(0),X(1),...,X(127)    *
*                                                    Y(0),Y(1),...,Y(127)    *
*                                                                            *
*    OUTPUT DATA AT ADDRESS 0200h-02ffh:                                     *
*    -----------------------------------                                     *
*    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    ; define optimization: 2 + 4 are tested
         .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 32            ; repeat 32 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 16            ; repeat 16 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,#7        ; repat loop4 8 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,#3        ; repat loop5 4 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,#1        ; repat loop6 2 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     ar1,DATAADD   ; ar1 -> DATA
         lar     ar2,DATA128   ; ar2 -> DATA+128
;
         lar     ar3,cos7      ; start of cosine in stage 7
         lar     ar4,sin7      ; start of sine in stage   7
; the next two macros finish the FFT
         do_loops 64           ; setup for 64 butterflies
         ex_btfly              ; execute the butterflies
FFTLEN   .set    $-FFT
         .end

⌨️ 快捷键说明

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