180 lines
5.0 KiB
C
180 lines
5.0 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @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 */
|