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

📄 fft.lst

📁 TMS320C3X 汇编语言程序编译环境
💻 LST
📖 第 1 页 / 共 2 页
字号:
 0001                	
 0002                	         .globl FFT ; Entry point for execution
 0003                	         .globl N ; FFT size
 0004                	         .globl M ; LOG2(N)
 0005                	         .globl SINE ; Address of sine table
 0006                	         .globl SINE
 0007                	         .globl N
 0008                	         .globl M
 0009                	         .global start,INIT,BEGIN
 0010                	
 0011                	
 0012        00000100 	N        .set 256
 0013        00000008 	M        .set 8
 0014 000000         	         .data
 0015 000000 ffffffff 	MASK     .word 0FFFFFFFFH
 0016 000001 00809800 	BLK0     .word 0809800H ; 片内1K×32bit RAM块0起始地址
 0017 000002 00809c00 	BLK1     .word 0809C00H ; 片内1K×32bit RAM块1起始地址
 0018 000003 00809f00 	STCK     .word 0809F00H ; 堆栈起始地址
 0019 000004 00808000 	CTRL     .word 0808000H ; Pointer for peripheral±bus me
 0020 000005 00000000 	DMACTL   .word 0000000H ; Init for DMA control (0)
 0021 000006 00000000 	TIM0CTL  .word 0000000H ; Init of timer 0 control (32)
 0022 000007 00000000 	TIM1CTL  .word 0000000H ; Init of timer 1 control (48)
 0023 000008 00000000 	SERGLOB0 .word 0000000H ; Init of serial 0 glbl control 
 0024 000009 00000000 	SERPRTX0 .word 0000000H ; Init of serial 0 xmt port cont
 0025 00000a 00000000 	SERPRTR0 .word 0000000H ; Init of serial 0 rcv port cont
 0026 00000b 00000000 	SERTIM0  .word 0000000H ; Init of serial 0 timer control
 0027 00000c 00000000 	SERGLOB1 .word 0000000H ; Init of serial 1 glbl control 
 0028 00000d 00000000 	SERPRTX1 .word 0000000H ; Init of serial 1 xmt port cont
 0029 00000e 00000000 	SERPRTR1 .word 0000000H ; Init of serial 1 rcv port cont
 0030 00000f 00000000 	SERTIM1  .word 0000000H ; Init of serial 1 timer control
 0031 000010 00000000 	PARINT   .word 0000000H ; Init of parallel interface con
 0032 000011 00000000 	IOINT    .word 0000000H ; Init of I/O interface control 
 0033                	
 0034                	
 0035 000000         	         .sect "vectors"; Named section 
 0036 000000 00000004'	start    .word INIT ; load address INIT to PC
 0037 000001 00000000 	         .space 63 ; Reserved space
 0038                	 
 0039 000000         	         .text
 0040 000000 00000100 	FFTSIZ   .WORD N
 0041 000001 00000008 	LOGFFT   .WORD M
 0042 000002 00000012"	SINTAB   .WORD SINE
 0043 000003 00000000+	INPUT    .WORD INP
 0044 000004 08700000 	INIT:    LDP 0,DP ; Point the DP register to page 0
 0045 000005 08751800 	         LDI 1800H,ST ; Clear and enable cache, and disa
 0046 000006 08360000+	         LDI @MASK,IE ; Unmask all interrupts
 0047 000007 08280001+	         LDI @BLK0,AR0 ; AR0 points to block 0
 0048 000008 08290002+	         LDI @BLK1,AR1 ; AR1 points to block 1
 0049 000009 07608000 	         LDF 0.0,R0    ; 0 register R0
 0050 00000a 13fb03ff 	         RPTS 1023 ; Repeat 1024 times ...
 0051 00000b c0002120	         STF R0,*AR0++(1) ; Zero out location in RAM blo
 0052                	      || STF R0,*AR1++(1) ; Zero out location in RAM blo
 0053 00000c 08280004+	         LDI @CTRL,AR0 ; Load in AR0 the pointer to cont
 0054 00000d 08200005+		  LDI @DMACTL,R0
 0055 00000e 15400000 		  STI R0,*+AR0(0) ; Init DMA control
 0056 00000f 08200006+		  LDI @TIM0CTL,R0
 0057 000010 15400020 		  STI R0,*+AR0(32) ; Init timer 0 control
 0058 000011 08200007+		  LDI @TIM1CTL,R0
 0059 000012 15400030 		  STI R0,*+AR0(48) ; Init timer 1 control
 0060 000013 08200008+		  LDI @SERGLOB0,R0
 0061 000014 15400040 		  STI R0,*+AR0(64) ; Init serial 0 global control
 0062 000015 08200009+		  LDI @SERPRTX0,R0
 0063 000016 15400042 		  STI R0,*+AR0(66) ; Init serial 0 xmt control
 0064 000017 0820000a+		  LDI @SERPRTR0,R0
 0065 000018 15400043 		  STI R0,*+AR0(67) ; Init serial 0 rcv control
 0066 000019 0820000b+		  LDI @SERTIM0,R0
 0067 00001a 15400044 		  STI R0,*+AR0(68) ; Init serial 0 timer control
 0068 00001b 0820000c+		  LDI @SERGLOB1,R0
 0069 00001c 15400050 		  STI R0,*+AR0(80) ; Init serial 1 global control
 0070 00001d 0820000d+		  LDI @SERPRTX1,R0
 0071 00001e 15400052 		  STI R0,*+AR0(82) ; Init serial 1 xmt control
 0072 00001f 0820000e+		  LDI @SERPRTR1,R0
 0073 000020 15400053 		  STI R0,*+AR0(83) ; Init serial 1 rcv control
 0074 000021 0820000f+		  LDI @SERTIM1,R0
 0075 000022 15400054 		  STI R0,*+AR0(84) ; Init serial 1 timer control
 0076 000023 08200010+		  LDI @PARINT,R0
 0077 000024 15400064 		  STI R0,*+AR0(100) ; Init parallel interface control (
 0078 000025 08200011+		  LDI @IOINT,R0
 0079 000026 15400060 		  STI R0,*+AR0(96) ; Init I/O interface control
 0080 000027 08340003+		  LDI @STCK,SP ; Init the stack pointer
 0081 000028 10752000 	          OR  2000H,ST ; Global interrupt enable
 0082 000029 08600000 	          LDI 0,R0
 0083 00002a 0861ffff 	          LDI -1,R1
 0084 00002b 08280003+	          LDI @INPUT,AR0
 0085 00002c 08290003+	          LDI @INPUT,AR1
 0086 00002d 02690001 	          ADDI 1,AR1
 0087 00002e 087b007f 	          LDI 127,RC
 0088 00002f 08710002 	          LDI 2,IR0
 0089 000030 64000032+	          RPTB D_IN
 0090 000031 0c010001 	          NEGI R1
 0091 000032 c0016160	D_IN:     STF R0,*AR0++(IR0) ;  
 0092                	      ||  STF R1,*AR1++(IR0) ; 
 0093 000033 62000035+	          CALL FFT
 0094                	
 0095                	
 0096 000034 60000034 	          BR  $; Branch to itself at the end
 0097                	
 0098 000035 08700000+	FFT:     LDP FFTSIZ ; Command to load data page pointer
 0099 000036 083b0000+		 LDI @FFTSIZ,RC;RC=N	
 0100 000037 0811001b 		 LDI RC,IR0
 0101 000038 09f1ffff 		 LSH -1,IR0; IR1 = N/2, HALF THE SIZE OF FFT
 0102 000039 187b0001 		 SUBI 1,RC;RC should be one less than desired 
 0103 00003a 08280003+		 LDI @INPUT,AR0
 0104 00003b 08090008 		 LDI AR0,AR1
 0105 00003c 0813001b 		 LDI RC,BK
 0106 00003d 64000043+		 RPTB BITRV
 0107 00003e 04880009 		 CMPI AR1,AR0
 0108 00003f 6a0a0002 		 BGE CONT
 0109 000040 c408c1c0		 LDF *AR0,R0
 0110                	    ||   LDF *AR1,R1
 0111 000041 c001c0c1	         STF R0,*AR1
 0112                	    ||   STF R1,*AR0
 0113 000042 0cc02001 	CONT	 NOP *AR0++
 0114 000043 0cc0c911 	BITRV   NOP *AR1++(IR0)B
 0115                	*length-two butterfiles
 0116 000044 08280003+		 LDI @	INPUT,AR0 ; AR0 POINTS TO X(I)
 0117 000045 081b0011 		 LDI IR0,RC      ;REPEAT N/2 TIMES
 0118 000046 187b0001 		 SUBI 1,RC ; RC should be one less than desired #
 0119 000047 6400004a+		 RPTB BLK_1
 0120 000048 20e02000 		 ADDF *+AR0,*AR0++,R0 ; R0 = X(I)+X(I+1)
 0121 000049 26e108c0 		 SUBF *AR0,*-AR0,R1 ; R1 = X(I)-X(I+1)
 0122 00004a c0012008	BLK_1:	 STF R0,*-AR0; X(I) = X(I)+X(I+1)
 0123                	     ||  STF R1,*AR0++; X(I+1) = X(I)-X(I+1)
 0124                	*FIRST PASS OF THE DO-2 LOOP
 0125 00004b 08280003+	       LDI @INPUT,AR0
 0126 00004c 08710002 		LDI 2,IR0
 0127 00004d 083b0000+		LDI @FFTSIZ,RC
 0128 00004e 09fbfffe 		LSH -2,RC
 0129 00004f 187b0001 		SUBI 1,RC
 0130 000050 64000054+		RPTB BLK_2
 0131 000051 20e06040 		ADDF *+AR0(IR0),*AR0++(IR0),R0  ;R0=X(I)+X(I+2)
 0132 000052 26e148c0 		SUBF *AR0,*-AR0(IR0),R1         ;R0=X(I)-X(I+2)
 0133 000053 e2004800	       NEGF *+AR0,R0
 0134                	    || STF R0,*-AR0(IR0)               ; X(I) = -(X(I)+X
 0135 000054 c0400060	BLK_2: STF R1,*AR0++(IR0)              ; X(I+2) = X(I)-X
 0136                	     ||STF R0,*+AR0                    ; X(I+3) =-X(I+3)
 0137                	*MAIN LOOP(FFT STAGE)
 0138 000055 08310000+		LDI @FFTSIZ,IR0
 0139 000056 09f1fffe 		LSH -2,IR0
 0140 000057 08650003 		LDI 3,R5         	;CURRENT STAGE NO.
 0141 000058 08640001 		LDI 1,R4		;R4=N4
 0142 000059 08630002 	        LDI 2,R3                ;R3=N2
 0143 00005a 09f1ffff 	LOO:    LSH -1,IR0               ;E=E/2
 0144 00005b 09e40001 		LSH 1,R4		;N4=N4*2
 0145 00005c 09e30001 		LSH 1,R3		;N2=N2*2
 0146                	*INNER LOOP
 0147 00005d 082d0003+		LDI @INPUT,AR5	;AR5 POINTS TO X(I)
 0148 00005e 08080011 	INLOP:  LDI IR0,AR0 
 0149 00005f 02280002+		ADDI @SINTAB,AR0;AR0 POINTS TO SIN/COS TABLE
 0150 000060 08120004 		LDI R4,IR1		;IR1=N4
 0151 000061 0809000d 		LDI AR5,AR1
 0152 000062 02690001 		ADDI 1,AR1		;AR1 POINTS TO X(I1)=X(I+J)
 0153 000063 080b0009 		LDI AR1,AR3			
 0154 000064 020b0003 		ADDI R3,AR3		;AR3 POINTS TO X(I3)=X(I+J+N2)
 0155 000065 080a000b 		LDI AR3,AR2
 0156 000066 186a0002 		SUBI 2,AR2		;AR2 POINTS TO X(I2)=X(I-J+N2)
 0157 000067 210c0a03 		ADDI R3,AR2,AR4	;AR4 POINTS TO X(I4)=X(I-J+N1)
 0158 000068 0740a512 		LDF *AR5++(IR1),R0	;R0=X(I)
 0159 000069 20c10085 		ADDF *+AR5(IR1),R0,R1;R1=X(I)+X(I+N2)
 0160 00006a ea018d55		SUBF R0,*++AR5(IR0),R0;R0=-X(I)+X(I+N2)
 0161                		|| STF R1,*-AR5(IR1)	;X(I)=X(I)+X(I+N2)
 0162 00006b 0b800000 		NEGF R0
 0163 00006c e240c595		NEGF *++AR5(IR1),R1	;
 0164                		|| STF R0,*AR5
 0165 00006d 1441c500 		STF R1,*AR5
 0166                	*INNERMOST LOOP
 0167 00006e 08320000+		LDI @FFTSIZ,IR1
 0168 00006f 09f2fffe 		LSH -2,IR1
 0169 000070 081b0004 	        LDI R4,RC
 0170 000071 187b0002 	        SUBI 2,RC
 0171 000072 6400007c+		RPTB BLK_3
 0172 000073 24e080c3 		MPYF *AR3,*+AR0(IR1),R0	;X(I3)*COS
 0173 000074 24e1c0c4 		MPYF *AR4,*AR0,R1		;X(I4)*SIN
 0174 000075 808880c4		MPYF *AR4,*+AR0(IR1),R1
 0175                	    ||  ADDF R0,R1,R2                ;X(I3)*COS+X(I4)*SI
 0176 000076 24e060c3 		MPYF *AR3,*AR0++(IR0),R0	;X(I3)*SIN
 0177 000077 26800100 		SUBF R0,R1,R0			;-X(I3)*SIN+X(I4)*COS
 0178 000078 26c100c2 		SUBF *AR2,R0,R1		;-X(I2)+R0
 0179 000079 cc4123c2		ADDF *AR2,R0,R1		;X(I2)+R0
 0180                	    ||  STF  R1,*AR3++                ;X(I4)=X(I2)+R0
 0181 00007a cc512cc1		ADDF *AR1,R2,R1		;X(I1)-R2
 0182                	    ||  STF  R1,*AR4--                ;X(I1)=X(I1)+R2
 0183 00007b ea5121c1		SUBF R2,*AR1,R1
 0184                	    ||  STF  R1,*AR1++                    ;X(I2)=X(I1)-R
 0185 00007c 14412a01 	BLK_3:  STF  R1,*AR2--
 0186 00007d 182d0003+		SUBI @INPUT,AR5
 0187 00007e 020d0003 		ADDI R3,AR5			;AR5=I+N1
 0188 00007f 04ad0000+		CMPI @FFTSIZ,AR5
 0189 000080 6a28ffdb 		BLED INLOP			;BAK TO INNER LOOP
 0190 000081 022d0003+		ADDI @INPUT,AR5
 0191 000082 0c800000 		NOP
 0192 000083 0c800000 		NOP
 0193 000084 02650001 		ADDI 1,R5
 0194 000085 04a50001+		CMPI @LOGFFT,R5
 0195 000086 6a08ffd3 		BLE LOO
 0196 000087 78800000 	        RETS 
 0197                	
 0198 000012         	     .data
 0199 000012         	SINE	
 0200 000012 80000000 	  .float  0.00000000000000
 0201 000013 fa490aaf 	  .float  0.02454122852291
 0202 000014 fb48fb2f 	  .float  0.04906767432742
 0203 000015 fc16a904 	  .float  0.07356456359967
 0204 000016 fc48bd35 	  .float  0.09801714032956
 0205 000017 fc7ab272 	  .float  0.12241067519922
 0206 000018 fd164083 	  .float  0.14673047445536
 0207 000019 fd2f10a2 	  .float  0.17096188876030
 0208 00001a fd47c5c1 	  .float  0.19509032201613
 0209 00001b fd605c13 	  .float  0.21910124015687
 0210 00001c fd78cfcb 	  .float  0.24298017990326
 0211 00001d fe088e93 	  .float  0.26671275747490
 0212 00001e fe14a031 	  .float  0.29028467725446
 0213 00001f fe209ae4 	  .float  0.31368174039889
 0214 000020 fe2c7cd3 	  .float  0.33688985339222
 0215 000021 fe384429 	  .float  0.35989503653499
 0216 000022 fe43ef15 	  .float  0.38268343236509
 0217 000023 fe4f7bca 	  .float  0.40524131400499
 0218 000024 fe5ae880 	  .float  0.42755509343028
 0219 000025 fe663374 	  .float  0.44961132965461
 0220 000026 fe715ae9 	  .float  0.47139673682600
 0221 000027 fe7c5d26 	  .float  0.49289819222978
 0222 000028 ff039c3c 	  .float  0.51410274419322
 0223 000029 ff08f59a 	   .float   0.53499761988710
 0224 00002a ff0e39d9 	   .float   0.55557023301960
 0225 00002b ff13682a 	   .float   0.57580819141785
 0226 00002c ff187fbf 	   .float   0.59569930449243
 0227 00002d ff1d7fd1 	   .float   0.61523159058063
 0228 00002e ff226799 	   .float   0.63439328416365
 0229 00002f ff273655 	   .float   0.65317284295378
 0230 000030 ff2beb49 	   .float   0.67155895484702
 0231 000031 ff3085ba 	   .float   0.68954054473707
 0232 000032 ff3504f3 	   .float   0.70710678118655
 0233 000033 ff396841 	   .float   0.72424708295147
 0234 000034 ff3daef9 	   .float   0.74095112535496
 0235 000035 ff41d870 	   .float   0.75720884650648
 0236 000036 ff45e403 	   .float   0.77301045336274
 0237 000037 ff49d112 	   .float   0.78834642762661
 0238 000038 ff4d9f02 	   .float   0.80320753148064
 0239 000039 ff514d3c 	   .float   0.81758481315158
 0240 00003a ff54db31 	   .float   0.83146961230255
 0241 00003b ff584852 	   .float   0.84485356524971
 0242 00003c ff5b941a 	   .float   0.85772861000027
 0243 00003d ff5ebe05 	   .float   0.87008699110871
 0244 00003e ff61c597 	   .float   0.88192126434835
 0245 00003f ff64aa59 	   .float   0.89322430119552
 0246 000040 ff676bd7 	   .float   0.90398929312344
 0247 000041 ff6a09a6 	   .float   0.91420975570353
 0248 000042 ff6c835e 	   .float   0.92387953251129
 0249 000043 ff6ed89d 	   .float   0.93299279883474
 0250 000044 ff710908 	   .float   0.94154406518302
 0251 000045 ff731447 	   .float   0.94952818059304
 0252 000046 ff74fa0a 	   .float   0.95694033573221
 0253 000047 ff76ba07 	   .float   0.96377606579544
 0254 000048 ff7853f7 	   .float   0.97003125319454
 0255 000049 ff79c79d 	   .float   0.97570213003853
 0256 00004a ff7b14be 	   .float   0.98078528040323
 0257 00004b ff7c3b27 	   .float   0.98527764238894
 0258 00004c ff7d3aab 	   .float   0.98917650996478
 0259 00004d ff7e1323 	   .float   0.99247953459871
 0260 00004e ff7ec46d 	   .float   0.99518472667220
 0261 00004f ff7f4e6d 	   .float   0.99729045667869
 0262 000050 ff7fb10f 	   .float   0.99879545620517
 0263 000051 ff7fec42 	   .float   0.99969881869620

⌨️ 快捷键说明

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