HPM SDK
HPMicro Software Development Kit
CRC driver APIs

CRC APIs. More...

Data Structures

struct  crc_channel_config
 Channel config. More...
 

Macros

#define CRC_POLY_WIDTH_4   (4U)
 
#define CRC_POLY_WIDTH_5   (5U)
 
#define CRC_POLY_WIDTH_6   (6U)
 
#define CRC_POLY_WIDTH_7   (7U)
 
#define CRC_POLY_WIDTH_8   (8U)
 
#define CRC_POLY_WIDTH_16   (16U)
 
#define CRC_POLY_WIDTH_24   (24U)
 
#define CRC_POLY_WIDTH_32   (32U)
 
#define CRC_REG_WRITE8(addr, data)
 
#define CRC_REG_WRITE16(addr, data)
 
#define CRC_REG_WRITE32(addr, data)
 

Typedefs

typedef enum crc_preset_enum crc_preset_t
 CRC preset definitions. More...
 
typedef enum crc_refin_enum crc_refin_t
 CRC Refin definitions. More...
 
typedef enum crc_refout_enum crc_refout_t
 CRC Refout definitions. More...
 
typedef enum crc_in_byte_order_enum crc_in_byte_order_t
 crc input data stream byte order definitions. More...
 
typedef struct crc_channel_config crc_channel_config_t
 Channel config. More...
 

Enumerations

enum  crc_preset_enum {
  crc_preset_none = 0 , crc_preset_crc32 , crc_preset_crc32_autosar , crc_preset_crc16_ccitt ,
  crc_preset_crc16_xmodem , crc_preset_crc16_modbus , crc_preset_crc16_dnp , crc_preset_crc16_x25 ,
  crc_preset_crc16_usb , crc_preset_crc16_maxim , crc_preset_crc16_ibm , crc_preset_crc8_maxim ,
  crc_preset_crc8_rohc , crc_preset_crc8_itu , crc_preset_crc8 , crc_preset_crc5_usb
}
 CRC preset definitions. More...
 
enum  crc_refin_enum { crc_refin_false = 0 , crc_refin_true = 1 }
 CRC Refin definitions. More...
 
enum  crc_refout_enum { crc_refout_false = 0 , crc_refout_true = 1 }
 CRC Refout definitions. More...
 
enum  crc_in_byte_order_enum { crc_in_byte_order_lsb = 0 , crc_in_byte_order_msb = 1 }
 crc input data stream byte order definitions. More...
 

Functions

void crc_get_default_channel_config (crc_channel_config_t *cfg)
 Get default channel config. More...
 
hpm_stat_t crc_setup_channel_config (CRC_Type *ptr, uint32_t ch_index, crc_channel_config_t *cfg)
 Setup CRC channel. More...
 
static void crc_calc_byte (CRC_Type *ptr, uint32_t ch_index, uint8_t data)
 Calculate one byte data crc. More...
 
void crc_calc_block_bytes (CRC_Type *ptr, uint32_t ch_index, uint8_t *pbuffer, uint32_t length)
 Calculate length bytes data block crc. More...
 
static void crc_calc_half_word (CRC_Type *ptr, uint32_t ch_index, uint16_t data)
 Calculate half-word data crc. More...
 
void crc_calc_block_half_words (CRC_Type *ptr, uint32_t ch_index, uint16_t *pbuffer, uint32_t length)
 Calculate length half-words data block crc. More...
 
static void crc_calc_word (CRC_Type *ptr, uint32_t ch_index, uint32_t data)
 Calculate word data crc. More...
 
void crc_calc_block_words (CRC_Type *ptr, uint32_t ch_index, uint32_t *pbuffer, uint32_t length)
 Calculate length words data block crc. More...
 
void crc_calc_large_block_fast (CRC_Type *ptr, uint32_t ch_index, uint8_t *pbuffer, uint32_t length)
 Fast calculate length bytes large data block crc. More...
 
static uint32_t crc_get_result (CRC_Type *ptr, uint32_t ch_index)
 Get CRC result. More...
 

Detailed Description

CRC APIs.

Macro Definition Documentation

◆ CRC_POLY_WIDTH_16

#define CRC_POLY_WIDTH_16   (16U)

◆ CRC_POLY_WIDTH_24

#define CRC_POLY_WIDTH_24   (24U)

◆ CRC_POLY_WIDTH_32

#define CRC_POLY_WIDTH_32   (32U)

