mbed port of FFT routines from STM32 DSP library and Ivan Mellen's implementation. Tested on LPC2368 mbed but should work on 1768 too (original code was written for Cortex-M3)

Dependencies:   mbed

Committer:
igorsk
Date:
Sun Dec 13 07:14:57 2009 +0000
Revision:
0:90ade34a3b71

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igorsk 0:90ade34a3b71 1 ;******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
igorsk 0:90ade34a3b71 2 ;* File Name : cr4_fft_256_stm32.s
igorsk 0:90ade34a3b71 3 ;* Author : MCD Application Team
igorsk 0:90ade34a3b71 4 ;* Version : V2.0.0
igorsk 0:90ade34a3b71 5 ;* Date : 04/27/2009
igorsk 0:90ade34a3b71 6 ;* Description : Optimized 256-point radix-4 complex FFT for Cortex-M3
igorsk 0:90ade34a3b71 7 ;********************************************************************************
igorsk 0:90ade34a3b71 8 ;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
igorsk 0:90ade34a3b71 9 ;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
igorsk 0:90ade34a3b71 10 ;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
igorsk 0:90ade34a3b71 11 ;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
igorsk 0:90ade34a3b71 12 ;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
igorsk 0:90ade34a3b71 13 ;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
igorsk 0:90ade34a3b71 14 ;*******************************************************************************/
igorsk 0:90ade34a3b71 15
igorsk 0:90ade34a3b71 16 ; THUMB
igorsk 0:90ade34a3b71 17 REQUIRE8
igorsk 0:90ade34a3b71 18 PRESERVE8
igorsk 0:90ade34a3b71 19
igorsk 0:90ade34a3b71 20 AREA |.text|, CODE, READONLY, ALIGN=2
igorsk 0:90ade34a3b71 21
igorsk 0:90ade34a3b71 22 EXPORT cr4_fft_256_stm32
igorsk 0:90ade34a3b71 23 EXTERN TableFFT
igorsk 0:90ade34a3b71 24
igorsk 0:90ade34a3b71 25
igorsk 0:90ade34a3b71 26 pssK RN R0
igorsk 0:90ade34a3b71 27 pssOUT RN R0
igorsk 0:90ade34a3b71 28 pssX RN R1
igorsk 0:90ade34a3b71 29 pssIN RN R1
igorsk 0:90ade34a3b71 30 butternbr RN R2
igorsk 0:90ade34a3b71 31 Nbin RN R2
igorsk 0:90ade34a3b71 32 index RN R3
igorsk 0:90ade34a3b71 33 Ar RN R4
igorsk 0:90ade34a3b71 34 Ai RN R5
igorsk 0:90ade34a3b71 35 Br RN R6
igorsk 0:90ade34a3b71 36 Bi RN R7
igorsk 0:90ade34a3b71 37 Cr RN R8
igorsk 0:90ade34a3b71 38 Ci RN R9
igorsk 0:90ade34a3b71 39 Dr RN R10
igorsk 0:90ade34a3b71 40 Di RN R11
igorsk 0:90ade34a3b71 41 cntrbitrev RN R12
igorsk 0:90ade34a3b71 42 tmp RN R12
igorsk 0:90ade34a3b71 43 pssIN2 RN R14
igorsk 0:90ade34a3b71 44 tmp2 RN R14
igorsk 0:90ade34a3b71 45
igorsk 0:90ade34a3b71 46 NPT EQU 256
igorsk 0:90ade34a3b71 47
igorsk 0:90ade34a3b71 48 ;----------------------------- MACROS ----------------------------------------
igorsk 0:90ade34a3b71 49
igorsk 0:90ade34a3b71 50 MACRO
igorsk 0:90ade34a3b71 51 DEC $reg
igorsk 0:90ade34a3b71 52 SUB $reg,$reg,#1
igorsk 0:90ade34a3b71 53 MEND
igorsk 0:90ade34a3b71 54
igorsk 0:90ade34a3b71 55 MACRO
igorsk 0:90ade34a3b71 56 INC $reg
igorsk 0:90ade34a3b71 57 ADD $reg,$reg,#1
igorsk 0:90ade34a3b71 58 MEND
igorsk 0:90ade34a3b71 59
igorsk 0:90ade34a3b71 60
igorsk 0:90ade34a3b71 61 MACRO
igorsk 0:90ade34a3b71 62 QUAD $reg
igorsk 0:90ade34a3b71 63 MOV $reg,$reg,LSL#2
igorsk 0:90ade34a3b71 64 MEND
igorsk 0:90ade34a3b71 65
igorsk 0:90ade34a3b71 66 ;sXi = *(PssX+1); sXr = *PssX; PssX += offset; PssX= R1
igorsk 0:90ade34a3b71 67
igorsk 0:90ade34a3b71 68 MACRO
igorsk 0:90ade34a3b71 69 LDR2Q $sXr,$sXi, $PssX, $offset
igorsk 0:90ade34a3b71 70 LDRSH $sXi, [$PssX, #2]
igorsk 0:90ade34a3b71 71 LDRSH $sXr, [$PssX]
igorsk 0:90ade34a3b71 72 ADD $PssX, $PssX, $offset
igorsk 0:90ade34a3b71 73 MEND
igorsk 0:90ade34a3b71 74
igorsk 0:90ade34a3b71 75 ;!! Same macro, to be used when passing negative offset value !!
igorsk 0:90ade34a3b71 76 MACRO
igorsk 0:90ade34a3b71 77 LDR2Qm $sXr, $sXi, $PssX, $offset
igorsk 0:90ade34a3b71 78 LDRSH $sXi, [$PssX, #2]
igorsk 0:90ade34a3b71 79 LDRSH $sXr, [$PssX]
igorsk 0:90ade34a3b71 80 SUB $PssX, $PssX, $offset
igorsk 0:90ade34a3b71 81 MEND
igorsk 0:90ade34a3b71 82
igorsk 0:90ade34a3b71 83 ;(PssX+1)= sXi; *PssX=sXr; PssX += offset;
igorsk 0:90ade34a3b71 84 MACRO
igorsk 0:90ade34a3b71 85 STR2Q $sXr, $sXi, $PssX, $offset
igorsk 0:90ade34a3b71 86 STRH $sXi, [$PssX, #2]
igorsk 0:90ade34a3b71 87 STRH $sXr, [$PssX]
igorsk 0:90ade34a3b71 88 ADD $PssX, $PssX, $offset
igorsk 0:90ade34a3b71 89 MEND
igorsk 0:90ade34a3b71 90
igorsk 0:90ade34a3b71 91 ; YY = Cplx_conjugate_mul(Y,K)
igorsk 0:90ade34a3b71 92 ; Y = YYr + i*YYi
igorsk 0:90ade34a3b71 93 ; use the following trick
igorsk 0:90ade34a3b71 94 ; K = (Kr-Ki) + i*Ki
igorsk 0:90ade34a3b71 95 MACRO
igorsk 0:90ade34a3b71 96 CXMUL_V7 $YYr, $YYi, $Yr, $Yi, $Kr, $Ki,$tmp,$tmp2
igorsk 0:90ade34a3b71 97 SUB $tmp2, $Yi, $Yr ; sYi-sYr
igorsk 0:90ade34a3b71 98 MUL $tmp, $tmp2, $Ki ; (sYi-sYr)*sKi
igorsk 0:90ade34a3b71 99 ADD $tmp2, $Kr, $Ki, LSL#1 ; (sKr+sKi)
igorsk 0:90ade34a3b71 100 MLA $YYi, $Yi, $Kr, $tmp ; lYYi = sYi*sKr-sYr*sKi
igorsk 0:90ade34a3b71 101 MLA $YYr, $Yr, $tmp2, $tmp ; lYYr = sYr*sKr+sYi*sKi
igorsk 0:90ade34a3b71 102 MEND
igorsk 0:90ade34a3b71 103
igorsk 0:90ade34a3b71 104 ; Four point complex Fast Fourier Transform
igorsk 0:90ade34a3b71 105 MACRO
igorsk 0:90ade34a3b71 106 CXADDA4 $s
igorsk 0:90ade34a3b71 107 ; (C,D) = (C+D, C-D)
igorsk 0:90ade34a3b71 108 ADD Cr, Cr, Dr
igorsk 0:90ade34a3b71 109 ADD Ci, Ci, Di
igorsk 0:90ade34a3b71 110 SUB Dr, Cr, Dr, LSL#1
igorsk 0:90ade34a3b71 111 SUB Di, Ci, Di, LSL#1
igorsk 0:90ade34a3b71 112 ; (A,B) = (A+(B>>s), A-(B>>s))/4
igorsk 0:90ade34a3b71 113 MOV Ar, Ar, ASR#2
igorsk 0:90ade34a3b71 114 MOV Ai, Ai, ASR#2
igorsk 0:90ade34a3b71 115 ADD Ar, Ar, Br, ASR#(2+$s)
igorsk 0:90ade34a3b71 116 ADD Ai, Ai, Bi, ASR#(2+$s)
igorsk 0:90ade34a3b71 117 SUB Br, Ar, Br, ASR#(1+$s)
igorsk 0:90ade34a3b71 118 SUB Bi, Ai, Bi, ASR#(1+$s)
igorsk 0:90ade34a3b71 119 ; (A,C) = (A+(C>>s)/4, A-(C>>s)/4)
igorsk 0:90ade34a3b71 120 ADD Ar, Ar, Cr, ASR#(2+$s)
igorsk 0:90ade34a3b71 121 ADD Ai, Ai, Ci, ASR#(2+$s)
igorsk 0:90ade34a3b71 122 SUB Cr, Ar, Cr, ASR#(1+$s)
igorsk 0:90ade34a3b71 123 SUB Ci, Ai, Ci, ASR#(1+$s)
igorsk 0:90ade34a3b71 124 ; (B,D) = (B-i*(D>>s)/4, B+i*(D>>s)/4)
igorsk 0:90ade34a3b71 125 ADD Br, Br, Di, ASR#(2+$s)
igorsk 0:90ade34a3b71 126 SUB Bi, Bi, Dr, ASR#(2+$s)
igorsk 0:90ade34a3b71 127 SUB Di, Br, Di, ASR#(1+$s)
igorsk 0:90ade34a3b71 128 ADD Dr, Bi, Dr, ASR#(1+$s)
igorsk 0:90ade34a3b71 129 MEND
igorsk 0:90ade34a3b71 130
igorsk 0:90ade34a3b71 131
igorsk 0:90ade34a3b71 132 MACRO
igorsk 0:90ade34a3b71 133 BUTFLY4ZERO_OPT $pIN,$offset, $pOUT
igorsk 0:90ade34a3b71 134 LDRSH Ai, [$pIN, #2]
igorsk 0:90ade34a3b71 135 LDRSH Ar, [$pIN]
igorsk 0:90ade34a3b71 136 ADD $pIN, #NPT
igorsk 0:90ade34a3b71 137 LDRSH Ci, [$pIN, #2]
igorsk 0:90ade34a3b71 138 LDRSH Cr, [$pIN]
igorsk 0:90ade34a3b71 139 ADD $pIN, #NPT
igorsk 0:90ade34a3b71 140 LDRSH Bi, [$pIN, #2]
igorsk 0:90ade34a3b71 141 LDRSH Br, [$pIN]
igorsk 0:90ade34a3b71 142 ADD $pIN, #NPT
igorsk 0:90ade34a3b71 143 LDRSH Di, [$pIN, #2]
igorsk 0:90ade34a3b71 144 LDRSH Dr, [$pIN]
igorsk 0:90ade34a3b71 145 ADD $pIN, #NPT
igorsk 0:90ade34a3b71 146
igorsk 0:90ade34a3b71 147 ; (C,D) = (C+D, C-D)
igorsk 0:90ade34a3b71 148 ADD Cr, Cr, Dr
igorsk 0:90ade34a3b71 149 ADD Ci, Ci, Di
igorsk 0:90ade34a3b71 150 SUB Dr, Cr, Dr, LSL#1 ; trick
igorsk 0:90ade34a3b71 151 SUB Di, Ci, Di, LSL#1 ;trick
igorsk 0:90ade34a3b71 152 ; (A,B) = (A+B)/4, (A-B)/4
igorsk 0:90ade34a3b71 153 MOV Ar, Ar, ASR#2
igorsk 0:90ade34a3b71 154 MOV Ai, Ai, ASR#2
igorsk 0:90ade34a3b71 155 ADD Ar, Ar, Br, ASR#2
igorsk 0:90ade34a3b71 156 ADD Ai, Ai, Bi, ASR#2
igorsk 0:90ade34a3b71 157 SUB Br, Ar, Br, ASR#1
igorsk 0:90ade34a3b71 158 SUB Bi, Ai, Bi, ASR#1
igorsk 0:90ade34a3b71 159 ; (A,C) = (A+C)/4, (A-C)/4
igorsk 0:90ade34a3b71 160 ADD Ar, Ar, Cr, ASR#2
igorsk 0:90ade34a3b71 161 ADD Ai, Ai, Ci, ASR#2
igorsk 0:90ade34a3b71 162 SUB Cr, Ar, Cr, ASR#1
igorsk 0:90ade34a3b71 163 SUB Ci, Ai, Ci, ASR#1
igorsk 0:90ade34a3b71 164 ; (B,D) = (B-i*D)/4, (B+i*D)/4
igorsk 0:90ade34a3b71 165 ADD Br, Br, Di, ASR#2
igorsk 0:90ade34a3b71 166 SUB Bi, Bi, Dr, ASR#2
igorsk 0:90ade34a3b71 167 SUB Di, Br, Di, ASR#1
igorsk 0:90ade34a3b71 168 ADD Dr, Bi, Dr, ASR#1
igorsk 0:90ade34a3b71 169 ;
igorsk 0:90ade34a3b71 170 STRH Ai, [$pOUT, #2]
igorsk 0:90ade34a3b71 171 STRH Ar, [$pOUT], #4
igorsk 0:90ade34a3b71 172 STRH Bi, [$pOUT, #2]
igorsk 0:90ade34a3b71 173 STRH Br, [$pOUT], #4
igorsk 0:90ade34a3b71 174 STRH Ci, [$pOUT, #2]
igorsk 0:90ade34a3b71 175 STRH Cr, [$pOUT], #4
igorsk 0:90ade34a3b71 176 STRH Dr, [$pOUT, #2] ; inversion here
igorsk 0:90ade34a3b71 177 STRH Di, [$pOUT], #4
igorsk 0:90ade34a3b71 178 MEND
igorsk 0:90ade34a3b71 179
igorsk 0:90ade34a3b71 180 MACRO
igorsk 0:90ade34a3b71 181 BUTFLY4_V7 $pssDin,$offset,$pssDout,$qformat,$pssK
igorsk 0:90ade34a3b71 182 LDR2Qm Ar,Ai,$pssDin, $offset;-$offset
igorsk 0:90ade34a3b71 183 LDR2Q Dr,Di,$pssK, #4
igorsk 0:90ade34a3b71 184 ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
igorsk 0:90ade34a3b71 185 CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
igorsk 0:90ade34a3b71 186 LDR2Qm Ar,Ai,$pssDin,$offset;-$offset
igorsk 0:90ade34a3b71 187 LDR2Q Cr,Ci,$pssK,#4
igorsk 0:90ade34a3b71 188 CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
igorsk 0:90ade34a3b71 189 LDR2Qm Ar,Ai, $pssDin, $offset;-$offset
igorsk 0:90ade34a3b71 190 LDR2Q Br,Bi, $pssK, #4
igorsk 0:90ade34a3b71 191 CXMUL_V7 Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
igorsk 0:90ade34a3b71 192 LDR2Q Ar,Ai, $pssDin, #0
igorsk 0:90ade34a3b71 193 CXADDA4 $qformat
igorsk 0:90ade34a3b71 194 STRH Ai, [$pssDout, #2]
igorsk 0:90ade34a3b71 195 STRH Ar, [$pssDout]
igorsk 0:90ade34a3b71 196 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 197 STRH Bi, [$pssDout, #2]
igorsk 0:90ade34a3b71 198 STRH Br, [$pssDout]
igorsk 0:90ade34a3b71 199 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 200 STRH Ci, [$pssDout, #2]
igorsk 0:90ade34a3b71 201 STRH Cr, [$pssDout]
igorsk 0:90ade34a3b71 202 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 203 STRH Dr, [$pssDout, #2] ; inversion here
igorsk 0:90ade34a3b71 204 STRH Di, [$pssDout], #4
igorsk 0:90ade34a3b71 205 MEND
igorsk 0:90ade34a3b71 206
igorsk 0:90ade34a3b71 207 ;------------------- CODE --------------------------------
igorsk 0:90ade34a3b71 208 ;===============================================================================
igorsk 0:90ade34a3b71 209 ;*******************************************************************************
igorsk 0:90ade34a3b71 210 ;* Function Name : cr4_fft_256_stm32
igorsk 0:90ade34a3b71 211 ;* Description : complex radix-4 256 points FFT
igorsk 0:90ade34a3b71 212 ;* Input : - R0 = pssOUT: Output array .
igorsk 0:90ade34a3b71 213 ;* - R1 = pssIN: Input array
igorsk 0:90ade34a3b71 214 ;* - R2 = Nbin: =256 number of points, this optimized FFT function
igorsk 0:90ade34a3b71 215 ;* can only convert 256 points.
igorsk 0:90ade34a3b71 216 ;* Output : None
igorsk 0:90ade34a3b71 217 ;* Return : None
igorsk 0:90ade34a3b71 218 ;*******************************************************************************
igorsk 0:90ade34a3b71 219 cr4_fft_256_stm32
igorsk 0:90ade34a3b71 220
igorsk 0:90ade34a3b71 221 STMFD SP!, {R4-R11, LR}
igorsk 0:90ade34a3b71 222
igorsk 0:90ade34a3b71 223 MOV cntrbitrev, #0
igorsk 0:90ade34a3b71 224 MOV index,#0
igorsk 0:90ade34a3b71 225
igorsk 0:90ade34a3b71 226 preloop_v7
igorsk 0:90ade34a3b71 227 ADD pssIN2, pssIN, cntrbitrev, LSR#24 ;256-pts
igorsk 0:90ade34a3b71 228 BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
igorsk 0:90ade34a3b71 229 INC index
igorsk 0:90ade34a3b71 230 IF :DEF:TARGET_LPC1768
igorsk 0:90ade34a3b71 231 RBIT cntrbitrev,index
igorsk 0:90ade34a3b71 232 ELSE
igorsk 0:90ade34a3b71 233 ; add 1 to cntrbitrev "backwards"
igorsk 0:90ade34a3b71 234 ; start looking from top, toggling all bits until we hit a 0,
igorsk 0:90ade34a3b71 235 ; which we toggle to 1 and then stop
igorsk 0:90ade34a3b71 236 ; tmp2 = 0x80000000;
igorsk 0:90ade34a3b71 237 ; bit1 = true;
igorsk 0:90ade34a3b71 238 ; while ( bit1 ) {
igorsk 0:90ade34a3b71 239 ; bit1 = (cntrbitrev & tmp2) != 0;
igorsk 0:90ade34a3b71 240 ; cntrbitrev ^= tmp2;
igorsk 0:90ade34a3b71 241 ; if ( bit1 ) tmp2 <= 1;
igorsk 0:90ade34a3b71 242 ; }
igorsk 0:90ade34a3b71 243 MOV tmp2, #(1<<31)
igorsk 0:90ade34a3b71 244 Lrev
igorsk 0:90ade34a3b71 245 TST cntrbitrev, tmp2 ; is the current bit set?
igorsk 0:90ade34a3b71 246 EOR cntrbitrev, tmp2 ; toggle it regardless of result
igorsk 0:90ade34a3b71 247 MOVNE tmp2, tmp2, LSR#1 ; if set, shift mask
igorsk 0:90ade34a3b71 248 BNE Lrev ; and loop again
igorsk 0:90ade34a3b71 249 ENDIF
igorsk 0:90ade34a3b71 250
igorsk 0:90ade34a3b71 251 CMP index,#64 ;256-pts
igorsk 0:90ade34a3b71 252 BNE preloop_v7
igorsk 0:90ade34a3b71 253
igorsk 0:90ade34a3b71 254
igorsk 0:90ade34a3b71 255 SUB pssX, pssOUT, Nbin, LSL#2
igorsk 0:90ade34a3b71 256 MOV index, #16
igorsk 0:90ade34a3b71 257 MOVS butternbr, Nbin, LSR#4 ;dual use of register
igorsk 0:90ade34a3b71 258
igorsk 0:90ade34a3b71 259 ;------------------------------------------------------------------------------
igorsk 0:90ade34a3b71 260 ; The FFT coefficients table can be stored into Flash or RAM.
igorsk 0:90ade34a3b71 261 ; The following two lines of code allow selecting the method for coefficients
igorsk 0:90ade34a3b71 262 ; storage.
igorsk 0:90ade34a3b71 263 ; In the case of choosing coefficients in RAM, you have to:
igorsk 0:90ade34a3b71 264 ; 1. Include the file table_fft.h, which is a part of the DSP library,
igorsk 0:90ade34a3b71 265 ; in your main file.
igorsk 0:90ade34a3b71 266 ; 2. Decomment the line LDR.W pssK, =TableFFT and comment the line
igorsk 0:90ade34a3b71 267 ; ADRL pssK, TableFFT_V7
igorsk 0:90ade34a3b71 268 ; 3. Comment all the TableFFT_V7 data.
igorsk 0:90ade34a3b71 269 ;------------------------------------------------------------------------------
igorsk 0:90ade34a3b71 270 ADR pssK, TableFFT_V7 ; Coeff in Flash
igorsk 0:90ade34a3b71 271 ;LDR.W pssK, =TableFFT ; Coeff in RAM
igorsk 0:90ade34a3b71 272
igorsk 0:90ade34a3b71 273 ;................................
igorsk 0:90ade34a3b71 274 passloop_v7
igorsk 0:90ade34a3b71 275 STMFD SP!, {pssX,butternbr}
igorsk 0:90ade34a3b71 276 ADD tmp, index, index, LSL#1
igorsk 0:90ade34a3b71 277 ADD pssX, pssX, tmp
igorsk 0:90ade34a3b71 278 SUB butternbr, butternbr, #1<<16
igorsk 0:90ade34a3b71 279 ;................
igorsk 0:90ade34a3b71 280 grouploop_v7
igorsk 0:90ade34a3b71 281 ADD butternbr,butternbr,index,LSL#(16-2)
igorsk 0:90ade34a3b71 282 ;.......
igorsk 0:90ade34a3b71 283 butterloop_v7
igorsk 0:90ade34a3b71 284 BUTFLY4_V7 pssX,index,pssX,14,pssK
igorsk 0:90ade34a3b71 285 SUBS butternbr,butternbr, #1<<16
igorsk 0:90ade34a3b71 286 BGE butterloop_v7
igorsk 0:90ade34a3b71 287 ;.......
igorsk 0:90ade34a3b71 288 ADD tmp, index, index, LSL#1
igorsk 0:90ade34a3b71 289 ADD pssX, pssX, tmp
igorsk 0:90ade34a3b71 290 DEC butternbr
igorsk 0:90ade34a3b71 291 MOVS tmp2, butternbr, LSL#16
igorsk 0:90ade34a3b71 292 IT NE
igorsk 0:90ade34a3b71 293 SUBNE pssK, pssK, tmp
igorsk 0:90ade34a3b71 294 BNE grouploop_v7
igorsk 0:90ade34a3b71 295 ;................
igorsk 0:90ade34a3b71 296 LDMFD sp!, {pssX, butternbr}
igorsk 0:90ade34a3b71 297 QUAD index
igorsk 0:90ade34a3b71 298 MOVS butternbr, butternbr, LSR#2 ; loop nbr /= radix
igorsk 0:90ade34a3b71 299 BNE passloop_v7
igorsk 0:90ade34a3b71 300 ;................................
igorsk 0:90ade34a3b71 301 LDMFD SP!, {R4-R11, PC}
igorsk 0:90ade34a3b71 302
igorsk 0:90ade34a3b71 303 ;=============================================================================
igorsk 0:90ade34a3b71 304
igorsk 0:90ade34a3b71 305 TableFFT_V7
igorsk 0:90ade34a3b71 306 ;N=16
igorsk 0:90ade34a3b71 307 DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
igorsk 0:90ade34a3b71 308 DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
igorsk 0:90ade34a3b71 309 DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
igorsk 0:90ade34a3b71 310 DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
igorsk 0:90ade34a3b71 311 ; N=64
igorsk 0:90ade34a3b71 312 DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
igorsk 0:90ade34a3b71 313 DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
igorsk 0:90ade34a3b71 314 DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
igorsk 0:90ade34a3b71 315 DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
igorsk 0:90ade34a3b71 316 DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
igorsk 0:90ade34a3b71 317 DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
igorsk 0:90ade34a3b71 318 DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
igorsk 0:90ade34a3b71 319 DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
igorsk 0:90ade34a3b71 320 DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
igorsk 0:90ade34a3b71 321 DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
igorsk 0:90ade34a3b71 322 DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
igorsk 0:90ade34a3b71 323 DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
igorsk 0:90ade34a3b71 324 DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
igorsk 0:90ade34a3b71 325 DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
igorsk 0:90ade34a3b71 326 DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
igorsk 0:90ade34a3b71 327 DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
igorsk 0:90ade34a3b71 328 ; N=256
igorsk 0:90ade34a3b71 329 DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
igorsk 0:90ade34a3b71 330 DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
igorsk 0:90ade34a3b71 331 DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
igorsk 0:90ade34a3b71 332 DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
igorsk 0:90ade34a3b71 333 DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
igorsk 0:90ade34a3b71 334 DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
igorsk 0:90ade34a3b71 335 DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
igorsk 0:90ade34a3b71 336 DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
igorsk 0:90ade34a3b71 337 DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
igorsk 0:90ade34a3b71 338 DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
igorsk 0:90ade34a3b71 339 DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
igorsk 0:90ade34a3b71 340 DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
igorsk 0:90ade34a3b71 341 DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
igorsk 0:90ade34a3b71 342 DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
igorsk 0:90ade34a3b71 343 DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
igorsk 0:90ade34a3b71 344 DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
igorsk 0:90ade34a3b71 345 DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
igorsk 0:90ade34a3b71 346 DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
igorsk 0:90ade34a3b71 347 DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
igorsk 0:90ade34a3b71 348 DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
igorsk 0:90ade34a3b71 349 DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
igorsk 0:90ade34a3b71 350 DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
igorsk 0:90ade34a3b71 351 DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
igorsk 0:90ade34a3b71 352 DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
igorsk 0:90ade34a3b71 353 DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
igorsk 0:90ade34a3b71 354 DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
igorsk 0:90ade34a3b71 355 DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
igorsk 0:90ade34a3b71 356 DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
igorsk 0:90ade34a3b71 357 DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
igorsk 0:90ade34a3b71 358 DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
igorsk 0:90ade34a3b71 359 DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
igorsk 0:90ade34a3b71 360 DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
igorsk 0:90ade34a3b71 361 DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
igorsk 0:90ade34a3b71 362 DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
igorsk 0:90ade34a3b71 363 DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
igorsk 0:90ade34a3b71 364 DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
igorsk 0:90ade34a3b71 365 DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
igorsk 0:90ade34a3b71 366 DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
igorsk 0:90ade34a3b71 367 DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
igorsk 0:90ade34a3b71 368 DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
igorsk 0:90ade34a3b71 369 DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
igorsk 0:90ade34a3b71 370 DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
igorsk 0:90ade34a3b71 371 DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
igorsk 0:90ade34a3b71 372 DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
igorsk 0:90ade34a3b71 373 DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
igorsk 0:90ade34a3b71 374 DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
igorsk 0:90ade34a3b71 375 DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
igorsk 0:90ade34a3b71 376 DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
igorsk 0:90ade34a3b71 377 DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
igorsk 0:90ade34a3b71 378 DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
igorsk 0:90ade34a3b71 379 DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
igorsk 0:90ade34a3b71 380 DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
igorsk 0:90ade34a3b71 381 DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
igorsk 0:90ade34a3b71 382 DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
igorsk 0:90ade34a3b71 383 DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
igorsk 0:90ade34a3b71 384 DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
igorsk 0:90ade34a3b71 385 DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
igorsk 0:90ade34a3b71 386 DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
igorsk 0:90ade34a3b71 387 DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
igorsk 0:90ade34a3b71 388 DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
igorsk 0:90ade34a3b71 389 DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
igorsk 0:90ade34a3b71 390 DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
igorsk 0:90ade34a3b71 391 DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
igorsk 0:90ade34a3b71 392 DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
igorsk 0:90ade34a3b71 393
igorsk 0:90ade34a3b71 394 END
igorsk 0:90ade34a3b71 395 ;******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****