📄 c2cxrad2.mac
字号:
******************************************************************************
* FILE: c25cxrad2.mac --> macro file for radix 2 fft's based on 320c5x *
* *
* COPYRIGHT TEXAS INSTRUMENTS INC. 1990 *
* *
* WRITTEN BY: MANFRED CHRIST LAST UPDATE: 10. July 90 *
******************************************************************************
;
; OPEN: DIVID=8 10.7.90
; BUTTERFLY OPTIMISATION 10.7.90
;
* *
* MACRO 'COMBO2X' FOR THE COMPLEX, RADIX-2 DIT FFT *
* *
* WRITTEN BY: MANFRED CHRIST LAST UPDATE: 02. July 90 *
* REVISION : 1.00 *
* CYCLES : 33 WORDS: 33 *
* ORGANIATION OF THE INPUT DATA MEMORY: R1,I1,R2,I2,R3,I3,R4,I4 *
* *
******************************************************************************
* *
* THE MACRO 'COMBO2x' PERFORMS FOLLOWING CALCULATIONS: *
* *
* R1 := [(R1+R2)+(R3+R4)]/4 INPUT OUTPUT *
* R2 := [(R1-R2)+(I3-I4)]/4 ------------------ ------------------ *
* R3 := [(R1+R2)-(R3+R4)]/4 AR0 = 7 *
* R4 := [(R1-R2)-(I3-I4)]/4 AR1 -> R1,I1 AR1 - > R5,I5 *
* I1 := [(I1+I2)+(I3+I4)]/4 AR2 -> R2,I2 AR2 - > R6,I6 *
* I2 := [(I1-I2)-(R3-R4)]/4 ARP-> AR3 -> R3,I3 ARP - > AR3 - > R7,I7 *
* I3 := [(I1+I2)-(I3+I4)]/4 AR4 -> R4,I4 AR4 - > R8,I8 *
* I4 := [(I1-I2)+(R3-R4)]/4 *
* *
* For a 16-point Radix 2 complex FFT the Macro 'COMBO2x' has to be *
* repeated N/4 times (e.g. 4 times for a 16 point FFT). *
* *
******************************************************************************
;
COMBO2y $MACRO p
; ARP AR1 AR2 AR3 AR4 AR5
; --- --- --- --- --- ---
LACC *,14,AR4 ; ACC := (R3)/4 4 R1 R2 R3 R4 T1
SUB *,14,AR5 ; ACC := (R3+R4)/4 5 R1 R2 R3 R4 T1
SACH *+,1,AR4 ; T1 = (R3-R4)/2 4 R1 R2 I3 R4 T2
;
ADD *+,15,AR5 ; ACC := (R3+R4)/4 5 R1 R2 R3 I4 T2
SACH *,1,AR2 ; T2 = (R3+R4)/2 2 R1 R2 R3 I4 T2
;
ADD *,14,AR1 ; ACC := (R2+R3+R4)/4 1 R1 R2 R3 I4 T2
ADD *,14 ; ACC := (R1+R2+R3+R4)/4 1 R1 R2 R3 I4 T2
SACH *+,0,AR5 ; R1 := (R1+R2+R3+R4)/4 5 I1 R2 R3 I4 T2
SUB *,16,AR3 ; ACC := (R1+R2-(R3+R4))/4 3 I1 R2 R3 I4 T2
SACH *+,0,AR5 ; R3 := (R1+R2-(R3+R4))/4 5 I1 R2 I3 I4 T2
;
ADD *,15,AR2 ; ACC := (R1+R2)/4 2 I1 R2 I3 I4 T2
SUB *,15,AR3 ; ACC := (R1-R2)/4 3 I1 R2 I3 I4 T2
ADD *,14,AR4 ; ACC := ((R1-R2)+(I3))/4 4 I1 R2 I3 I4 T2
SUB *,14,AR2 ; ACC := ((R1-R2)+(I3-I4))/4 2 I1 R2 I3 I4 T2
SACH *+,0,AR4 ; R2 := ((R1-R2)+(I3-I4))/4 4 I1 I2 I3 I4 T2
ADD *-,15,AR3 ; ACC := ((R1-R2)+ I3+I4 )/4 3 I1 I2 I3 R4 T2
SUB *,15,AR4 ; ACC := ((R1-R2)-(I3-I4))/4 4 I1 I2 I3 R4 T2
SACH *+,0,AR1 ; R4 := ((R1-R2)-(I3-I4))/4 1 I1 I2 I3 I4 T2
;
LACC *,14,AR2 ; ACC := (I1)/4 2 I1 I2 I3 I4 T2
SUB *,14,AR5 ; ACC := (I1-I2)/4 5 I1 I2 I3 I4 T2
SACH *,1,AR2 ; T2 := (I1-I2)/2 2 I1 I2 I3 I4 T2
ADD *,15,AR3 ; ACC := ((I1+I2))/4 4 I1 I2 I3 I4 T2
ADD *,14,AR4 ; ACC := ((I1+I2)+(I3))/4 4 I1 I2 I3 I4 T2
ADD *,14,AR1 ; ACC := ((I1+I2)+(I3+I4))/4 1 I1 I2 I3 I4 T2
SACH *0+,0,AR3 ; I1 := ((I1+I2)+(I3+I4))/4 3 R5 I2 I3 I4 T2
SUB *,15,AR4 ; ACC := ((I1+I2)-(I3+I4))/4 4 R5 I2 I3 I4 T2
SUB *,15,AR3 ; ACC := ((I1+I2)-(I3+I4))/4 3 R5 I2 I3 I4 T2
SACH *0+,0,AR5 ; I3 := ((I1+I2)-(I3+I4))/4 5 R5 I2 R7 I4 T2
;
LACC *-,15 ; ACC := (I1-I2)/4 5 R5 I2 R7 I4 T1
SUB *,15,AR2 ; ACC := ((I1-I2)-(R3-R4))/4 2 R5 I2 R7 I4 T1
SACH *0+,0,AR5 ; I2 := ((I1-I2)-(R3-R4))/4 5 R5 R6 R7 I4 T1
ADD *,16,AR4 ; ACC := ((I1-I2)+(R3-R4))/4 4 R5 R6 R7 I4 T1
SACH *0+,0,AR:p: ; I4 := ((I1-I2)+(R3-R4))/4 3 R5 R6 R7 R8 T1
;
$ENDM
COMBO2x $MACRO num ; REPEAT MACRO 'COMBO2y': N/4 times
LAR AR7,#:num:/divid-1
loopc: .set $
$if divid=4
combo2y 3
combo2y 3
$endif
$if divid=8
combo2y 3
combo2y 3
combo2y 3
combo2y 3
combo2y 3
combo2y 3
$endif
combo2y 3
combo2y 7
banz loopc,*-,ar3
MAR *,AR2 ; ARP=AR2
$ENDM
;
******************************************************************************
* *
* MACRO 'ZEROI' number of words/number of cycles: 10 *
* *
* ARP=2 FOR INPUT AND OUTPUT *
* AR2 -> QR,QI,QR+1,... *
* AR3 -> PR,PI,PR+1,... *
* *
* CALCULATE Re[P+Q] AND Re[P-Q] *
* QR'=(PR-QR)/2 *
* PR'=(PR+QR)/2 *
* PI'=(PI+QI)/2 *
* PI'=(PI-QI)/2 *
* *
* version 1.00 from Manfred Christ update: 2. July 90 *
* *
******************************************************************************
ZEROI $MACRO ; AR1 AR2 ARP
LACC *,15,AR1 ; ACC := (1/2)(QR) PR QR 1
ADD *,15 ; ACC := (1/2)(PR+QR) PR QR 1
SACH *+,0,AR2 ; PR := (1/2)(PR+QR) PI QR 2
SUB *,16 ; ACC := (1/2)(PR+QR)-(QR) PI QR 2
SACH *+ ; QR := (1/2)(PR-QR) PI QI 2
;
LACC *,15,AR1 ; ACC := (1/2)(QI) PI QI 1
ADD *,15 ; ACC := (1/2)(PI+QI) PI QI 1
SACH *+,0,AR2 ; PI := (1/2)(PI+QI) PR+1 QI 2
SUB *,16 ; ACC := (1/2)(PI+QI)-(QI) PR+1 QI 2
SACH *+ ; QI := (1/2)(PI-QI) PR+1 QR+1 2
$ENDM
******************************************************************************
* *
* MACRO 'PBY2I' number of words/number of cycles: 12 *
* *
* PR'=(PR+QI)/2 PI'=(PI-QR)/2 *
* QR'=(PR-QI)/2 QI'=(PI+QR)/2 *
* *
* version 1.00 from Manfred Christ update: 02. July 90 *
* *
******************************************************************************
PBY2I $MACRO ; AR1 AR2 ARP
LACC *+,15,AR5 ; PR QI 5
SACH *,1,AR2 ; TMP=QR PR QI 2
;
LACC *,15,AR1 ; ACC := QI/2 PR QI 1
ADD *,15 ; ACC := (PR+QI)/2 PR QI 1
SACH *+,0,AR2 ; PR := (PR+QI)/2 PI QI 2
SUB *-,16 ; ACC := (PR-QI)/2 PI QR 2
SACH *+,0,AR1 ; QR := (PR-QI)/2 PI QI 1
;
LACC *,15,AR5 ; ACC := (PI)/2 PI QI 5
SUB *,15,AR1 ; ACC := (PI-QR)/2 PI QI 1
SACH *+,0,AR5 ; PI := (PI-QR)/2 PR+1 QI 5
ADD *,16,AR2 ; ACC := (PI+QR)/2 PR+1 QI 2
SACH *+ ; QI := (PI+QR)/2 PR+1 QI+1 2
$ENDM
;
******************************************************************************
* *
* MACRO 'PBY4J' number of words/number of cycles: 16 *
* *
* T=SIN(45)=COS(45)=W45 *
* *
* *
* PR'= PR + (W*QI + W*QR) = PR + W * QI + W * QR (<- AR1) *
* QR'= PR - (W*QI + W*QR) = PR - W * QI - W * QR (<- AR2) *
* PI'= PI + (W*QI - W*QR) = PI + W * QI - W * QR (<- AR1+1) *
* QI'= PI - (W*QI - W*QR) = PI - W * QI + W * QR (<- AR1+2) *
* *
* *
* version 1.00 from Manfred Christ update: 02. July 90 *
* *
******************************************************************************
;
PBY4J $MACRO ; TREG= W AR5 PREG AR1 AR2 ARP
MPY *+,AR5 ; PREG= W*QR/2 - W*QR/2 PR QI 5
SPH *,AR1 ; TMP = W*QR/2 W*QR/2 W*QR/2 PR QI 1
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,AR1 ; QR = (PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QI 1
SUB *,16 ; ACC = (-PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QI 1
NEG ; ACC = (PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PR QI 1
SACH *+ ; QR = (PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PI QI 1
;
LACC *,15,AR5 ; ACC = (PI)/2 W*QR/2 W*QI/2 PI QI 5
SPAC ; ACC = (PI-W*QI)/2 W*QR/2 - PI QI 5
ADD *,16,AR2 ; ACC = (PI-W*QI+W*QR)/2 - - PI QI 2
SACH *+,0,AR1 ; QI = (PI-W*QI+W*QR)/2 - - PI QR1 1
SUB *,16 ; ACCU= (-PI-W*QI+W*QR)/2 - - PI QR1 1
NEG ; ACCU= (PI+W*QI-W*QR)/2 - - PI QR1 1
SACH *+,0,AR2 ; PI = (PI+W*QI-W*QR)/2 - - PR1 QR1 2
$ENDM
;
******************************************************************************
* *
* MACRO 'P3BY4J' number of words/number of cycles: 16 *
* *
* version 1.00 from: Manfred Christ update: 02. July 90 *
* *
* ENTRANCE IN THE MACRO: ARP=AR2 *
* AR1->PR,PI *
* AR2->QR,QI *
* TREG=W=COS(45)=SIN(45) *
* *
* PR'= PR + (W*QI - W*QR) = PR + W * QI - W * QR (<- AR1) *
* QR'= PR - (W*QI - W*QR) = PR - W * QI + W * QR (<- AR2) *
* PI'= PI - (W*QI + W*QR) = PI - W * QI - W * QR (<- AR1+1) *
* QI'= PI + (W*QI + W*QR) = PI + W * QI + W * QR (<- AR1+2) *
* *
* EXIT OF THE MACRO: ARP=AR2 *
* AR1->PR+1,PI+1 *
* AR2->QR+1,QI+1 *
* *
******************************************************************************
P3BY4J $MACRO p ; TREG= W AR5 PREG AR1 AR2 ARP
; ------ ------ --- --- ---
MPY *+,AR5 ; PREG= W*QR/2 - W*QR/2 PR QI 5
SPH *,AR1 ; TMP = W*QR/2 W*QR/2 W*QR/2 PR QI 1
LACC *,15,AR2 ; ACC = PR/2 W*QR/2 W*QR/2 PR QI 2
MPYA *- ; 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,AR1 ; QR' = (PR-W*QI+W*QR)/2 W*QR/2 W*QI/2 PR QI 1
SUB *,16 ; ACC = (-PR-W*QI+W*QR)/2 W*QR/2 W*QI/2 PR QI 1
NEG ; ACC = (PR+W*QI-W*QR)/2 W*QR/2 W*QI/2 PR QI 1
SACH *+ ; PR' = (PR+W*QI-W*QR)/2 W*QR/2 W*QI/2 PI QI 1
;
LACC *,15,AR5 ; ACC = (PI)/2 W*QR/2 W*QI/2 PI QI 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -