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

cr4_fft_1024_stm32.s

Committer:
igorsk
Date:
2009-12-13
Revision:
0:90ade34a3b71

File content as of revision 0:90ade34a3b71:

;******************** (C) COPYRIGHT 2009  STMicroelectronics ********************
;* File Name          : cr4_fft_1024_stm32.s
;* Author             : MCD Application Team
;* Version            : V2.0.0
;* Date               : 04/27/2009
;* Description        : Optimized 1024-point radix-4 complex FFT for Cortex-M3
;********************************************************************************
;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************/

;    THUMB
      REQUIRE8
    PRESERVE8

    AREA |.text|, CODE, READONLY, ALIGN=2
                
    EXPORT cr4_fft_1024_stm32      
    EXTERN TableFFT


pssK          RN R0
pssOUT        RN R0
pssX          RN R1
pssIN         RN R1
butternbr     RN R2
Nbin          RN R2
index         RN R3
Ar            RN R4
Ai            RN R5
Br            RN R6
Bi            RN R7
Cr            RN R8
Ci            RN R9
Dr            RN R10
Di            RN R11
cntrbitrev     RN R12
tmp           RN R12
pssIN2        RN R14
tmp2          RN R14

NPT EQU 1024

;----------------------------- MACROS ----------------------------------------
     
         MACRO
         DEC  $reg
         SUB  $reg,$reg,#1
         MEND

         MACRO
         INC  $reg
         ADD  $reg,$reg,#1
         MEND


          MACRO
         QUAD  $reg
         MOV  $reg,$reg,LSL#2
         MEND

