// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // File name : crc_drv.h // Version : V0.1 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #ifndef CRC_DRV_H_ #define CRC_DRV_H_ #include "type.h" #include "crc_reg.h" #include "memmap.h" #define CRC0 ((CRC_TypeDef *)CRC0_BASE_ADDR) #define CRC1 ((CRC_TypeDef *)CRC1_BASE_ADDR) #define CRC_DATA_FORMAT_BIGENDDING (0x01)//Data format is big endding #define CRC_DATA_FORMAT_LITTLEENDDING (0x00)//Data format is little endding #define IS_CRC_DATA_FORMAT(DATA_FORMAT) (((DATA_FORMAT) == CRC_DATA_FORMAT_BIGENDDING) || \ ((DATA_FORMAT) == CRC_DATA_FORMAT_LITTLEENDDING)) #define CRC_SOURCE_SEL_FROM_DMAC (0x01)//Data from DMAC write #define CRC_SOURCE_SEL_FROM_CPU (0x00)//Data from CPU transport #define IS_CRC_SOURCE_SEL(SOURCE_SEL) (((SOURCE_SEL) == CRC_SOURCE_SEL_FROM_DMAC) || \ ((SOURCE_SEL) == CRC_SOURCE_SEL_FROM_CPU)) #define CRC_MODE_CRC_32 (0x04)//32bit CRC data mode #define CRC_MODE_CRC_16 (0x02)//16bit CRC data mode #define CRC_MODE_CRC_8 (0x01)//8bit CRC data mode #define IS_CRC_MODE(MODE) (((MODE) == CRC_MODE_CRC_32) || \ ((MODE) == CRC_MODE_CRC_16) || \ ((MODE) == CRC_MODE_CRC_8)) typedef struct { UINT8 CRC_Mode;//CRC data mode UINT8 CRC_SourceSel;//Data from sram transport or CPU write UINT8 CRC_DataFormat;//Data format when in CRC32 mode }CRC_InitTypeDef; /******************************************************************************* * Function Name : CRC_Config * Description : CRC配置设置. * Input : - CRC_InitTypeDef : CRC_InitTypeDef结构体指针,解析如下: * CRC_InitStruct->CRC_Mode:CRC数据模式,取值为CRC_MODE_CRC_x,x取值8,16,32 * CRC_InitStruct->CRC_SourceSel: CRC数据源选择,取值CRC_SOURCE_SEL_FROM_DMA、CRC_SOURCE_SEL_FROM_CPU * CRC_InitStruct->CRC_DataFormat:CRC数据格式,大端模式或小端模式;CRC_MODE_CRC_32下,才有效; * * * Output : None * Return : None *******************************************************************************/ extern void CRC_Config(CRC_InitTypeDef *CRC_InitStruct); /******************************************************************************* * Function Name : CRC_SetInitValue * Description : 设置CRC初始值 * Input : - InitValue : 设置的CRC初始值 * * Output : None * Return : None *******************************************************************************/ void CRC_SetInitValue(UINT32 InitValue); /******************************************************************************* * Function Name : CRC_CalcCRC32 * Description : CRC 32 计算 * Input : - pBuffer : 需要计算CRC的数据缓冲 * - BufferLen : 需要计算的CRC数据缓冲的长度 * * Output : CRC计算结果 * Return : None *******************************************************************************/ UINT32 CRC_CalcCRC32(UINT8 *pBuffer, UINT32 BufferLen); /******************************************************************************* * Function Name : CRC_CalcCRC16 * Description : CRC 16 计算 * Input : - pBuffer : 需要计算CRC的数据缓冲 * - BufferLen : 需要计算的CRC数据缓冲的长度 * * Output : CRC计算结果 * Return : None *******************************************************************************/ UINT16 CRC_CalcCRC16(UINT8 *pBuffer, UINT32 BufferLen); /******************************************************************************* * Function Name : CRC_CalcCRC8 * Description : CRC 8 计算 * Input : - pBuffer : 需要计算CRC的数据缓冲 * - BufferLen : 需要计算的CRC数据缓冲的长度 * * Output : CRC计算结果 * Return : None *******************************************************************************/ UINT8 CRC_CalcCRC8(UINT8 *pBuffer, UINT32 BufferLen); #endif /* CRC_DRV_H_ */