133 lines
3.2 KiB
C
133 lines
3.2 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @file ciu32l051_std_crc.c
|
|||
|
* @author MCU Ecosystem Development Team
|
|||
|
* @brief CRC STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* ʵ<EFBFBD><EFBFBD>CRC<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õȹ<EFBFBD><EFBFBD><EFBFBD>API<EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
* @attention
|
|||
|
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup CIU32L051_STD_Driver
|
|||
|
* @{
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @addtogroup CRC
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/*------------------------------------------includes--------------------------------------------*/
|
|||
|
#include "ciu32l051_std.h"
|
|||
|
|
|||
|
#ifdef STD_CRC_PERIPHERAL_USED
|
|||
|
|
|||
|
/*-------------------------------------------functions------------------------------------------*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup CRC_External_Functions
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @brief CRC<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @param crc_init_param CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_crc_init(std_crc_init_t *crc_init_param)
|
|||
|
{
|
|||
|
/* <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ʽ */
|
|||
|
MODIFY_REG(CRC->CSR, CRC_CSR_POLY_SIZE, (crc_init_param->poly_sel));
|
|||
|
|
|||
|
/* <20><><EFBFBD>ó<EFBFBD>ʼֵ */
|
|||
|
if (crc_init_param->set_iv_flag == CRC_USE_INIT_VALUE)
|
|||
|
{
|
|||
|
std_crc_set_init_value(crc_init_param->init_value);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
std_crc_set_init_value_invert(crc_init_param->poly_sel, crc_init_param->init_value);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief CRCȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_crc_deinit(void)
|
|||
|
{
|
|||
|
/* <20><>λCRC */
|
|||
|
std_rcc_ahb_reset(RCC_PERIPH_RESET_CRC);
|
|||
|
|
|||
|
/* <20>ر<EFBFBD>CRCʱ<43><CAB1> */
|
|||
|
std_rcc_ahb_clk_disable(RCC_PERIPH_CLK_CRC);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRC<EFBFBD>ṹ<EFBFBD><EFBFBD>ΪĬ<EFBFBD><EFBFBD>ֵ
|
|||
|
* @param crc_init_struct CRC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_crc_struct_init(std_crc_init_t *crc_init_struct)
|
|||
|
{
|
|||
|
crc_init_struct->poly_sel = CRC_POLY_32;
|
|||
|
crc_init_struct->init_value = CRC_DEFAULT_INIT_VALUE;
|
|||
|
crc_init_struct->set_iv_flag = CRC_USE_INIT_VALUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>CRC<EFBFBD><EFBFBD>ʼֵ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param poly_sel <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽѡ<EFBFBD><EFBFBD>
|
|||
|
* @param init_value <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_crc_set_init_value_invert(uint32_t poly_sel, uint32_t init_value)
|
|||
|
{
|
|||
|
uint32_t index, temp;
|
|||
|
uint32_t result = 0;
|
|||
|
|
|||
|
/* <20><>ʼֵ<CABC><D6B5>λ<EFBFBD><CEBB>ת */
|
|||
|
for (index = 0U; index < 4; index++)
|
|||
|
{
|
|||
|
temp = (init_value >> (8U * index));
|
|||
|
temp = (((temp & 0x55) << 1) | ((temp & 0xaa) >> 1));
|
|||
|
temp = (((temp & 0x33) << 2) | ((temp & 0xcc) >> 2));
|
|||
|
temp = (((temp & 0x0f) << 4) | ((temp & 0xf0) >> 4));
|
|||
|
result |= (temp << (8U * (3 - index)));
|
|||
|
}
|
|||
|
|
|||
|
if (poly_sel == CRC_POLY_16)
|
|||
|
{
|
|||
|
result >>= 16;
|
|||
|
}
|
|||
|
CRC->RDR = result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
#endif /* STD_CRC_PERIPHERAL_USED */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|