/***************************************************************
 *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
 *文件名：
 *作  者:  Liut
 *版  本:  V1.00
 *日  期:  2017/07/14
 *描  述：
 *备  注：  适用于 ES8P508x芯片
 本软件仅供学习和演示使用，对用户直接引用代码所带来的风险或后果不承担任何法律责任。
 ***************************************************************/
#include "lib_crc.h"

/***************************************************************
 函数名：CRC_getTypeValue
 描  述：配置并返回一个CRC_CON配置参数
 输入值：con_value CRC_CON 数据配置值结构体
 返回值：CRC_CON配置值
***************************************************************/
uint32_t CRC_getTypeValue(CRC_CONValueStruType con_value)
{
    uint32_t type = 0;
    type = ((int)con_value.xorout | (int)con_value.refout | (int)con_value.refin |
            (int)con_value.mode | (int)con_value.hs_type | (int)con_value.init_data_type);
    return type;
}

/***************************************************************
 函数名：CRC_EmptayCheck
 描  述：查空函数
 输入值：address: 查空区域首地址， data_len：查空区域字节长度
 返回值：1：成功，0 ：失败
***************************************************************/
uint32_t CRC_EmptayCheck(void *address, uint32_t data_len)
{
    CRC_EM CRC_EmptayCheck = (CRC_EM)(*(uint32_t *)CRC_EmptayCheck_addr);

    uint32_t result;
    __ASM("CPSID i");
    result = (*CRC_EmptayCheck)(address, data_len);
    __ASM("CPSIE i");
    return result;
}

/***************************************************************
 函数名：CRC_FlashVerify
 描  述：FLASH校验函数
 输入值：address: 校验区域首地址， data_len：校验区域字节长度， type:校验方式配置
 返回值：CRC校验码
***************************************************************/
uint32_t CRC_FlashVerify(void *address, uint32_t data_len, uint32_t type)
{
    CRC_FL CRC_FlashVerify = (CRC_FL)(*(uint32_t *)CRC_FlashVerify_addr);

    uint32_t result;
    __ASM("CPSID i");
    result = (*CRC_FlashVerify)(address, data_len, type);
    __ASM("CPSIE i");
    return result;
}

/***************************************************************
 函数名：CRC_UserCal
 描  述：用户数据校验函数
 输入值：address: 用户校验数据首地址， data_len：校验区域字节长度， type:校验方式配置
 返回值：CRC校验码
***************************************************************/
uint32_t CRC_UserCal(void *address, uint32_t data_len, uint32_t type)
{
    CRC_US CRC_UserCal = (CRC_US)(*(uint32_t *)CRC_UserCal_addr);

    uint32_t result;
    __ASM("CPSID i");
    result = (*CRC_UserCal)(address, data_len, type);
    __ASM("CPSIE i");
    return  result;
}

/***************************************************************
 函数名：CRC_CheckReset
 描  述：CRC复位查询函数
 输入值：无
 返回值：复位标志，1：有复位标志，0：无复位标志
***************************************************************/
uint32_t CRC_CheckReset(void)
{
    CRC_CH CRC_CheckReset = (CRC_CH)(*(uint32_t *)CRC_CheckReset_addr);

    uint32_t result;
    __ASM("CPSID i");
    result = (*CRC_CheckReset)();
    __ASM("CPSIE i");
    return result;
}

/************************END OF FILE**************************/