;sXi = *(PssX+1); sXr = *PssX; PssX += offset; PssX= R1

          MACRO
          LDR2Q  $sXr,$sXi, $PssX, $offset
          LDRSH $sXi, [$PssX, #2]
          LDRSH $sXr, [$PssX]
          ADD $PssX, $PssX, $offset
          MEND

;!! Same macro, to be used when passing negative offset value !!
        MACRO
        LDR2Qm  $sXr, $sXi, $PssX, $offset
        LDRSH $sXi, [$PssX, #2]
        LDRSH $sXr, [$PssX]
        SUB $PssX, $PssX, $offset
        MEND

;(PssX+1)= sXi;  *PssX=sXr; PssX += offset;
        MACRO
        STR2Q  $sXr, $sXi, $PssX, $offset
        STRH  $sXi, [$PssX, #2]
        STRH  $sXr, [$PssX]
        ADD $PssX, $PssX, $offset
        MEND

; YY = Cplx_conjugate_mul(Y,K)
;  Y = YYr + i*YYi
; use the following trick
;  K = (Kr-Ki) + i*Ki
        MACRO
        CXMUL_V7  $YYr, $YYi, $Yr, $Yi, $Kr, $Ki,$tmp,$tmp2
        SUB  $tmp2, $Yi, $Yr         ; sYi-sYr
        MUL  $tmp, $tmp2, $Ki        ; (sYi-sYr)*sKi
        ADD  $tmp2, $Kr, $Ki, LSL#1  ; (sKr+sKi)
        MLA  $YYi, $Yi, $Kr, $tmp     ; lYYi = sYi*sKr-sYr*sKi
        MLA  $YYr, $Yr, $tmp2, $tmp   ; lYYr = sYr*sKr+sYi*sKi
        MEND

; Four point complex Fast Fourier Transform        
        MACRO
        CXADDA4  $s
        ; (C,D) = (C+D, C-D)
        ADD     Cr, Cr, Dr
        ADD     Ci, Ci, Di
        SUB     Dr, Cr, Dr, LSL#1
        SUB     Di, Ci, Di, LSL#1
        ; (A,B) = (A+(B>>s), A-(B>>s))/4
        MOV     Ar, Ar, ASR#2
        MOV     Ai, Ai, ASR#2
        ADD     Ar, Ar, Br, ASR#(2+$s)
        ADD     Ai, Ai, Bi, ASR#(2+$s)
        SUB     Br, Ar, Br, ASR#(1+$s)
        SUB     Bi, Ai, Bi, ASR#(1+$s)
        ; (A,C) = (A+(C>>s)/4, A-(C>>s)/4)
        ADD     Ar, Ar, Cr, ASR#(2+$s)
        ADD     Ai, Ai, Ci, ASR#(2+$s)
        SUB     Cr, Ar, Cr, ASR#(1+$s)
        SUB     Ci, Ai, Ci, ASR#(1+$s)
        ; (B,D) = (B-i*(D>>s)/4, B+i*(D>>s)/4)
        ADD     Br, Br, Di, ASR#(2+$s)
        SUB     Bi, Bi, Dr, ASR#(2+$s)
        SUB     Di, Br, Di, ASR#(1+$s)
        ADD     Dr, Bi, Dr, ASR#(1+$s)
        MEND

        
        MACRO
        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
        LDRSH Ai, [$pIN, #2]
        LDRSH Ar, [$pIN]
        ADD   $pIN, #NPT
        LDRSH Ci, [$pIN, #2]
        LDRSH Cr, [$pIN]
        ADD   $pIN, #NPT
        LDRSH Bi, [$pIN, #2]
        LDRSH Br, [$pIN]
        ADD   $pIN, #NPT
        LDRSH Di, [$pIN, #2]
        LDRSH Dr, [$pIN]
        ADD   $pIN, #NPT

        ; (C,D) = (C+D, C-D)
        ADD     Cr, Cr, Dr
        ADD     Ci, Ci, Di
        SUB     Dr, Cr, Dr, LSL#1  ; trick
        SUB     Di, Ci, Di, LSL#1  ;trick
        ; (A,B) = (A+B)/4, (A-B)/4
        MOV     Ar, Ar, ASR#2
        MOV     Ai, Ai, ASR#2
        ADD     Ar, Ar, Br, ASR#2
        ADD     Ai, Ai, Bi, ASR#2
        SUB     Br, Ar, Br, ASR#1
        SUB     Bi, Ai, Bi, ASR#1
        ; (A,C) = (A+C)/4, (A-C)/4
        ADD     Ar, Ar, Cr, ASR#2
        ADD     Ai, Ai, Ci, ASR#2
        SUB     Cr, Ar, Cr, ASR#1
        SUB     Ci, Ai, Ci, ASR#1
        ; (B,D) = (B-i*D)/4, (B+i*D)/4
        ADD     Br, Br, Di, ASR#2
        SUB     Bi, Bi, Dr, ASR#2
        SUB     Di, Br, Di, ASR#1
        ADD     Dr, Bi, Dr, ASR#1
        ;
        STRH    Ai, [$pOUT, #2]
        STRH    Ar, [$pOUT], #4
        STRH    Bi, [$pOUT, #2]
        STRH    Br, [$pOUT], #4
        STRH    Ci, [$pOUT, #2]
        STRH    Cr, [$pOUT], #4
        STRH    Dr, [$pOUT, #2]  ; inversion here
        STRH    Di, [$pOUT], #4
        MEND

        MACRO
        BUTFLY4_V7   $pssDin,$offset,$pssDout,$qformat,$pssK
        LDR2Qm   Ar,Ai,$pssDin, $offset;-$offset
        LDR2Q    Dr,Di,$pssK, #4
        ; format CXMUL_V7 YYr, YYi, Yr, Yi, Kr, Ki,tmp,tmp2
        CXMUL_V7 Dr,Di,Ar,Ai,Dr,Di,tmp,tmp2
        LDR2Qm   Ar,Ai,$pssDin,$offset;-$offset
        LDR2Q    Cr,Ci,$pssK,#4
        CXMUL_V7 Cr,Ci,Ar,Ai,Cr,Ci,tmp,tmp2
        LDR2Qm    Ar,Ai, $pssDin, $offset;-$offset
        LDR2Q    Br,Bi, $pssK, #4
        CXMUL_V7  Br,Bi,Ar,Ai,Br,Bi,tmp,tmp2
        LDR2Q    Ar,Ai, $pssDin, #0
        CXADDA4  $qformat
        STRH    Ai, [$pssDout, #2]
        STRH    Ar, [$pssDout]
        ADD     $pssDout, $pssDout, $offset
        STRH    Bi, [$pssDout, #2]
        STRH    Br, [$pssDout]
        ADD     $pssDout, $pssDout, $offset
        STRH    Ci, [$pssDout, #2]
        STRH    Cr, [$pssDout]
        ADD     $pssDout, $pssDout, $offset
        STRH    Dr, [$pssDout, #2]  ; inversion here
        STRH    Di, [$pssDout], #4
        MEND

;-------------------             CODE             --------------------------------
;===============================================================================
;*******************************************************************************
;* Function Name  : cr4_fft_1024_stm32
;* Description    : complex radix-4 1024 points FFT
;* Input          : - R0 = pssOUT: Output array .
;*                  - R1 = pssIN: Input array 
;*                  - R2 = Nbin: =1024 number of points, this optimized FFT function  
;*                    can only convert 1024 points.
;* Output         : None 
;* Return         : None
;*******************************************************************************
cr4_fft_1024_stm32

        STMFD   SP!, {R4-R11, LR}
        
        MOV cntrbitrev, #0
        MOV index,#0
        
preloop_v7
        ADD     pssIN2, pssIN, cntrbitrev, LSR#22 ;1024-pts
        BUTFLY4ZERO_OPT pssIN2,Nbin,pssOUT
        INC index
     IF :DEF:TARGET_LPC1768        
        RBIT cntrbitrev,index
     ELSE
        ; add 1 to cntrbitrev "backwards"
        ; start looking from top, toggling all bits until we hit a 0,
        ; which we toggle to 1 and then stop
        ; tmp2 = 0x80000000;
        ; bit1 = true;
        ; while ( bit1 ) {
        ;    bit1 = (cntrbitrev & tmp2) != 0;
        ;    cntrbitrev ^= tmp2;
        ;    if ( bit1 ) tmp2 <= 1;
        ; }
        MOV   tmp2, #(1<<31)
Lrev        
        TST   cntrbitrev, tmp2  ; is the current bit set?
        EOR   cntrbitrev, tmp2  ; toggle it regardless of result
        MOVNE tmp2, tmp2, LSR#1 ; if set, shift mask
        BNE   Lrev              ; and loop again        
     ENDIF
        CMP index,#256  ;1024-pts
        BNE  preloop_v7


        SUB     pssX, pssOUT, Nbin, LSL#2
        MOV     index, #16
        MOVS    butternbr, Nbin, LSR#4   ;dual use of register 
        
;------------------------------------------------------------------------------
;   The FFT coefficients table can be stored into Flash or RAM. 
;   The following two lines of code allow selecting the method for coefficients 
;   storage. 
;   In the case of choosing coefficients in RAM, you have to:
;   1. Include the file table_fft.h, which is a part of the DSP library, 
;      in your main file.
;   2. Decomment the line LDR.W pssK, =TableFFT and comment the line 
;      ADRL    pssK, TableFFT_V7
;   3. Comment all the TableFFT_V7 data.
;------------------------------------------------------------------------------
        ADR    pssK, TableFFT_V7    ; Coeff in Flash 
        ;LDR.W pssK, =TableFFT      ; Coeff in RAM 

;................................
passloop_v7
        STMFD   SP!, {pssX,butternbr}
        ADD     tmp, index, index, LSL#1
        ADD     pssX, pssX, tmp
        SUB     butternbr, butternbr, #1<<16
;................
grouploop_v7
        ADD     butternbr,butternbr,index,LSL#(16-2)
;.......
butterloop_v7
        BUTFLY4_V7  pssX,index,pssX,14,pssK
        SUBS        butternbr,butternbr, #1<<16
        BGE     butterloop_v7
;.......
        ADD     tmp, index, index, LSL#1
        ADD     pssX, pssX, tmp
        DEC     butternbr
        MOVS    tmp2, butternbr, LSL#16
        IT      NE
        SUBNE   pssK, pssK, tmp
        BNE     grouploop_v7
;................
        LDMFD   sp!, {pssX, butternbr}
        QUAD    index
        MOVS    butternbr, butternbr, LSR#2    ; loop nbr /= radix 
        BNE     passloop_v7
;................................
       LDMFD   SP!, {R4-R11, PC}

;=============================================================================

TableFFT_V7
        ;N=16
        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
        ; N=64
        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
        ; N=256
        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
        DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
        DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
        DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
        DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
        DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
        DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
        DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
        DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
        DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
        DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
        DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
        DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
        DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
        DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
        DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
        DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
        DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
        DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
        DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
        DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
        DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
        DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
        DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
        DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
        DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
        DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
        DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
        DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
        DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
        DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
        DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
        DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
        DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
        DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
        DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
        DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
        DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
        DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
        DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
        DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
        DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
        DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
        DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
        DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
        DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
        DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
        DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
        DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
        ; N=1024
        DCW 0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000
        DCW 0x3ed0,0x012e, 0x3f9b,0x0065, 0x3f36,0x00c9
        DCW 0x3d9a,0x025b, 0x3f36,0x00c9, 0x3e69,0x0192
        DCW 0x3c5f,0x0388, 0x3ed0,0x012e, 0x3d9a,0x025b
        DCW 0x3b1e,0x04b5, 0x3e69,0x0192, 0x3cc8,0x0324
        DCW 0x39d9,0x05e2, 0x3e02,0x01f7, 0x3bf4,0x03ed
        DCW 0x388e,0x070e, 0x3d9a,0x025b, 0x3b1e,0x04b5
        DCW 0x373f,0x0839, 0x3d31,0x02c0, 0x3a46,0x057e
        DCW 0x35eb,0x0964, 0x3cc8,0x0324, 0x396b,0x0646
        DCW 0x3492,0x0a8e, 0x3c5f,0x0388, 0x388e,0x070e
        DCW 0x3334,0x0bb7, 0x3bf4,0x03ed, 0x37af,0x07d6
        DCW 0x31d2,0x0cdf, 0x3b8a,0x0451, 0x36ce,0x089d
        DCW 0x306c,0x0e06, 0x3b1e,0x04b5, 0x35eb,0x0964
        DCW 0x2f02,0x0f2b, 0x3ab2,0x051a, 0x3505,0x0a2b
        DCW 0x2d93,0x1050, 0x3a46,0x057e, 0x341e,0x0af1
        DCW 0x2c21,0x1173, 0x39d9,0x05e2, 0x3334,0x0bb7
        DCW 0x2aaa,0x1294, 0x396b,0x0646, 0x3249,0x0c7c
        DCW 0x2931,0x13b4, 0x38fd,0x06aa, 0x315b,0x0d41
        DCW 0x27b3,0x14d2, 0x388e,0x070e, 0x306c,0x0e06
        DCW 0x2632,0x15ee, 0x381f,0x0772, 0x2f7b,0x0eca
        DCW 0x24ae,0x1709, 0x37af,0x07d6, 0x2e88,0x0f8d
        DCW 0x2326,0x1821, 0x373f,0x0839, 0x2d93,0x1050
        DCW 0x219c,0x1937, 0x36ce,0x089d, 0x2c9d,0x1112
        DCW 0x200e,0x1a4b, 0x365d,0x0901, 0x2ba4,0x11d3
        DCW 0x1e7e,0x1b5d, 0x35eb,0x0964, 0x2aaa,0x1294
        DCW 0x1ceb,0x1c6c, 0x3578,0x09c7, 0x29af,0x1354
        DCW 0x1b56,0x1d79, 0x3505,0x0a2b, 0x28b2,0x1413
        DCW 0x19be,0x1e84, 0x3492,0x0a8e, 0x27b3,0x14d2
        DCW 0x1824,0x1f8c, 0x341e,0x0af1, 0x26b3,0x1590
        DCW 0x1688,0x2091, 0x33a9,0x0b54, 0x25b1,0x164c
        DCW 0x14ea,0x2193, 0x3334,0x0bb7, 0x24ae,0x1709
        DCW 0x134a,0x2292, 0x32bf,0x0c1a, 0x23a9,0x17c4
        DCW 0x11a8,0x238e, 0x3249,0x0c7c, 0x22a3,0x187e
        DCW 0x1005,0x2488, 0x31d2,0x0cdf, 0x219c,0x1937
        DCW 0x0e61,0x257e, 0x315b,0x0d41, 0x2093,0x19ef
        DCW 0x0cbb,0x2671, 0x30e4,0x0da4, 0x1f89,0x1aa7
        DCW 0x0b14,0x2760, 0x306c,0x0e06, 0x1e7e,0x1b5d
        DCW 0x096d,0x284c, 0x2ff4,0x0e68, 0x1d72,0x1c12
        DCW 0x07c4,0x2935, 0x2f7b,0x0eca, 0x1c64,0x1cc6
        DCW 0x061b,0x2a1a, 0x2f02,0x0f2b, 0x1b56,0x1d79
        DCW 0x0471,0x2afb, 0x2e88,0x0f8d, 0x1a46,0x1e2b
        DCW 0x02c7,0x2bd8, 0x2e0e,0x0fee, 0x1935,0x1edc
        DCW 0x011c,0x2cb2, 0x2d93,0x1050, 0x1824,0x1f8c
        DCW 0xff72,0x2d88, 0x2d18,0x10b1, 0x1711,0x203a
        DCW 0xfdc7,0x2e5a, 0x2c9d,0x1112, 0x15fe,0x20e7
        DCW 0xfc1d,0x2f28, 0x2c21,0x1173, 0x14ea,0x2193
        DCW 0xfa73,0x2ff2, 0x2ba4,0x11d3, 0x13d5,0x223d
        DCW 0xf8ca,0x30b8, 0x2b28,0x1234, 0x12bf,0x22e7
        DCW 0xf721,0x3179, 0x2aaa,0x1294, 0x11a8,0x238e
        DCW 0xf579,0x3236, 0x2a2d,0x12f4, 0x1091,0x2435
        DCW 0xf3d2,0x32ef, 0x29af,0x1354, 0x0f79,0x24da
        DCW 0xf22c,0x33a3, 0x2931,0x13b4, 0x0e61,0x257e
        DCW 0xf087,0x3453, 0x28b2,0x1413, 0x0d48,0x2620
        DCW 0xeee3,0x34ff, 0x2833,0x1473, 0x0c2e,0x26c1
        DCW 0xed41,0x35a5, 0x27b3,0x14d2, 0x0b14,0x2760
        DCW 0xeba1,0x3648, 0x2733,0x1531, 0x09fa,0x27fe
        DCW 0xea02,0x36e5, 0x26b3,0x1590, 0x08df,0x289a
        DCW 0xe865,0x377e, 0x2632,0x15ee, 0x07c4,0x2935
        DCW 0xe6cb,0x3812, 0x25b1,0x164c, 0x06a9,0x29ce
        DCW 0xe532,0x38a1, 0x252f,0x16ab, 0x058d,0x2a65
        DCW 0xe39c,0x392b, 0x24ae,0x1709, 0x0471,0x2afb
        DCW 0xe208,0x39b0, 0x242b,0x1766, 0x0355,0x2b8f
        DCW 0xe077,0x3a30, 0x23a9,0x17c4, 0x0239,0x2c21
        DCW 0xdee9,0x3aab, 0x2326,0x1821, 0x011c,0x2cb2
        DCW 0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41
        DCW 0xdbd5,0x3b92, 0x221f,0x18db, 0xfee4,0x2dcf
        DCW 0xda4f,0x3bfd, 0x219c,0x1937, 0xfdc7,0x2e5a
        DCW 0xd8cd,0x3c64, 0x2117,0x1993, 0xfcab,0x2ee4
        DCW 0xd74e,0x3cc5, 0x2093,0x19ef, 0xfb8f,0x2f6c
        DCW 0xd5d3,0x3d21, 0x200e,0x1a4b, 0xfa73,0x2ff2
        DCW 0xd45c,0x3d78, 0x1f89,0x1aa7, 0xf957,0x3076
        DCW 0xd2e8,0x3dc9, 0x1f04,0x1b02, 0xf83c,0x30f9
        DCW 0xd178,0x3e15, 0x1e7e,0x1b5d, 0xf721,0x3179
        DCW 0xd00c,0x3e5c, 0x1df8,0x1bb8, 0xf606,0x31f8
        DCW 0xcea5,0x3e9d, 0x1d72,0x1c12, 0xf4ec,0x3274
        DCW 0xcd41,0x3ed8, 0x1ceb,0x1c6c, 0xf3d2,0x32ef
        DCW 0xcbe2,0x3f0f, 0x1c64,0x1cc6, 0xf2b8,0x3368
        DCW 0xca88,0x3f40, 0x1bdd,0x1d20, 0xf19f,0x33df
        DCW 0xc932,0x3f6b, 0x1b56,0x1d79, 0xf087,0x3453
        DCW 0xc7e1,0x3f91, 0x1ace,0x1dd3, 0xef6f,0x34c6
        DCW 0xc695,0x3fb1, 0x1a46,0x1e2b, 0xee58,0x3537
        DCW 0xc54e,0x3fcc, 0x19be,0x1e84, 0xed41,0x35a5
        DCW 0xc40c,0x3fe1, 0x1935,0x1edc, 0xec2b,0x3612
        DCW 0xc2cf,0x3ff1, 0x18ad,0x1f34, 0xeb16,0x367d
        DCW 0xc197,0x3ffb, 0x1824,0x1f8c, 0xea02,0x36e5
        DCW 0xc065,0x4000, 0x179b,0x1fe3, 0xe8ef,0x374b
        DCW 0xbf38,0x3fff, 0x1711,0x203a, 0xe7dc,0x37b0
        DCW 0xbe11,0x3ff8, 0x1688,0x2091, 0xe6cb,0x3812
        DCW 0xbcf0,0x3fec, 0x15fe,0x20e7, 0xe5ba,0x3871
        DCW 0xbbd4,0x3fdb, 0x1574,0x213d, 0xe4aa,0x38cf
        DCW 0xbabf,0x3fc4, 0x14ea,0x2193, 0xe39c,0x392b
        DCW 0xb9af,0x3fa7, 0x145f,0x21e8, 0xe28e,0x3984
        DCW 0xb8a6,0x3f85, 0x13d5,0x223d, 0xe182,0x39db
        DCW 0xb7a2,0x3f5d, 0x134a,0x2292, 0xe077,0x3a30
        DCW 0xb6a5,0x3f30, 0x12bf,0x22e7, 0xdf6d,0x3a82
        DCW 0xb5af,0x3efd, 0x1234,0x233b, 0xde64,0x3ad3
        DCW 0xb4be,0x3ec5, 0x11a8,0x238e, 0xdd5d,0x3b21
        DCW 0xb3d5,0x3e88, 0x111d,0x23e2, 0xdc57,0x3b6d
        DCW 0xb2f2,0x3e45, 0x1091,0x2435, 0xdb52,0x3bb6
        DCW 0xb215,0x3dfc, 0x1005,0x2488, 0xda4f,0x3bfd
        DCW 0xb140,0x3daf, 0x0f79,0x24da, 0xd94d,0x3c42
        DCW 0xb071,0x3d5b, 0x0eed,0x252c, 0xd84d,0x3c85
        DCW 0xafa9,0x3d03, 0x0e61,0x257e, 0xd74e,0x3cc5
        DCW 0xaee8,0x3ca5, 0x0dd4,0x25cf, 0xd651,0x3d03
        DCW 0xae2e,0x3c42, 0x0d48,0x2620, 0xd556,0x3d3f
        DCW 0xad7b,0x3bda, 0x0cbb,0x2671, 0xd45c,0x3d78
        DCW 0xacd0,0x3b6d, 0x0c2e,0x26c1, 0xd363,0x3daf
        DCW 0xac2b,0x3afa, 0x0ba1,0x2711, 0xd26d,0x3de3
        DCW 0xab8e,0x3a82, 0x0b14,0x2760, 0xd178,0x3e15
        DCW 0xaaf8,0x3a06, 0x0a87,0x27af, 0xd085,0x3e45
        DCW 0xaa6a,0x3984, 0x09fa,0x27fe, 0xcf94,0x3e72
        DCW 0xa9e3,0x38fd, 0x096d,0x284c, 0xcea5,0x3e9d
        DCW 0xa963,0x3871, 0x08df,0x289a, 0xcdb7,0x3ec5
        DCW 0xa8eb,0x37e1, 0x0852,0x28e7, 0xcccc,0x3eeb
        DCW 0xa87b,0x374b, 0x07c4,0x2935, 0xcbe2,0x3f0f
        DCW 0xa812,0x36b1, 0x0736,0x2981, 0xcafb,0x3f30
        DCW 0xa7b1,0x3612, 0x06a9,0x29ce, 0xca15,0x3f4f
        DCW 0xa757,0x356e, 0x061b,0x2a1a, 0xc932,0x3f6b
        DCW 0xa705,0x34c6, 0x058d,0x2a65, 0xc851,0x3f85
        DCW 0xa6bb,0x3419, 0x04ff,0x2ab0, 0xc772,0x3f9c
        DCW 0xa678,0x3368, 0x0471,0x2afb, 0xc695,0x3fb1
        DCW 0xa63e,0x32b2, 0x03e3,0x2b45, 0xc5ba,0x3fc4
        DCW 0xa60b,0x31f8, 0x0355,0x2b8f, 0xc4e2,0x3fd4
        DCW 0xa5e0,0x3139, 0x02c7,0x2bd8, 0xc40c,0x3fe1
        DCW 0xa5bc,0x3076, 0x0239,0x2c21, 0xc338,0x3fec
        DCW 0xa5a1,0x2faf, 0x01aa,0x2c6a, 0xc266,0x3ff5
        DCW 0xa58d,0x2ee4, 0x011c,0x2cb2, 0xc197,0x3ffb
        DCW 0xa581,0x2e15, 0x008e,0x2cfa, 0xc0ca,0x3fff
        DCW 0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000
        DCW 0xa581,0x2c6a, 0xff72,0x2d88, 0xbf38,0x3fff
        DCW 0xa58d,0x2b8f, 0xfee4,0x2dcf, 0xbe73,0x3ffb
        DCW 0xa5a1,0x2ab0, 0xfe56,0x2e15, 0xbdb0,0x3ff5
        DCW 0xa5bc,0x29ce, 0xfdc7,0x2e5a, 0xbcf0,0x3fec
        DCW 0xa5e0,0x28e7, 0xfd39,0x2e9f, 0xbc32,0x3fe1
        DCW 0xa60b,0x27fe, 0xfcab,0x2ee4, 0xbb77,0x3fd4
        DCW 0xa63e,0x2711, 0xfc1d,0x2f28, 0xbabf,0x3fc4
        DCW 0xa678,0x2620, 0xfb8f,0x2f6c, 0xba09,0x3fb1
        DCW 0xa6bb,0x252c, 0xfb01,0x2faf, 0xb956,0x3f9c
        DCW 0xa705,0x2435, 0xfa73,0x2ff2, 0xb8a6,0x3f85
        DCW 0xa757,0x233b, 0xf9e5,0x3034, 0xb7f8,0x3f6b
        DCW 0xa7b1,0x223d, 0xf957,0x3076, 0xb74d,0x3f4f
        DCW 0xa812,0x213d, 0xf8ca,0x30b8, 0xb6a5,0x3f30
        DCW 0xa87b,0x203a, 0xf83c,0x30f9, 0xb600,0x3f0f
        DCW 0xa8eb,0x1f34, 0xf7ae,0x3139, 0xb55e,0x3eeb
        DCW 0xa963,0x1e2b, 0xf721,0x3179, 0xb4be,0x3ec5
        DCW 0xa9e3,0x1d20, 0xf693,0x31b9, 0xb422,0x3e9d
        DCW 0xaa6a,0x1c12, 0xf606,0x31f8, 0xb388,0x3e72
        DCW 0xaaf8,0x1b02, 0xf579,0x3236, 0xb2f2,0x3e45
        DCW 0xab8e,0x19ef, 0xf4ec,0x3274, 0xb25e,0x3e15
        DCW 0xac2b,0x18db, 0xf45f,0x32b2, 0xb1cd,0x3de3
        DCW 0xacd0,0x17c4, 0xf3d2,0x32ef, 0xb140,0x3daf
        DCW 0xad7b,0x16ab, 0xf345,0x332c, 0xb0b5,0x3d78
        DCW 0xae2e,0x1590, 0xf2b8,0x3368, 0xb02d,0x3d3f
        DCW 0xaee8,0x1473, 0xf22c,0x33a3, 0xafa9,0x3d03
        DCW 0xafa9,0x1354, 0xf19f,0x33df, 0xaf28,0x3cc5
        DCW 0xb071,0x1234, 0xf113,0x3419, 0xaea9,0x3c85
        DCW 0xb140,0x1112, 0xf087,0x3453, 0xae2e,0x3c42
        DCW 0xb215,0x0fee, 0xeffb,0x348d, 0xadb6,0x3bfd
        DCW 0xb2f2,0x0eca, 0xef6f,0x34c6, 0xad41,0x3bb6
        DCW 0xb3d5,0x0da4, 0xeee3,0x34ff, 0xacd0,0x3b6d
        DCW 0xb4be,0x0c7c, 0xee58,0x3537, 0xac61,0x3b21
        DCW 0xb5af,0x0b54, 0xedcc,0x356e, 0xabf6,0x3ad3
        DCW 0xb6a5,0x0a2b, 0xed41,0x35a5, 0xab8e,0x3a82
        DCW 0xb7a2,0x0901, 0xecb6,0x35dc, 0xab29,0x3a30
        DCW 0xb8a6,0x07d6, 0xec2b,0x3612, 0xaac8,0x39db
        DCW 0xb9af,0x06aa, 0xeba1,0x3648, 0xaa6a,0x3984
        DCW 0xbabf,0x057e, 0xeb16,0x367d, 0xaa0f,0x392b
        DCW 0xbbd4,0x0451, 0xea8c,0x36b1, 0xa9b7,0x38cf
        DCW 0xbcf0,0x0324, 0xea02,0x36e5, 0xa963,0x3871
        DCW 0xbe11,0x01f7, 0xe978,0x3718, 0xa912,0x3812
        DCW 0xbf38,0x00c9, 0xe8ef,0x374b, 0xa8c5,0x37b0
        DCW 0xc065,0xff9b, 0xe865,0x377e, 0xa87b,0x374b
        DCW 0xc197,0xfe6e, 0xe7dc,0x37b0, 0xa834,0x36e5
        DCW 0xc2cf,0xfd40, 0xe753,0x37e1, 0xa7f1,0x367d
        DCW 0xc40c,0xfc13, 0xe6cb,0x3812, 0xa7b1,0x3612
        DCW 0xc54e,0xfae6, 0xe642,0x3842, 0xa774,0x35a5
        DCW 0xc695,0xf9ba, 0xe5ba,0x3871, 0xa73b,0x3537
        DCW 0xc7e1,0xf88e, 0xe532,0x38a1, 0xa705,0x34c6
        DCW 0xc932,0xf763, 0xe4aa,0x38cf, 0xa6d3,0x3453
        DCW 0xca88,0xf639, 0xe423,0x38fd, 0xa6a4,0x33df
        DCW 0xcbe2,0xf50f, 0xe39c,0x392b, 0xa678,0x3368
        DCW 0xcd41,0xf3e6, 0xe315,0x3958, 0xa650,0x32ef
        DCW 0xcea5,0xf2bf, 0xe28e,0x3984, 0xa62c,0x3274
        DCW 0xd00c,0xf198, 0xe208,0x39b0, 0xa60b,0x31f8
        DCW 0xd178,0xf073, 0xe182,0x39db, 0xa5ed,0x3179
        DCW 0xd2e8,0xef4f, 0xe0fc,0x3a06, 0xa5d3,0x30f9
        DCW 0xd45c,0xee2d, 0xe077,0x3a30, 0xa5bc,0x3076
        DCW 0xd5d3,0xed0c, 0xdff2,0x3a59, 0xa5a9,0x2ff2
        DCW 0xd74e,0xebed, 0xdf6d,0x3a82, 0xa599,0x2f6c
        DCW 0xd8cd,0xeacf, 0xdee9,0x3aab, 0xa58d,0x2ee4
        DCW 0xda4f,0xe9b4, 0xde64,0x3ad3, 0xa585,0x2e5a
        DCW 0xdbd5,0xe89a, 0xdde1,0x3afa, 0xa57f,0x2dcf
        DCW 0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41
        DCW 0xdee9,0xe66d, 0xdcda,0x3b47, 0xa57f,0x2cb2
        DCW 0xe077,0xe559, 0xdc57,0x3b6d, 0xa585,0x2c21
        DCW 0xe208,0xe448, 0xdbd5,0x3b92, 0xa58d,0x2b8f
        DCW 0xe39c,0xe33a, 0xdb52,0x3bb6, 0xa599,0x2afb
        DCW 0xe532,0xe22d, 0xdad1,0x3bda, 0xa5a9,0x2a65
        DCW 0xe6cb,0xe124, 0xda4f,0x3bfd, 0xa5bc,0x29ce
        DCW 0xe865,0xe01d, 0xd9ce,0x3c20, 0xa5d3,0x2935
        DCW 0xea02,0xdf19, 0xd94d,0x3c42, 0xa5ed,0x289a
        DCW 0xeba1,0xde18, 0xd8cd,0x3c64, 0xa60b,0x27fe
        DCW 0xed41,0xdd19, 0xd84d,0x3c85, 0xa62c,0x2760
        DCW 0xeee3,0xdc1e, 0xd7cd,0x3ca5, 0xa650,0x26c1
        DCW 0xf087,0xdb26, 0xd74e,0x3cc5, 0xa678,0x2620
        DCW 0xf22c,0xda31, 0xd6cf,0x3ce4, 0xa6a4,0x257e
        DCW 0xf3d2,0xd93f, 0xd651,0x3d03, 0xa6d3,0x24da
        DCW 0xf579,0xd851, 0xd5d3,0x3d21, 0xa705,0x2435
        DCW 0xf721,0xd766, 0xd556,0x3d3f, 0xa73b,0x238e
        DCW 0xf8ca,0xd67f, 0xd4d8,0x3d5b, 0xa774,0x22e7
        DCW 0xfa73,0xd59b, 0xd45c,0x3d78, 0xa7b1,0x223d
        DCW 0xfc1d,0xd4bb, 0xd3df,0x3d93, 0xa7f1,0x2193
        DCW 0xfdc7,0xd3df, 0xd363,0x3daf, 0xa834,0x20e7
        DCW 0xff72,0xd306, 0xd2e8,0x3dc9, 0xa87b,0x203a
        DCW 0x011c,0xd231, 0xd26d,0x3de3, 0xa8c5,0x1f8c
        DCW 0x02c7,0xd161, 0xd1f2,0x3dfc, 0xa912,0x1edc
        DCW 0x0471,0xd094, 0xd178,0x3e15, 0xa963,0x1e2b
        DCW 0x061b,0xcfcc, 0xd0fe,0x3e2d, 0xa9b7,0x1d79
        DCW 0x07c4,0xcf07, 0xd085,0x3e45, 0xaa0f,0x1cc6
        DCW 0x096d,0xce47, 0xd00c,0x3e5c, 0xaa6a,0x1c12
        DCW 0x0b14,0xcd8c, 0xcf94,0x3e72, 0xaac8,0x1b5d
        DCW 0x0cbb,0xccd4, 0xcf1c,0x3e88, 0xab29,0x1aa7
        DCW 0x0e61,0xcc21, 0xcea5,0x3e9d, 0xab8e,0x19ef
        DCW 0x1005,0xcb73, 0xce2e,0x3eb1, 0xabf6,0x1937
        DCW 0x11a8,0xcac9, 0xcdb7,0x3ec5, 0xac61,0x187e
        DCW 0x134a,0xca24, 0xcd41,0x3ed8, 0xacd0,0x17c4
        DCW 0x14ea,0xc983, 0xcccc,0x3eeb, 0xad41,0x1709
        DCW 0x1688,0xc8e8, 0xcc57,0x3efd, 0xadb6,0x164c
        DCW 0x1824,0xc850, 0xcbe2,0x3f0f, 0xae2e,0x1590
        DCW 0x19be,0xc7be, 0xcb6e,0x3f20, 0xaea9,0x14d2
        DCW 0x1b56,0xc731, 0xcafb,0x3f30, 0xaf28,0x1413
        DCW 0x1ceb,0xc6a8, 0xca88,0x3f40, 0xafa9,0x1354
        DCW 0x1e7e,0xc625, 0xca15,0x3f4f, 0xb02d,0x1294
        DCW 0x200e,0xc5a7, 0xc9a3,0x3f5d, 0xb0b5,0x11d3
        DCW 0x219c,0xc52d, 0xc932,0x3f6b, 0xb140,0x1112
        DCW 0x2326,0xc4b9, 0xc8c1,0x3f78, 0xb1cd,0x1050
        DCW 0x24ae,0xc44a, 0xc851,0x3f85, 0xb25e,0x0f8d
        DCW 0x2632,0xc3e0, 0xc7e1,0x3f91, 0xb2f2,0x0eca
        DCW 0x27b3,0xc37b, 0xc772,0x3f9c, 0xb388,0x0e06
        DCW 0x2931,0xc31c, 0xc703,0x3fa7, 0xb422,0x0d41
        DCW 0x2aaa,0xc2c1, 0xc695,0x3fb1, 0xb4be,0x0c7c
        DCW 0x2c21,0xc26d, 0xc627,0x3fbb, 0xb55e,0x0bb7
        DCW 0x2d93,0xc21d, 0xc5ba,0x3fc4, 0xb600,0x0af1
        DCW 0x2f02,0xc1d3, 0xc54e,0x3fcc, 0xb6a5,0x0a2b
        DCW 0x306c,0xc18e, 0xc4e2,0x3fd4, 0xb74d,0x0964
        DCW 0x31d2,0xc14f, 0xc476,0x3fdb, 0xb7f8,0x089d
        DCW 0x3334,0xc115, 0xc40c,0x3fe1, 0xb8a6,0x07d6
        DCW 0x3492,0xc0e0, 0xc3a1,0x3fe7, 0xb956,0x070e
        DCW 0x35eb,0xc0b1, 0xc338,0x3fec, 0xba09,0x0646
        DCW 0x373f,0xc088, 0xc2cf,0x3ff1, 0xbabf,0x057e
        DCW 0x388e,0xc064, 0xc266,0x3ff5, 0xbb77,0x04b5
        DCW 0x39d9,0xc045, 0xc1fe,0x3ff8, 0xbc32,0x03ed
        DCW 0x3b1e,0xc02c, 0xc197,0x3ffb, 0xbcf0,0x0324
        DCW 0x3c5f,0xc019, 0xc130,0x3ffd, 0xbdb0,0x025b
        DCW 0x3d9a,0xc00b, 0xc0ca,0x3fff, 0xbe73,0x0192
        DCW 0x3ed0,0xc003, 0xc065,0x4000, 0xbf38,0x00c9
        
       END
;******************* (C) COPYRIGHT 2009  STMicroelectronics *****END OF FILE****