58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
#include <crc32.h>
|
|
#include <pmu_device.h>
|
|
|
|
|
|
#if 0
|
|
/*************Software CRC32**************************/
|
|
static uint32_t CRC32_Table[256U];
|
|
|
|
void CRC32_Init(void)
|
|
{
|
|
uint32_t c;
|
|
|
|
for (uint32_t i = 0U; i < 256U; i++) {
|
|
c = i;
|
|
for (uint32_t j = 0U; j < 8U; j++) {
|
|
if ((c & 0x01U)!= 0U){
|
|
c = 0xEDB88320UL ^ (c >> 1U);
|
|
}else{
|
|
c = c >> 1U;
|
|
}
|
|
}
|
|
CRC32_Table[i] = c;
|
|
}
|
|
}
|
|
uint32_t CRC32_GetRunTimeCRC32(uint8_t *pBuf ,uint16_t length)
|
|
{
|
|
uint32_t retCRCValue = 0xFFFFFFFFU;
|
|
for (uint16_t i = 0; i < length; i++){
|
|
retCRCValue=CRC32_Table[(retCRCValue ^ pBuf[i]) & 0xFFU] ^ (retCRCValue >> 8U);
|
|
}
|
|
return (retCRCValue^0xFFFFFFFFU);
|
|
}
|
|
|
|
#else
|
|
|
|
/*************Hardwarre CRC32**************************/
|
|
void CRC32_Init(void)
|
|
{
|
|
CRGA_SFRS->MODULERSTREQ = MODUE_SOFT_RESET_CRC;
|
|
}
|
|
|
|
uint32_t CRC32_GetRunTimeCRC32(uint8_t *pBuf ,uint16_t length)
|
|
{
|
|
uint32_t retCRCValue;
|
|
CRC_SFRS->CRCCR.REVIN = 1U;
|
|
CRC_SFRS->CRCCR.REVOUT = 1U;
|
|
CRC_SFRS->CRCINIT = 0xFFFFFFFFU;
|
|
for (uint16_t i = 0; i < length; i++){
|
|
CRC_SFRS->CRCDR.CRCDATA0 = pBuf[i];
|
|
}
|
|
retCRCValue = CRC_SFRS->CRCDR.WORD;
|
|
return (retCRCValue^0xFFFFFFFFU);
|
|
}
|
|
|
|
#endif
|
|
|
|
|