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

📄 pulse_src.c

📁 TDK 6521 SOC 芯片 DEMO程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************
 * This code and information is provided "as is" without warranty of any   *
 * kind, either expressed or implied, including but not limited to the     *
 * implied warranties of merchantability and/or fitness for a particular   *
 * purpose.                                                                *
 *                                                                         *
 * Copyright (C) 2005 Teridian SemiConductor, Corporation.
 * All Rights Reserved.
 *                                                                         *
 ***************************************************************************/
//**************************************************************************
//  DESCRIPTION: 71M65xx POWER METER - Pulse Source support.
// 
//  AUTHOR:  MTF
//
//  HISTORY: See end of file
//**************************************************************************
// File: PULSE_SRC.C 
//
#include "options.h"
#if PULSE_SOURCE
#include "meter.h"
#include "mmath.h"  // labs()
#include "pulse_src.h"
#include "psoft.h"

#define ZERO 0L

// Functions that will fetch or calculate the pulse sources for the LEDs.
static const int32_t (* code PulseSrcfunc[]) (void) =
{
    WSum_src,   W0_src,   W1_src,   W2_src,  
    VARSum_src, VAR0_src, VAR1_src, VAR2_src,
    VASum_src,  VA0_src,  VA1_src,  VA2_src, 

    Insq_src,    I0sq_src,  I1sq_src,  I2sq_src, 
    V0sq_src,    V1sq_src,  V2sq_src,

    WSum_Isrc,   W0_Isrc,   W1_Isrc,   W2_Isrc,    
    VARSum_Isrc, VAR0_Isrc, VAR1_Isrc, VAR2_Isrc,  
    VASum_Isrc,  VA0_Isrc,  VA1_Isrc,  VA2_Isrc, 

    WSum_Esrc,   W0_Esrc,   W1_Esrc,   W2_Esrc,    
    VARSum_Esrc, VAR0_Esrc, VAR1_Esrc, VAR2_Esrc,  
    VASum_Esrc,  VA0_Esrc,  VA1_Esrc,  VA2_Esrc 
};

#define INTERNAL (sizeof (PulseSrcfunc) / 2)

/*** Private functions declared within this module ***/
// generic pulse source; depends on type of meter...
static int32_t PulseSrcG (int32i_t isqsum, int32_t sum) small reentrant;
#if EXPORT
static int32_t PulseSrcE (int32i_t isqsum, int32_t sum) small reentrant;
#endif
#if IMPORT
static int32_t PulseSrcI (int32i_t isqsum, int32_t sum) small reentrant;
#endif

//===========================================================================//
void SelectPulses (void)
{
    if (PulseWSource < INTERNAL)        // Fetch the correct pulse data.
         memset_ce (&apulsew, (*PulseSrcfunc[ PulseWSource ]) ());

    if (PulseRSource < INTERNAL)
         memset_ce (&apulser, (*PulseSrcfunc[ PulseRSource ]) ());

    #if PULSE_SOFT                    // Fetch the correct pulse data.
    psoft_update((*PulseSrcfunc[ Pulse3Source ]) (),
                 (*PulseSrcfunc[ Pulse4Source ]) ());
    #endif
}

//===========================================================================//
// These are the routines that fetch values for pulsing an LED.
int32_t WSum_src (void)                // Net power pulse sources.
{
    #if WATT_ELEMENT
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcG (i0sqsum, w0sum) : PulseSrcG (i1sqsum, w1sum));
    #else
    return (
    PulseSrcG (i0sqsum, w0sum)
    #if PHASE_B_PRESENT
    + PulseSrcG (i1sqsum, w1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcG (i2sqsum, w2sum)
    #endif
    );
    #endif
    #else
    return (ZERO);
    #endif
}

int32_t W0_src (void)
{
#if WATT_ELEMENT
    return (PulseSrcG (i0sqsum, w0sum));
#else
    return (ZERO);
#endif
}

int32_t W1_src (void)
{
#if WATT_ELEMENT && PHASE_B_PRESENT
    return (PulseSrcG (i1sqsum, w1sum));
#else
    return (ZERO);
#endif
}

int32_t W2_src (void)
{
#if WATT_ELEMENT && PHASE_C_PRESENT
    return (PulseSrcG (i2sqsum, w2sum));
#else
    return (ZERO);
#endif
}

//---------------------------------------------------------------------------//
int32_t VARSum_src(void)
{
#if VAR_ELEMENT
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcG (i0sqsum, var0sum) : PulseSrcG (i1sqsum, var1sum));
    #else
    return (
    PulseSrcG (i0sqsum, var0sum)
    #if PHASE_B_PRESENT
    + PulseSrcG (i1sqsum, var1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcG (i2sqsum, var2sum) 
    #endif
    );
    #endif
#else
    return (ZERO);
#endif
}

int32_t VAR0_src   (void)
{
#if VAR_ELEMENT
    return ( PulseSrcG (i0sqsum, var0sum));
#else
    return (ZERO);
#endif
}

int32_t VAR1_src   (void)
{
#if VAR_ELEMENT && PHASE_B_PRESENT
    return ( PulseSrcG (i1sqsum, var1sum));
#else
    return (ZERO);
#endif
}