◆ CRC_POLY_WIDTH_4

#define CRC_POLY_WIDTH_4   (4U)

◆ CRC_POLY_WIDTH_5

#define CRC_POLY_WIDTH_5   (5U)

◆ CRC_POLY_WIDTH_6

#define CRC_POLY_WIDTH_6   (6U)

◆ CRC_POLY_WIDTH_7

#define CRC_POLY_WIDTH_7   (7U)

◆ CRC_POLY_WIDTH_8

#define CRC_POLY_WIDTH_8   (8U)

◆ CRC_REG_WRITE16

#define CRC_REG_WRITE16 (   addr,
  data 
)

#include <drivers/inc/hpm_crc_drv.h>

Value:
{\
uint32_t addr32 = (uint32_t)(addr);\
(*(volatile uint16_t *)(addr32) = (data));\
}

◆ CRC_REG_WRITE32

#define CRC_REG_WRITE32 (   addr,
  data 
)

#include <drivers/inc/hpm_crc_drv.h>

Value:
{\
uint32_t addr32 = (uint32_t)(addr);\
(*(volatile uint32_t *)(addr32) = (data));\
}

◆ CRC_REG_WRITE8

#define CRC_REG_WRITE8 (   addr,
  data 
)

#include <drivers/inc/hpm_crc_drv.h>

Value:
{\
uint32_t addr32 = (uint32_t)(addr);\
(*(volatile uint8_t *)(addr32) = (data));\
}

Typedef Documentation

◆ crc_channel_config_t

#include <drivers/inc/hpm_crc_drv.h>

Channel config.

◆ crc_in_byte_order_t

#include <drivers/inc/hpm_crc_drv.h>

crc input data stream byte order definitions.

◆ crc_preset_t

#include <drivers/inc/hpm_crc_drv.h>

CRC preset definitions.

◆ crc_refin_t

#include <drivers/inc/hpm_crc_drv.h>

CRC Refin definitions.

◆ crc_refout_t

#include <drivers/inc/hpm_crc_drv.h>

CRC Refout definitions.

Enumeration Type Documentation

◆ crc_in_byte_order_enum

#include <drivers/inc/hpm_crc_drv.h>

crc input data stream byte order definitions.

Enumerator
crc_in_byte_order_lsb 

Byte order of the CRC DATA LS Byte first.

crc_in_byte_order_msb 

Byte order of the CRC DATA MS Byte first.

◆ crc_preset_enum

#include <drivers/inc/hpm_crc_drv.h>

CRC preset definitions.

Enumerator
crc_preset_none 
crc_preset_crc32 

Poly: 0x04C11DB7, Init: 0xFFFFFFFF, Refin: True, Refout: True, Xorout: 0xFFFFFFFF

crc_preset_crc32_autosar 

Poly: 0xF4ACFB13, Init: 0xFFFFFFFF, Refin: True, Refout: True, Xorout: 0xFFFFFFFF

crc_preset_crc16_ccitt 

Poly: 0x1021, Init: 0x0000, Refin: True, Refout: True, Xorout: 0x0000

crc_preset_crc16_xmodem 

Poly: 0x1021, Init: 0x0000, Refin: False, Refout: False, Xorout: 0x0000

crc_preset_crc16_modbus 

Poly: 0x8005, Init: 0xFFFF, Refin: True, Refout: True, Xorout: 0x0000

crc_preset_crc16_dnp 

Poly: 0x3D65, Init: 0x0000, Refin: True, Refout: True, Xorout: 0xFFFF

crc_preset_crc16_x25 

Poly: 0x1021, Init: 0xFFFF, Refin: True, Refout: True, Xorout: 0xFFFF

crc_preset_crc16_usb 

Poly: 0x8005, Init: 0xFFFF, Refin: True, Refout: True, Xorout: 0xFFFF

crc_preset_crc16_maxim 

Poly: 0x8005, Init: 0x0000, Refin: True, Refout: True, Xorout: 0xFFFF

crc_preset_crc16_ibm 

Poly: 0x8005, Init: 0x0000, Refin: True, Refout: True, Xorout: 0x0000

crc_preset_crc8_maxim 

Poly: 0x31, Init: 0x00, Refin: True, Refout: True, Xorout: 0x00

crc_preset_crc8_rohc 

Poly: 0x07, Init: 0xFF, Refin: True, Refout: True, Xorout: 0x00

