102 lines
2.0 KiB
C
102 lines
2.0 KiB
C
/*!
|
|
\file gd32f4xx_crc.c
|
|
\brief CRC driver
|
|
*/
|
|
|
|
/*
|
|
Copyright (C) 2016 GigaDevice
|
|
|
|
2016-08-15, V1.0.0, firmware for GD32F4xx
|
|
*/
|
|
|
|
#include "gd32f4xx_crc.h"
|
|
|
|
/*!
|
|
\brief deinit CRC calculation unit
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval none
|
|
*/
|
|
void crc_deinit(void)
|
|
{
|
|
CRC_DATA = (uint32_t)0xFFFFFFFFU;
|
|
CRC_FDATA = (uint32_t)0x00000000U;
|
|
CRC_CTL = CRC_CTL_RST;
|
|
}
|
|
|
|
/*!
|
|
\brief reset data register to the value of initializaiton data register
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval none
|
|
*/
|
|
void crc_data_register_reset(void)
|
|
{
|
|
CRC_CTL |= (uint32_t)CRC_CTL_RST;
|
|
}
|
|
|
|
/*!
|
|
\brief read the data register
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval 32-bit value of the data register
|
|
*/
|
|
uint32_t crc_data_register_read(void)
|
|
{
|
|
uint32_t data;
|
|
data = CRC_DATA;
|
|
return (data);
|
|
}
|
|
|
|
/*!
|
|
\brief read the free data register
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval 8-bit value of the free data register
|
|
*/
|
|
uint8_t crc_free_data_register_read(void)
|
|
{
|
|
uint8_t fdata;
|
|
fdata = (uint8_t)CRC_FDATA;
|
|
return (fdata);
|
|
}
|
|
|
|
/*!
|
|
\brief write the free data register
|
|
\param[in] free_data: specify 8-bit data
|
|
\param[out] none
|
|
\retval none
|
|
*/
|
|
void crc_free_data_register_write(uint8_t free_data)
|
|
{
|
|
CRC_FDATA = (uint32_t)free_data;
|
|
}
|
|
|
|
/*!
|
|
\brief CRC calculate a 32-bit data
|
|
\param[in] sdata: specify 32-bit data
|
|
\param[out] none
|
|
\retval 32-bit CRC calculate value
|
|
*/
|
|
uint32_t crc_single_data_calculate(uint32_t sdata)
|
|
{
|
|
CRC_DATA = sdata;
|
|
return (CRC_DATA);
|
|
}
|
|
|
|
/*!
|
|
\brief CRC calculate a 32-bit data array
|
|
\param[in] array: pointer to an array of 32 bit data words
|
|
\param[in] size: size of the array
|
|
\param[out] none
|
|
\retval 32-bit CRC calculate value
|
|
*/
|
|
uint32_t crc_block_data_calculate(uint32_t array[], uint32_t size)
|
|
{
|
|
uint32_t index;
|
|
for(index = 0U; index < size; index++){
|
|
CRC_DATA = array[index];
|
|
}
|
|
return (CRC_DATA);
|
|
}
|