int32_t VAR2_src   (void)
{
#if VAR_ELEMENT && PHASE_C_PRESENT
    return ( PulseSrcG (i2sqsum, var2sum));
#else
    return (ZERO);
#endif
}

//---------------------------------------------------------------------------//
int32_t VASum_src (void)
{
#if VA_ELEMENT
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcG (i0sqsum, va0sum) : PulseSrcG (i1sqsum, va1sum));
    #else
    return (
    PulseSrcG (i0sqsum, va0sum)
    #if PHASE_B_PRESENT
    + PulseSrcG (i1sqsum, va1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcG (i2sqsum, va2sum)
    #endif
    );
    #endif
#else
    return (ZERO);
#endif
}

int32_t VA0_src (void)
{
#if VA_ELEMENT
    return ( PulseSrcG (i0sqsum, va0sum));
#else
    return (ZERO);
#endif
}

int32_t VA1_src (void)
{
#if VA_ELEMENT && PHASE_B_PRESENT
    return ( PulseSrcG (i1sqsum, va1sum));
#else
    return (ZERO);
#endif
}

int32_t VA2_src (void)
{
#if VA_ELEMENT && PHASE_C_PRESENT
    return ( PulseSrcG (i2sqsum, va2sum));
#else
    return (ZERO);
#endif
}

//===========================================================================//
// Net power pulse sources.
int32_t WSum_Isrc (void)
{
#if IMPORT && WATT_SUMS
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcI (i0sqsum, w0sum) : PulseSrcI (i1sqsum, w1sum));
    #else
    return (
    PulseSrcI (i0sqsum, w0sum)
    #if PHASE_B_PRESENT
    + PulseSrcI (i1sqsum, w1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcI (i2sqsum, w2sum)
    #endif
    );
    #endif
#else
    return (ZERO);
#endif // WATT_SUMS & IMPORT.
}

int32_t W0_Isrc (void)
{
#if IMPORT && WATT_ELEMENT
    return (PulseSrcI (i0sqsum, w0sum));
#else
    return (ZERO);
#endif
}

int32_t W1_Isrc (void)
{
#if IMPORT && WATT_ELEMENT && PHASE_B_PRESENT
    return (PulseSrcI (i1sqsum, w1sum));
#else
    return (ZERO);
#endif
}

int32_t W2_Isrc (void)
{
#if IMPORT && WATT_ELEMENT && PHASE_C_PRESENT
    return (PulseSrcI (i2sqsum, w2sum));
#else
    return (ZERO);
#endif
}

//---------------------------------------------------------------------------//
int32_t VARSum_Isrc(void)
{
#if IMPORT && VAR_SUMS
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcI (i0sqsum, var0sum) : PulseSrcI (i1sqsum, var1sum));
    #else
    return (
    PulseSrcI (i0sqsum, var0sum)
    #if PHASE_B_PRESENT
    + PulseSrcI (i1sqsum, var1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcI (i2sqsum, var2sum)
    #endif
    );
    #endif
#else
    return (ZERO);
#endif
}

int32_t VAR0_Isrc   (void)
{
#if IMPORT && VAR_ELEMENT
    return (PulseSrcI (i0sqsum, var0sum));
#else
    return (ZERO);
#endif
}

int32_t VAR1_Isrc   (void)
{
#if IMPORT && VAR_ELEMENT && PHASE_B_PRESENT
    return (PulseSrcI (i1sqsum, var1sum));
#else
    return (ZERO);
#endif
}

int32_t VAR2_Isrc   (void)
{
#if IMPORT && VAR_ELEMENT && PHASE_C_PRESENT
    return (PulseSrcI (i2sqsum, var2sum));
#else
    return (ZERO);
#endif
}

//---------------------------------------------------------------------------//
int32_t VASum_Isrc (void)
{
#if IMPORT && VA_SUMS
    #if EQUATION == _1ELEMENT_2WIRE 
    return ((i0sqsum > i1sqsum) 
            ? PulseSrcI (i0sqsum, va0sum) : PulseSrcI (i1sqsum, va1sum));
    #else
    return (
    PulseSrcI (i0sqsum, va0sum)
    #if PHASE_B_PRESENT
    + PulseSrcI (i1sqsum, va1sum)
    #endif
    #if PHASE_C_PRESENT
    + PulseSrcI (i2sqsum, va2sum)
    #endif
    );
    #endif
#else
    return (ZERO);
#endif
}

int32_t VA0_Isrc (void)
{
#if IMPORT && VA_ELEMENT
    return (PulseSrcI (i0sqsum, va0sum));
#else
    return (ZERO);
#endif
}

int32_t VA1_Isrc (void)
{
#if IMPORT && VA_ELEMENT && PHASE_B_PRESENT
    return (PulseSrcI (i1sqsum, va1sum));
#else
    return (ZERO);
#endif
}

int32_t VA2_Isrc (void)
{
#if IMPORT && VA_ELEMENT && PHASE_C_PRESENT
    return (PulseSrcI (i2sqsum, va2sum));
#else
    return (ZERO);
#endif
}

//===========================================================================//
// Export power pulse sources.
int32_t WSum_Esrc (void)
{
#if EXPORT && WATT_SUMS

⌨️ 快捷键说明

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