crc_preset_crc8_itu 

Poly: 0x07, Init: 0x00, Refin: False, Refout: False, Xorout: 0x55

crc_preset_crc8 

Poly: 0x07, Init: 0x00, Refin: False, Refout: False, Xorout: 0x00

crc_preset_crc5_usb 

Poly: 0x05, Init: 0x1F, Refin: True, Refout: True, Xorout: 0x1F

◆ crc_refin_enum

#include <drivers/inc/hpm_crc_drv.h>

CRC Refin definitions.

Enumerator
crc_refin_false 

Do not manipulate input data stream.

crc_refin_true 

Reflect each byte in the input stream bitwise.

◆ crc_refout_enum

#include <drivers/inc/hpm_crc_drv.h>

CRC Refout definitions.

Enumerator
crc_refout_false 

Do not manipulate output data stream.

crc_refout_true 

Reflect each byte in the output stream bitwise.

Function Documentation

◆ crc_calc_block_bytes()

void crc_calc_block_bytes ( CRC_Type ptr,
uint32_t  ch_index,
uint8_t *  pbuffer,
uint32_t  length 
)

#include <drivers/inc/hpm_crc_drv.h>

Calculate length bytes data block crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]pbufferData to be calculate buffer
[in]lengthNumber of pbuffer, unit is byte

◆ crc_calc_block_half_words()

void crc_calc_block_half_words ( CRC_Type ptr,
uint32_t  ch_index,
uint16_t *  pbuffer,
uint32_t  length 
)

#include <drivers/inc/hpm_crc_drv.h>

Calculate length half-words data block crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]pbufferData to be calculate buffer
[in]lengthNumber of pbuffer, unit is half word(2 bytes)

◆ crc_calc_block_words()

void crc_calc_block_words ( CRC_Type ptr,
uint32_t  ch_index,
uint32_t *  pbuffer,
uint32_t  length 
)

#include <drivers/inc/hpm_crc_drv.h>

Calculate length words data block crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]pbufferData to be calculate buffer
[in]lengthNumber of pbuffer, unit is word(4 bytes)

◆ crc_calc_byte()

static void crc_calc_byte ( CRC_Type ptr,
uint32_t  ch_index,
uint8_t  data 
)
inlinestatic

#include <drivers/inc/hpm_crc_drv.h>

Calculate one byte data crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]dataData that to be calculate

◆ crc_calc_half_word()

static void crc_calc_half_word ( CRC_Type ptr,
uint32_t  ch_index,
uint16_t  data 
)
inlinestatic

#include <drivers/inc/hpm_crc_drv.h>

Calculate half-word data crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]dataData that to be calculate

◆ crc_calc_large_block_fast()

void crc_calc_large_block_fast ( CRC_Type ptr,
uint32_t  ch_index,
uint8_t *  pbuffer,
uint32_t  length 
)

#include <drivers/inc/hpm_crc_drv.h>

Fast calculate length bytes large data block crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]pbufferData to be calculate buffer
[in]lengthNumber of pbuffer, unit is byte

◆ crc_calc_word()

static void crc_calc_word ( CRC_Type ptr,
uint32_t  ch_index,
uint32_t  data 
)
inlinestatic

#include <drivers/inc/hpm_crc_drv.h>

Calculate word data crc.

Parameters
[in]ptrCRC base address
[in]ch_indexCRC channel index
[in]dataData that to be calculate

◆ crc_get_default_channel_config()

void crc_get_default_channel_config ( crc_channel_config_t cfg)

#include <drivers/inc/hpm_crc_drv.h>

Get default channel config.

Parameters
[in]cfgChannel config

◆ crc_get_result()

static uint32_t crc_get_result ( CRC_Type ptr,
uint32_t  ch_index 
)
inlinestatic

#include <drivers/inc/hpm_crc_drv.h>

Get CRC result.

Parameters
[in]ptrCRC base address
[in]ch_indexIndex of the channel to be get
Returns
CRC result

◆ crc_setup_channel_config()

hpm_stat_t crc_setup_channel_config ( CRC_Type ptr,
uint32_t  ch_index,
crc_channel_config_t cfg 
)

#include <drivers/inc/hpm_crc_drv.h>

Setup CRC channel.

Parameters
[in]ptrCRC base address
[in]ch_indexTarget channel index to be configured
[in]cfgChannel config
Returns
status_success if everything is okay