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

📄 library.c

📁 TDK 6521 SOC 芯片 DEMO程序
💻 C
字号:
/***************************************************************************
 * 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 Corp. All Rights Reserved.    *
 ***************************************************************************/
//**************************************************************************
//  DESCRIPTION: 71M652x POWER METER - Library Routines.
//
//  AUTHOR:  MTF
//
//  HISTORY: See end of file.
//**************************************************************************
// File: LIBRARY.C
//
#include "options.h"
#include "library.h" // public functions declared in this module

/*** External functions used within this module ***/
// None.

/*** External variables used within this module ***/
// None.

/*** Public functions declared within this module ***/
// See in library.h

/*** Public variables declared within this module ***/
// None.

/*** Private functions declared within this module ***/
// None.

/*** Private variables declared within this module ***/
// None.

#pragma save
#pragma NOAREGS
void memset_x (uint8x_t *dst, uint8_t s, uint16_t len) small reentrant
{
    while (len--)
       *dst++ = s;
}
#pragma restore

#pragma save
#pragma NOAREGS
void memcpy_xx (uint8x_t *dst, uint8x_t *src, uint16_t len) small reentrant
{                                       // Handles overlapped data.
    if ((dst < src) || ((src + len - 1) < dst))
    {                                   // Copy from beginning of buffers.
       --dst;   --src;
       while (len--)
          *(++dst) = *(++src);
    }
    else
    {
       src += len;                      // Copy from end of buffers.
       dst += len;
       while (len--)
          *(--dst) = *(--src);
     }
}
#pragma restore

#pragma save
#pragma NOAREGS
void memcpy_xr (uint8x_t *dst, uint8r_t *src, uint16_t len) small reentrant
{                                       // Copy CE_CODE image to RAM.
    while (len--)
       *dst++ = *src++;
}
#pragma restore

#if (EQUATION != _1ELEMENT_3WIRE) && (POWER_FACTOR || WATT_SUMS || VAR_SUMS || VA_SUMS || AUTOCAL)
#pragma save
#pragma NOAREGS
void memcpy_px (uint8p_t *dst, uint8x_t *src, uint8_t len) small reentrant
{
    while (len--)
       *dst++ = *src++;
}
#pragma restore
#endif // VA_ELEMENT/VA_SUMS/MATH_FAST.

#pragma save
#pragma NOAREGS
void memcpy_xp (uint8x_t *dst, uint8p_t *src, uint8_t len) small reentrant
{
    while (len--)
       *dst++ = *src++;
}
#pragma restore

#if FLASH || (CAL_SAVE && (NV_SELECT == NV_FLASH))
#pragma save
#pragma NOAREGS
int8_t memcmp_rx (uint8r_t *rsrc, uint8x_t *xsrc, uint16_t len) small reentrant
{
    while (len--)
    {                                   // while not a do-while, to handle len = 0 input.
       if (*rsrc != *xsrc) break;

       rsrc++;  xsrc++;
    }

    if (len + 1)                        // len is -1 is buffers matched.
    {
       if (*rsrc > *xsrc)
          return (1);
       else
          return (-1);
    }
    else
       return (0);
}
#pragma restore
#endif // FLASH.

#if EXTRAS  || ROM
#pragma save
#pragma NOAREGS
int8_t memcmp_xx (uint8x_t *xsrc1, uint8x_t *xsrc2, uint16_t len) small reentrant
{
    while (len--)                       // while not a do-while, to handle len = 0 input.
    {
       if (*xsrc1 != *xsrc2) break;

       xsrc1++;  xsrc2++;
    }

    if (len + 1)                        // len is -1 if buffers matched.
    {
       if (*xsrc1 > *xsrc2)
          return (1);
       else
          return (-1);
    }
    else
       return (0);
}
#pragma restore
#endif // EXTRAS.

#if 0
#if VA_ELEMENT || VA_SUMS   || RMS_VALUES || CALIBRATION
#pragma save
#pragma NOAREGS
int8_t memcmp_px (uint8p_t *psrc, uint8x_t *xsrc, uint16_t len) small reentrant
{
    while (len--)                       // while not a do-while, to handle len = 0 input.
    {
       if (*psrc != *xsrc) break;

       psrc++;  xsrc++;
    }

    if (len + 1)                        // len is -1 if buffers matched.
    {
       if (*psrc > *xsrc)
          return (1);
       else
          return (-1);
    }
    else
       return (0);
}
#pragma restore
#endif // VA_ELEMENT/VA_SUMS/RMS_VALUES.
#endif

#if EXTRAS
#pragma save
#pragma NOAREGS
uint16_t strlen_x (uint8x_t *src) small reentrant
{
    uint16_t l = 1;

    while (*src++ && l)
       l++;

    return (l - 1);
}
#pragma restore
#endif

