📄 cfft128c.asm
字号:
;============================================================================
;
; File Name : cfft128c.asm
;
; Originator : Digital Control Systems Group
; Texas Instruments
;
; Description : This file contain source code for 128-point complex FFT
;
; Date : 26/4/2001 (dd/mm/yyyy)
;===========================================================================
; Routine Type : C Callable
; Description :
; void FFT128C_calc(FFTxxxx_handle)
; This function implements 128-point complex FFT using radix-2 DIT algo
;
; void FFT128C_init(void)
; This function copies the Twiddle factors from load time address to
; its run time address
;======================================================================
; COMPLEX FFT MODULES | REAL FFT MODULES
;---------------------------------------|-------------------------------
; typedef struct { | typedef struct {
; int *ipcbptr; | int *ipcbptr;
; int *magptr; | int *magptr;
; int peakmag; | int peakmag;
; int peakfrq; | int peakfrq;
; int normflag; | int normflag;
; int size; | int size;
; int *winptr; | int *winptr;
; void (*init)(void); | void (*init1)(void);
; void (*izero)(void *); | void (*init2)(void);
; void (*calc)(void *); | void (*calc)(void *);
; void (*mag)(void *); | void (*split)(void *);
; void (*win)(void *); | void (*mag)(void *);
; }FFTxxxC; | void (*win)(void *);
; | }FFTxxxR;
;=====================================================================
; Module definition for external referance
.def _FFT128C_calc ;
.def _FFT128C_init ; Copy Twiddle factor
.global _FFT128C_calc
.global _FFT128C_init
N .set 128 ; FFT Length
NSTG .set 7 ; Number of Stage
COS45K .set 05A82h ; Constant for COS(45)
;===============================================================================
; FFT - Computation Routine (FFT128R_calc)
;===============================================================================
; * This routine takes the 128 point complex data sequence, in bit reversed form
; * It implements Decimation in time FFT algorithm
; * Performs inplace computation
; * Output in-order data "IPCB"----> Xr(0),Xi(0),Xr(1),Xi(1)...Xr(127)&Xi(127)
;===============================================================================
;----------------------------------------------------
; MACRO 'ZEROI'
; Number of WORDS/Number of Cycles 10
; USAGE: Called if the TWIDDLE FACTOR: 1
;
; P=PR+jPI, Q=QR+jQI, W=WR-jWI
; P'=P+W*Q and Q'=P-W*Q
;
; POINTERS AT ENTRY
; ARP=2
; AR6->(PR,PI,PR+1,PI+1,PR+2,PI+2,....)
; AR2->(QR,QI,QR+1,QI+1,QR+2,QR+2,....)
; COMPUTATION PERFORMED: INPLACE COMPUTATION
; AR6 -> PR'=(PR+QR)/2
; AR2 -> QR'=(PR-QR)/2
; AR6+1 -> PI'=(PI+QI)/2
; AR2+1 -> QI'=(PI-QI)/2
; PR and PR', PI and PI', QR and QR', QI and QI' are
; stored in the same locations
; POINTERS AT EXIT
; ARP=2
; AR6->(PR+1,PI+1,....)
; AR2->(QR+1,QI+1,....)
;------------------------------------------------------
; (Content of REG after exec.)
ZEROI .macro ; AR6 AR2 ARP
LACC *,15,AR6 ;ACC:=QR/2 PR QR 6
ADD *,15 ;ACC:=(PR+QR)/2 PR QR 6
SACH *+,0,AR2 ;PR':=(PR+QR)/2 PI QR 2
SUB *,16 ;ACC:=(PR-QR)/2 PI QR 2
SACH *+ ;QR':=(PR-QR)/2 PI QI 2
LACC *,15,AR6 ;ACC:=QI/2 PI QI 6
ADD *,15 ;ACC:=(PI+QI)/2 PI QI 6
SACH *+,0,AR2 ;PI':=(PI+QI)/2 PR+1 QI 2
SUB *,16 ;ACC:=(PI-QI)/2 PR+1 QI 2
SACH *+ ;QI':=(PI-QI)/2 PR+1 QR+1 2
.endm
;----------------------------------------------------
; MACRO 'PBY2I'
; Number of WORDS/Number of Cycles 12
; USAGE: Called if the TWIDDLE FACTOR: -j
;
; P=PR+jPI, Q=QR+jQI, W=WR-jWI
; P'=P+W*Q and Q'=P-W*Q
;
; POINTERS AT ENTRY
; ARP=2
; AR6->(PR,PI,PR+1,PI+1,PR+2,PI+2,....)
; AR2->(QR,QI,QR+1,QI+1,QR+2,QR+2,....)
; COMPUTATION PERFORMED: INPLACE COMPUTATION
; AR6 -> PR'=(PR+QI)/2
; AR2 -> QR'=(PR-QI)/2
; AR6+1 -> PI'=(PI-QR)/2
; AR2+1 -> QI'=(PI+QR)/2
; PR and PR', PI and PI', QR and QR', QI and QI' are
; stored in the same locations
; POINTERS AT EXIT
; ARP=2
; AR6->(PR+1,PI+1,....)
; AR2->(QR+1,QI+1,....)
;------------------------------------------------------
; (Content of REG after exec.)
PBY2I .macro ; AR6 AR2 ARP
LACC *+,15,AR5 ; PR QI 5
SACH *,1,AR2 ;TMP:=QR PR QI 2
LACC *,15,AR6 ;ACC:=QI/2 PR QI 6
ADD *,15 ;ACC:=(PR+QI)/2 PR QI 6
SACH *+,0,AR2 ;PR':=(PR+QI)/2 PI QI 2
SUB *-,16 ;ACC:=(PR-QI)/2 PI QR 2
SACH *+,0,AR6 ;QR':=(PR-QI)/2 PI QI 2
LACC *,15,AR5 ;ACC:=PI/2 PI QI 5
SUB *,15,AR6 ;ACC:=(PI-QR)/2 PI QI 6
SACH *+,0,AR5 ;PI':=(PI-QR)/2 PR+1 QI 2
ADD *,16,AR2 ;ACC:=(PI+QR)/2 PR+1 QI 2
SACH *+ ;QI':=(PI+QR)/2 PR+1 QR+1 2
.endm
;----------------------------------------------------
; MACRO 'PBY4I'
; Number of WORDS/Number of Cycles 16
; USAGE: Called if the TWIDDLE FACTOR: COS(45)-jSIN(45)=0.707-j0.707
;
; P=PR+jPI, Q=QR+jQI, W=WR-jWI
; P'=P+W*Q and Q'=P-W*Q
;
; POINTERS AT ENTRY
; TREG=W=|SIN(45)|=|COS(45)|=05a82h
; ARP=2
; AR6->(PR,PI,PR+1,PI+1,PR+2,PI+2,....)
; AR2->(QR,QI,QR+1,QI+1,QR+2,QR+2,....)
; CALCULATION PERFORMED: INPLACE COMPUTATION
; AR6 -> PR'=(PR+QI*W+QR*W)/2
; AR2 -> QR'=(PR-QI*W-QR*W)/2
; AR6+1 -> PI'=(PI+QI*W-QR*W)/2
; AR2+1 -> QI'=(PI-QI*W+QR*W)/2
; PR and PR', PI and PI', QR and QR', QI and QI' are
; stored in the same locations
; POINTERS AT EXIT
; ARP=2
; AR6->(PR+1,PI+1,....)
; AR2->(QR+1,QI+1,....)
;------------------------------------------------------
; (Content of REG after exec.)
PBY4I .macro ; AR5 PREG AR6 AR2 ARP
MPY *+,AR5 ;PREG:=W*QR/2 - W*QR/2 PR QI 5
SPH *,AR6 ;TMP:=W*QR/2 W*QR/2 W*QR/2 PR QI 6
LACC *,15,AR2 ;ACC:=PR/2 W*QR/2 W*QR/2 PR QI 2
MPYS *- ;ACC:=(PR-W*QR)/2 W*QR/2 W*QI/2 PR QR 2
SPAC ;ACC:=(PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QR 2
SACH *+,0,AR6 ;QR':=(PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QI 6
SUB *,16 ;ACC:=(-PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QI 6
NEG ;ACC:=(PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PR QI 6
SACH *+ ;PR'=(PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PI QI 6
LACC *,15,AR5 ;ACC:=PI/2 W*QR/2 W*QI/2 PI QI 5
SPAC ;ACC:=(PI-W*QI)/2 W*QR/2 W*QI/2 PI QI 5
ADD *,16,AR2 ;ACC:=(PI-W*QI+W*QR)/2 W*QR/2 W*QI/2 PI QI 2
SACH *+,0,AR6 ;QI':=(PI-W*QI+W*QR)/2 W*QR/2 W*QI/2 PI QR+1 2
SUB *,16 ;ACC:=(-PI-W*QI+W*QR)/2 W*QR/2 W*QI/2 PI QR+1 2
NEG ;ACC:=(PI+W*QI-W*QR)/2 W*QR/2 W*QI/2 PI QR+1 2
SACH *+,0,AR2 ;PI':=(PI+W*QI-W*QR)/2 W*QR/2 W*QI/2 PR+1 QR+1 2
.endm
;----------------------------------------------------
; MACRO 'P3BY4I'
; Number of WORDS/Number of Cycles 16
; USAGE: Called if the TWIDDLE FACTOR: COS(90+45)-jSIN(90+45)=-0.707-j0.707
;
; P=PR+jPI, Q=QR+jQI, W=WR-jWI
; P'=P+W*Q and Q'=P-W*Q
;
; POINTERS AT ENTRY
; TREG=W=|SIN(135)|=|COS(135)|=05a82h
; ARP=2
; AR6->(PR,PI,PR+1,PI+1,PR+2,PI+2,....)
; AR2->(QR,QI,QR+1,QI+1,QR+2,QR+2,....)
; CALCULATION PERFORMED: INPLACE COMPUTATION
; AR6 -> PR'=(PR+QI*W-QR*W)/2
; AR2 -> QR'=(PR-QI*W+QR*W)/2
; AR6+1 -> PI'=(PI-QI*W-QR*W)/2
; AR2+1 -> QI'=(PI+QI*W+QR*W)/2
; PR and PR', PI and PI', QR and QR', QI and QI' are
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -