60 lines
2.4 KiB
C
60 lines
2.4 KiB
C
#ifndef __SWM341_CRC_H__
|
||
#define __SWM341_CRC_H__
|
||
|
||
|
||
typedef struct {
|
||
uint32_t init_crc; // 初始值
|
||
uint8_t Poly; // CRC多项式,可取值CRC_POLY_11021、CRC_POLY_107、CRC_POLY_18005、CRC_POLY_104C11DB7
|
||
uint8_t in_width; // 输入数据宽度,可取值CRC_WIDTH_32、CRC_WIDTH_16、CRC_WIDTH_8
|
||
uint8_t in_rev; // 输入数据翻转,可取值CRC_REV_NOT、CRC_REV_ALL、CRC_REV_IN_BYTE、CRC_REV_BYTE
|
||
bool in_not; // 输入数据取反
|
||
uint8_t out_rev; // 输出结果翻转,可取值CRC_REV_NOT、CRC_REV_ALL、CRC_REV_IN_BYTE、CRC_REV_BYTE
|
||
bool out_not; // 输出结果取反
|
||
} CRC_InitStructure;
|
||
|
||
|
||
#define CRC_POLY_11021 0 // x^16+x^12+x^5+1
|
||
#define CRC_POLY_107 1 // x^8+x^2+x+1
|
||
#define CRC_POLY_18005 2 // x^16+x^15+x^2+1
|
||
#define CRC_POLY_104C11DB7 3 // x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1
|
||
|
||
#define CRC_WIDTH_32 0
|
||
#define CRC_WIDTH_16 1
|
||
#define CRC_WIDTH_8 2
|
||
|
||
#define CRC_REV_NOT 0 // bit顺序不变
|
||
#define CRC_REV_ALL 1 // bit顺序完全翻转
|
||
#define CRC_REV_IN_BYTE 2 // bit顺序字节内翻转
|
||
#define CRC_REV_BYTE 3 // 仅字节顺序翻转
|
||
|
||
|
||
void CRC_Init(CRC_TypeDef * CRCx, CRC_InitStructure * initStruct);
|
||
void CRC_SetInitVal(CRC_TypeDef * CRCx, uint32_t init_crc);
|
||
|
||
|
||
/******************************************************************************************************************************************
|
||
* 函数名称: CRC_Write()
|
||
* 功能说明: CRC写入数据
|
||
* 输 入: uint32_t data 要写入的数据
|
||
* 输 出: 无
|
||
* 注意事项: 无
|
||
******************************************************************************************************************************************/
|
||
static __INLINE void CRC_Write(uint32_t data)
|
||
{
|
||
CRC->DATAIN = data;
|
||
}
|
||
|
||
/******************************************************************************************************************************************
|
||
* 函数名称: CRC_Result()
|
||
* 功能说明: 获取CRC计算结果
|
||
* 输 入: 无
|
||
* 输 出: uint32_t CRC 计算结果
|
||
* 注意事项: 无
|
||
******************************************************************************************************************************************/
|
||
static __INLINE uint32_t CRC_Result(void)
|
||
{
|
||
return CRC->RESULT;
|
||
}
|
||
|
||
#endif //__SWM341_CRC_H__
|