#if CLI
#pragma save
#pragma NOAREGS
uint16_t strlen_r (uint8r_t *src) small reentrant
{
    uint16_t l = 1;

    while (*src++ && l)
       l++;

    return (l - 1);
}
#pragma restore
#endif

#pragma save
#pragma NOAREGS
// this is a small reentrant in case it is called as part of the error
// recording in a sag
bool LRC_Calc_NVR (uint8x_t *ptr, uint16_t len, uint8_t set) small reentrant
{
    uint8_t LRC;

    if (set)
        --len;                          // Do not include LRC is calculation.

    LRC = 0x55;
    for(; len != 0; --len)
    {
        LRC ^= *ptr++;
    }

    if (set)
    {
        *ptr = LRC;             // Store complement of LRC.
        LRC ^= *ptr;
    }

    return (LRC == 0);
}
#pragma restore

/***************************************************************************
 * History                                                                 *
 * $Log: library.c,v $
 * Revision 1.28  2006/09/10 00:30:14  Michael T. Fischer
 * First version to support DGM0915 LCD.
 *
 * Revision 1.27  2006/09/09 01:15:23  gmikef
 * *** empty log message ***
 *
 * Revision 1.26  2006/09/06 02:27:05  tvander
 * Clean build
 *
 * Revision 1.25  2006/06/29 00:58:44  tvander
 * Added NOAREGs to reentrant code.
 *
 * Revision 1.24  2006/06/14 02:47:45  tvander
 * memset_x is reentrant, originally for reentrant clear of LCD display.
 *
 * Revision 1.23  2006/06/06 05:15:57  tvander
 * clean build
 *
 * Revision 1.22  2006/04/17 19:17:57  tvander
 * Arranged for memcpy_px and _xp to be included when needed, and not when not.
 *
 * Revision 1.21  2006/03/08 00:10:53  tvander
 * Clean build
 *
 * Revision 1.20  2006/03/06 03:42:19  Michael T. Fischer
 * More 6530 prep.
 *
 * Revision 1.19  2006/03/03 11:31:25  Michael T. Fischer
 * Prep for 6530 LCD, etc.
 *
 * Revision 1.18  2006/01/10 04:12:06  gmikef
 * Added PDATA support for CE Outputs.
 *
 * Revision 1.17  2006/01/04 04:47:56  gmikef
 * Switched RMS and VA calculations to use floating point. (and Calibration).
 *
 * Revision 1.16  2005/12/23 01:28:22  tvander
 * Fixed compile errors
 *
 * Revision 1.14  2005/10/28 02:23:38  gmikef
 * *** empty log message ***
 *
 * Revision 1.13  2005/10/12 23:00:07  tvander
 * Includes demonstratable mission mode, brownout, LCD and sleep modes
 *
 * Revision 1.12  2005/09/22 23:45:26  tvander
 * Clean build all models and unit tests, updated copyright to be fore Teridian
 *
 * Revision 1.11  2005/09/12 07:47:31  tvander
 * Power measurement is stable, with no creep.
 * VARh measurement is stable, with no creep.
 * Pulse sources work.
 * Full access to MPU variables.
 * Rolled date.
 * Clock software works.
 *
 * Revision 1.10  2005/08/31 05:58:22  gmikef
 * First version w/ LAPIE interface.
 *
 * Revision 1.9  2005/08/30 18:23:15  gmikef
 * *** empty log message ***
 *
 * Revision 1.8  2005/08/10 02:05:33  gmikef
 * *** empty log message ***
 *
 * Revision 1.7  2005/05/04 01:00:18  gmikef
 * *** empty log message ***
 *
 * Revision 1.14  2005/05/03 02:18:55  gmikef
 * *** empty log message ***
 *
 * Revision 1.13  2005/05/02 18:03:19  gmikef
 * *** empty log message ***
 *
 * Revision 1.6  2005/04/30 02:18:35  gmikef
 * *** empty log message ***
 *
 * Revision 1.5  2005/04/28 19:12:26  tvander
 * Comments only!  Restored history comments.
 *
 * Revision 1.4  2005/04/27 23:46:53  gmikef
 * Some MATH rountines now use 'idata'.
 * Added MATH_FAST flag to 'options.h".
 * Changed "6521B.Uv2" to max optimization.
 *
 * Revision 1.3  2005/04/21 02:07:01  gmikef
 * *** empty log message ***
 *
 * Revision 1.2  2005/04/12 21:53:34  tvander
 * Library and math, compiles ok, added some comments (needs more)
 *
 * Revision 1.1  2005/04/09 02:29:42  gmikef
 * *** empty log message ***
 *
 * Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved.    *
 * this program is fully protected by the United States copyright          *
 * laws and is the property of Teridian Semiconductor Corporation.         *
 ***************************************************************************/

⌨️ 快捷键说明

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