Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

104 righe
4.1 KiB

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 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_ */