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_64_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 64-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=4
igorsk 0:90ade34a3b71 21
igorsk 0:90ade34a3b71 22 EXPORT cr4_fft_64_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 64
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],#NPT
igorsk 0:90ade34a3b71 136 LDRSH Ci, [$pIN, #2]
igorsk 0:90ade34a3b71 137 LDRSH Cr, [$pIN],#NPT
igorsk 0:90ade34a3b71 138 LDRSH Bi, [$pIN, #2]
igorsk 0:90ade34a3b71 139 LDRSH Br, [$pIN],#NPT
igorsk 0:90ade34a3b71 140 LDRSH Di, [$pIN, #2]
igorsk 0:90ade34a3b71 141 LDRSH Dr, [$pIN],#NPT
igorsk 0:90ade34a3b71 142 ; (C,D) = (C+D, C-D)
igorsk 0:90ade34a3b71 143 ADD Cr, Cr, Dr
igorsk 0:90ade34a3b71 144 ADD Ci, Ci, Di
igorsk 0:90ade34a3b71 145 SUB Dr, Cr, Dr, LSL#1 ; trick
igorsk 0:90ade34a3b71 146 SUB Di, Ci, Di, LSL#1 ;trick
igorsk 0:90ade34a3b71 147 ; (A,B) = (A+B)/4, (A-B)/4
igorsk 0:90ade34a3b71 148 MOV Ar, Ar, ASR#2
igorsk 0:90ade34a3b71 149 MOV Ai, Ai, ASR#2
igorsk 0:90ade34a3b71 150 ADD Ar, Ar, Br, ASR#2
igorsk 0:90ade34a3b71 151 ADD Ai, Ai, Bi, ASR#2
igorsk 0:90ade34a3b71 152 SUB Br, Ar, Br, ASR#1
igorsk 0:90ade34a3b71 153 SUB Bi, Ai, Bi, ASR#1
igorsk 0:90ade34a3b71 154 ; (A,C) = (A+C)/4, (A-C)/4
igorsk 0:90ade34a3b71 155 ADD Ar, Ar, Cr, ASR#2
igorsk 0:90ade34a3b71 156 ADD Ai, Ai, Ci, ASR#2
igorsk 0:90ade34a3b71 157 SUB Cr, Ar, Cr, ASR#1
igorsk 0:90ade34a3b71 158 SUB Ci, Ai, Ci, ASR#1
igorsk 0:90ade34a3b71 159 ; (B,D) = (B-i*D)/4, (B+i*D)/4
igorsk 0:90ade34a3b71 160 ADD Br, Br, Di, ASR#2
igorsk 0:90ade34a3b71 161 SUB Bi, Bi, Dr, ASR#2
igorsk 0:90ade34a3b71 162 SUB Di, Br, Di, ASR#1
igorsk 0:90ade34a3b71 163 ADD Dr, Bi, Dr, ASR#1
igorsk 0:90ade34a3b71 164 ;
igorsk 0:90ade34a3b71 165 STRH Ai, [$pOUT, #2]
igorsk 0:90ade34a3b71 166 STRH Ar, [$pOUT], #4
igorsk 0:90ade34a3b71 167 STRH Bi, [$pOUT, #2]
igorsk 0:90ade34a3b71 168 STRH Br, [$pOUT], #4
igorsk 0:90ade34a3b71 169 STRH Ci, [$pOUT, #2]
igorsk 0:90ade34a3b71 170 STRH Cr, [$pOUT], #4
igorsk 0:90ade34a3b71 171 STRH Dr, [$pOUT, #2] ; inversion here
igorsk 0:90ade34a3b71 172 STRH Di, [$pOUT], #4
igorsk 0:90ade34a3b71 173 MEND
igorsk 0:90ade34a3b71 174
igorsk 0:90ade34a3b71 175 MACRO
igorsk 0:90ade34a3b71 176 BUTFLY4_V7 $pssDin,$offset,$pssDout,$qformat,$pssK
igorsk 0:90ade34a3b71 177 LDR2Qm Ar,Ai,$pssDin, $offset;-$offset
igorsk 0:90ade34a3b71 178 LDR2Q Dr,Di,$pssK, #4
igorsk 0:90ade34a3b71 179 ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
igorsk 0:90ade34a3b71 180 CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
igorsk 0:90ade34a3b71 181 LDR2Qm Ar,Ai,$pssDin,$offset;-$offset
igorsk 0:90ade34a3b71 182 LDR2Q Cr,Ci,$pssK,#4
igorsk 0:90ade34a3b71 183 CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
igorsk 0:90ade34a3b71 184 LDR2Qm Ar,Ai, $pssDin, $offset;-$offset
igorsk 0:90ade34a3b71 185 LDR2Q Br,Bi, $pssK, #4
igorsk 0:90ade34a3b71 186 CXMUL_V7 Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
igorsk 0:90ade34a3b71 187 LDR2Q Ar,Ai, $pssDin, #0
igorsk 0:90ade34a3b71 188 CXADDA4 $qformat
igorsk 0:90ade34a3b71 189 STRH Ai, [$pssDout, #2]
igorsk 0:90ade34a3b71 190 STRH Ar, [$pssDout]
igorsk 0:90ade34a3b71 191 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 192 STRH Bi, [$pssDout, #2]
igorsk 0:90ade34a3b71 193 STRH Br, [$pssDout]
igorsk 0:90ade34a3b71 194 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 195 STRH Ci, [$pssDout, #2]
igorsk 0:90ade34a3b71 196 STRH Cr, [$pssDout]
igorsk 0:90ade34a3b71 197 ADD $pssDout, $pssDout, $offset
igorsk 0:90ade34a3b71 198 STRH Dr, [$pssDout, #2] ; inversion here
igorsk 0:90ade34a3b71 199 STRH Di, [$pssDout], #4
igorsk 0:90ade34a3b71 200 MEND
igorsk 0:90ade34a3b71 201
igorsk 0:90ade34a3b71 202 ;------------------- CODE --------------------------------
igorsk 0:90ade34a3b71 203 ;===============================================================================
igorsk 0:90ade34a3b71 204 ;*******************************************************************************
igorsk 0:90ade34a3b71 205 ;* Function Name : cr4_fft_64_stm32
igorsk 0:90ade34a3b71 206 ;* Description : complex radix-4 64 points FFT
igorsk 0:90ade34a3b71 207 ;* Input : - R0 = pssOUT: Output array .
igorsk 0:90ade34a3b71 208 ;* - R1 = pssIN: Input array
igorsk 0:90ade34a3b71 209 ;* - R2 = Nbin: =64 number of points, this optimized FFT function
igorsk 0:90ade34a3b71 210 ;* can only convert 64 points.
igorsk 0:90ade34a3b71 211 ;* Output : None
igorsk 0:90ade34a3b71 212 ;* Return : None
igorsk 0:90ade34a3b71 213 ;*******************************************************************************
igorsk 0:90ade34a3b71 214 cr4_fft_64_stm32
igorsk 0:90ade34a3b71 215
igorsk 0:90ade34a3b71 216 STMFD SP!, {R4-R11, LR}
igorsk 0:90ade34a3b71 217
igorsk 0:90ade34a3b71 218 MOV cntrbitrev, #0
igorsk 0:90ade34a3b71 219 MOV index,#0
igorsk 0:90ade34a3b71 220 preloop_v7
igorsk 0:90ade34a3b71 221 ADD pssIN2, pssIN, cntrbitrev, LSR#26 ;64-pts
igorsk 0:90ade34a3b71 222 BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
igorsk 0:90ade34a3b71 223 INC index
igorsk 0:90ade34a3b71 224 IF :DEF:TARGET_LPC1768
igorsk 0:90ade34a3b71 225 RBIT cntrbitrev,index
igorsk 0:90ade34a3b71 226 ELSE
igorsk 0:90ade34a3b71 227 ; since we need only 16 values, use a lookup table
igorsk 0:90ade34a3b71 228 ADR cntrbitrev, BITREV16
igorsk 0:90ade34a3b71 229 LDR cntrbitrev, [cntrbitrev, index, LSL #2]
igorsk 0:90ade34a3b71 230 ENDIF
igorsk 0:90ade34a3b71 231 CMP index,#16 ;64-pts
igorsk 0:90ade34a3b71 232 BNE preloop_v7
igorsk 0:90ade34a3b71 233
igorsk 0:90ade34a3b71 234
igorsk 0:90ade34a3b71 235 SUB pssX, pssOUT, Nbin, LSL#2
igorsk 0:90ade34a3b71 236 MOV index, #16
igorsk 0:90ade34a3b71 237 MOVS butternbr, Nbin, LSR#4 ;dual use of register
igorsk 0:90ade34a3b71 238
igorsk 0:90ade34a3b71 239 ;------------------------------------------------------------------------------
igorsk 0:90ade34a3b71 240 ; The FFT coefficients table can be stored into Flash or RAM.
igorsk 0:90ade34a3b71 241 ; The following two lines of code allow selecting the method for coefficients
igorsk 0:90ade34a3b71 242 ; storage.
igorsk 0:90ade34a3b71 243 ; In the case of choosing coefficients in RAM, you have to:
igorsk 0:90ade34a3b71 244 ; 1. Include the file table_fft.h, which is a part of the DSP library,
igorsk 0:90ade34a3b71 245 ; in your main file.
igorsk 0:90ade34a3b71 246 ; 2. Decomment the line LDR.W pssK, =TableFFT and comment the line
igorsk 0:90ade34a3b71 247 ; ADRL pssK, TableFFT_V7
igorsk 0:90ade34a3b71 248 ; 3. Comment all the TableFFT_V7 data.
igorsk 0:90ade34a3b71 249 ;------------------------------------------------------------------------------
igorsk 0:90ade34a3b71 250 ADR pssK, TableFFT_V7 ; Coeff in Flash
igorsk 0:90ade34a3b71 251 ;LDR.W pssK, =TableFFT ; Coeff in RAM
igorsk 0:90ade34a3b71 252
igorsk 0:90ade34a3b71 253 ;................................
igorsk 0:90ade34a3b71 254 passloop_v7
igorsk 0:90ade34a3b71 255 STMFD SP!, {pssX,butternbr}
igorsk 0:90ade34a3b71 256 ADD tmp, index, index, LSL#1
igorsk 0:90ade34a3b71 257 ADD pssX, pssX, tmp
igorsk 0:90ade34a3b71 258 SUB butternbr, butternbr, #1<<16
igorsk 0:90ade34a3b71 259 ;................
igorsk 0:90ade34a3b71 260 grouploop_v7
igorsk 0:90ade34a3b71 261 ADD butternbr,butternbr,index,LSL#(16-2)
igorsk 0:90ade34a3b71 262 ;.......
igorsk 0:90ade34a3b71 263 butterloop_v7
igorsk 0:90ade34a3b71 264 BUTFLY4_V7 pssX,index,pssX,14,pssK
igorsk 0:90ade34a3b71 265 SUBS butternbr,butternbr, #1<<16
igorsk 0:90ade34a3b71 266 BGE butterloop_v7
igorsk 0:90ade34a3b71 267 ;.......
igorsk 0:90ade34a3b71 268 ADD tmp, index, index, LSL#1
igorsk 0:90ade34a3b71 269 ADD pssX, pssX, tmp
igorsk 0:90ade34a3b71 270 DEC butternbr
igorsk 0:90ade34a3b71 271 MOVS tmp2, butternbr, LSL#16
igorsk 0:90ade34a3b71 272 IT NE
igorsk 0:90ade34a3b71 273 SUBNE pssK, pssK, tmp
igorsk 0:90ade34a3b71 274 BNE grouploop_v7
igorsk 0:90ade34a3b71 275 ;................
igorsk 0:90ade34a3b71 276 LDMFD sp!, {pssX, butternbr}
igorsk 0:90ade34a3b71 277 QUAD index
igorsk 0:90ade34a3b71 278 MOVS butternbr, butternbr, LSR#2 ; loop nbr /= radix
igorsk 0:90ade34a3b71 279 BNE passloop_v7
igorsk 0:90ade34a3b71 280 ;................................
igorsk 0:90ade34a3b71 281 LDMFD SP!, {R4-R11, PC}
igorsk 0:90ade34a3b71 282
igorsk 0:90ade34a3b71 283 ;=============================================================================
igorsk 0:90ade34a3b71 284
igorsk 0:90ade34a3b71 285 TableFFT_V7
igorsk 0:90ade34a3b71 286 ;N=16
igorsk 0:90ade34a3b71 287 DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
igorsk 0:90ade34a3b71 288 DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
igorsk 0:90ade34a3b71 289 DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
igorsk 0:90ade34a3b71 290 DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
igorsk 0:90ade34a3b71 291 ; N=64
igorsk 0:90ade34a3b71 292 DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
igorsk 0:90ade34a3b71 293 DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
igorsk 0:90ade34a3b71 294 DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
igorsk 0:90ade34a3b71 295 DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
igorsk 0:90ade34a3b71 296 DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
igorsk 0:90ade34a3b71 297 DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
igorsk 0:90ade34a3b71 298 DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
igorsk 0:90ade34a3b71 299 DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
igorsk 0:90ade34a3b71 300 DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
igorsk 0:90ade34a3b71 301 DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
igorsk 0:90ade34a3b71 302 DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
igorsk 0:90ade34a3b71 303 DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
igorsk 0:90ade34a3b71 304 DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
igorsk 0:90ade34a3b71 305 DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
igorsk 0:90ade34a3b71 306 DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
igorsk 0:90ade34a3b71 307 DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
igorsk 0:90ade34a3b71 308
igorsk 0:90ade34a3b71 309 ; bit reversal table values from 0 to 16
igorsk 0:90ade34a3b71 310 BITREV16
igorsk 0:90ade34a3b71 311 DCD 2_0000 << 28
igorsk 0:90ade34a3b71 312 DCD 2_1000 << 28
igorsk 0:90ade34a3b71 313 DCD 2_0100 << 28
igorsk 0:90ade34a3b71 314 DCD 2_1100 << 28
igorsk 0:90ade34a3b71 315 DCD 2_0010 << 28
igorsk 0:90ade34a3b71 316 DCD 2_1010 << 28
igorsk 0:90ade34a3b71 317 DCD 2_0110 << 28
igorsk 0:90ade34a3b71 318 DCD 2_1110 << 28
igorsk 0:90ade34a3b71 319 DCD 2_0001 << 28
igorsk 0:90ade34a3b71 320 DCD 2_1001 << 28
igorsk 0:90ade34a3b71 321 DCD 2_0101 << 28
igorsk 0:90ade34a3b71 322 DCD 2_1101 << 28
igorsk 0:90ade34a3b71 323 DCD 2_0011 << 28
igorsk 0:90ade34a3b71 324 DCD 2_1011 << 28
igorsk 0:90ade34a3b71 325 DCD 2_0111 << 28
igorsk 0:90ade34a3b71 326 DCD 2_1111 << 28
igorsk 0:90ade34a3b71 327 DCD 2_0000 << 28
igorsk 0:90ade34a3b71 328 END
igorsk 0:90ade34a3b71 329 ;******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****