CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_crc.h

180 lines
5.0 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_crc.h
* @author MCU Ecosystem Development Team
* @brief CRC STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>CRC<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/* <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD> */
#ifndef CIU32L051_STD_CRC_H
#define CIU32L051_STD_CRC_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup CRC CRC
* @brief ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup CRC_Types CRC Types
* @brief CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
/**
* @brief CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
uint32_t poly_sel; /**< CRC<52><43><EFBFBD><EFBFBD>ʽѡ<CABD><D1A1>
@arg CRC_POLY_16
@arg CRC_POLY_32 */
uint32_t set_iv_flag; /**< <20><>ʼֵ<CABC><D6B5><EFBFBD>ñ<EFBFBD>־
@arg CRC_USE_INIT_VALUE_INVERT <EFBFBD><EFBFBD>ʼֵ<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ת
@arg CRC_USE_INIT_VALUE <EFBFBD><EFBFBD>ʼֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ת */
uint32_t init_value; /**< <20><>ʼֵ */
} std_crc_init_t;
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup CRC_Constants CRC Constants
* @brief CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/* CRC<52><43><EFBFBD><EFBFBD>ʽѡ<CABD><D1A1> */
#define CRC_POLY_16 CRC_CSR_POLY_SIZE_16 /**< 16λ<36><CEBB><EFBFBD><EFBFBD>ʽ */
#define CRC_POLY_32 CRC_CSR_POLY_SIZE_32 /**< 32λ<32><CEBB><EFBFBD><EFBFBD>ʽ */
/* CRCĬ<43>ϳ<EFBFBD>ʼֵ */
#define CRC_DEFAULT_INIT_VALUE (0xFFFFFFFFU) /**< CRCĬ<43>ϳ<EFBFBD>ʼֵ */
/* CRC<52><43>ʼֵ<CABC><D6B5>־ */
#define CRC_USE_INIT_VALUE_INVERT (0x00000000U) /**< <20><>ʼֵ<CABC><D6B5><EFBFBD>з<EFBFBD>ת */
#define CRC_USE_INIT_VALUE (0x00000001U) /**< <20><>ʼֵ<CABC><D6B5><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ת */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup CRC_External_Functions CRC External Functions
* @brief CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param poly_size <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽѡ<EFBFBD><EFBFBD>
* @arg CRC_POLY_16<EFBFBD><EFBFBD>16λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @arg CRC_POLY_32<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_crc_set_poly_size(uint32_t poly_size)
{
MODIFY_REG(CRC->CSR, CRC_CSR_POLY_SIZE, poly_size);
}
/**
* @brief <EFBFBD><EFBFBD>CRC<EFBFBD><EFBFBD>ʼֵδ<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>תֱ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
* @param init_value CRC<EFBFBD>ij<EFBFBD>ʼֵ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_crc_set_init_value(uint32_t init_value)
{
CRC->RDR = init_value;
}
/**
* @brief <EFBFBD><EFBFBD>ȡCRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_crc_get_value(void)
{
return(CRC->RDR);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param input_data Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_crc_set_byte(uint8_t input_data)
{
CRC->DR = (uint32_t)input_data;
}
/**
* @brief <EFBFBD><EFBFBD>ȡCRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
* @retval bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>жϽ<EFBFBD><EFBFBD><EFBFBD>
* @arg true<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ǰCRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
* @arg false<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ǰCRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE bool std_crc_get_check_flag(void)
{
return((CRC->CSR & CRC_CSR_CHK_FLAG) == CRC_CSR_CHK_FLAG);
}
void std_crc_deinit(void);
void std_crc_init(std_crc_init_t *crc_init_param);
void std_crc_struct_init(std_crc_init_t *crc_init_struct);
void std_crc_set_init_value_invert(uint32_t poly_sel, uint32_t init_value);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_CRC_H */