HPM SDK
HPMicro Software Development Kit
hpm_crc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2022 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_CRC_DRV_H
9 #define HPM_CRC_DRV_H
10 
19 #include "hpm_common.h"
20 #include "hpm_crc_regs.h"
21 
25 typedef enum crc_preset_enum {
43 
47 typedef enum crc_refin_enum {
51 
55 typedef enum crc_refout_enum {
59 
63 typedef enum crc_in_byte_order_enum {
67 
68 #define CRC_POLY_WIDTH_4 (4U)
69 #define CRC_POLY_WIDTH_5 (5U)
70 #define CRC_POLY_WIDTH_6 (6U)
71 #define CRC_POLY_WIDTH_7 (7U)
72 #define CRC_POLY_WIDTH_8 (8U)
73 #define CRC_POLY_WIDTH_16 (16U)
74 #define CRC_POLY_WIDTH_24 (24U)
75 #define CRC_POLY_WIDTH_32 (32U)
76 
80 typedef struct crc_channel_config {
82  uint32_t init;
83  uint32_t poly;
84  uint32_t poly_width;
88  uint32_t xorout;
90 
91 #define CRC_REG_WRITE8(addr, data)\
92 {\
93  uint32_t addr32 = (uint32_t)(addr);\
94  (*(volatile uint8_t *)(addr32) = (data));\
95 }
96 
97 #define CRC_REG_WRITE16(addr, data)\
98 {\
99  uint32_t addr32 = (uint32_t)(addr);\
100  (*(volatile uint16_t *)(addr32) = (data));\
101 }
102 
103 #define CRC_REG_WRITE32(addr, data)\
104 {\
105  uint32_t addr32 = (uint32_t)(addr);\
106  (*(volatile uint32_t *)(addr32) = (data));\
107 }
108 
109 #ifdef __cplusplus
110 extern "C" {
111 #endif
112 
119 
129 hpm_stat_t crc_setup_channel_config(CRC_Type *ptr, uint32_t ch_index,
130  crc_channel_config_t *cfg);
131 
139 static inline void crc_calc_byte(CRC_Type *ptr, uint32_t ch_index, uint8_t data)
140 {
141  CRC_REG_WRITE8(&ptr->CHN[ch_index].DATA, data);
142 }
143 
152 void crc_calc_block_bytes(CRC_Type *ptr, uint32_t ch_index, uint8_t *pbuffer, uint32_t length);
153 
161 static inline void crc_calc_half_word(CRC_Type *ptr, uint32_t ch_index, uint16_t data)
162 {
163  CRC_REG_WRITE16(&ptr->CHN[ch_index].DATA, data);
164 }
165 
174 void crc_calc_block_half_words(CRC_Type *ptr, uint32_t ch_index, uint16_t *pbuffer, uint32_t length);
175 
183 static inline void crc_calc_word(CRC_Type *ptr, uint32_t ch_index, uint32_t data)
184 {
185  CRC_REG_WRITE32(&ptr->CHN[ch_index].DATA, data);
186 }
187 
196 void crc_calc_block_words(CRC_Type *ptr, uint32_t ch_index, uint32_t *pbuffer, uint32_t length);
197 
206 void crc_calc_large_block_fast(CRC_Type *ptr, uint32_t ch_index, uint8_t *pbuffer, uint32_t length);
207 
215 static inline uint32_t crc_get_result(CRC_Type *ptr, uint32_t ch_index)
216 {
217  return ptr->CHN[ch_index].RESULT;
218 }
219 #ifdef __cplusplus
220 }
221 #endif
222 
227 #endif /* HPM_CRC_DRV_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
static uint32_t crc_get_result(CRC_Type *ptr, uint32_t ch_index)
Get CRC result.
Definition: hpm_crc_drv.h:215
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.
Definition: hpm_crc_drv.c:50
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.
Definition: hpm_crc_drv.c:68
enum crc_refout_enum crc_refout_t
CRC Refout definitions.
struct crc_channel_config crc_channel_config_t
Channel config.
#define CRC_REG_WRITE8(addr, data)
Definition: hpm_crc_drv.h:91
enum crc_preset_enum crc_preset_t
CRC preset definitions.
static void crc_calc_half_word(CRC_Type *ptr, uint32_t ch_index, uint16_t data)
Calculate half-word data crc.
Definition: hpm_crc_drv.h:161
crc_preset_enum
CRC preset definitions.
Definition: hpm_crc_drv.h:25
crc_refout_enum
CRC Refout definitions.
Definition: hpm_crc_drv.h:55
enum crc_refin_enum crc_refin_t
CRC Refin definitions.
void crc_calc_block_words(CRC_Type *ptr, uint32_t ch_index, uint32_t *pbuffer, uint32_t length)
Calculate length words data block crc.
Definition: hpm_crc_drv.c:59
static void crc_calc_word(CRC_Type *ptr, uint32_t ch_index, uint32_t data)
Calculate word data crc.
Definition: hpm_crc_drv.h:183
hpm_stat_t crc_setup_channel_config(CRC_Type *ptr, uint32_t ch_index, crc_channel_config_t *cfg)
Setup CRC channel.
Definition: hpm_crc_drv.c:23
#define CRC_REG_WRITE32(addr, data)
Definition: hpm_crc_drv.h:103
static void crc_calc_byte(CRC_Type *ptr, uint32_t ch_index, uint8_t data)
Calculate one byte data crc.
Definition: hpm_crc_drv.h:139
crc_in_byte_order_enum
crc input data stream byte order definitions.
Definition: hpm_crc_drv.h:63
void crc_get_default_channel_config(crc_channel_config_t *cfg)
Get default channel config.
Definition: hpm_crc_drv.c:11
crc_refin_enum
CRC Refin definitions.
Definition: hpm_crc_drv.h:47
#define CRC_REG_WRITE16(addr, data)
Definition: hpm_crc_drv.h:97
void crc_calc_block_bytes(CRC_Type *ptr, uint32_t ch_index, uint8_t *pbuffer, uint32_t length)
Calculate length bytes data block crc.
Definition: hpm_crc_drv.c:41
enum crc_in_byte_order_enum crc_in_byte_order_t
crc input data stream byte order definitions.
@ crc_preset_crc32_autosar
Definition: hpm_crc_drv.h:28
@ crc_preset_crc16_modbus
Definition: hpm_crc_drv.h:31
@ crc_preset_crc8
Definition: hpm_crc_drv.h:40
@ crc_preset_crc16_xmodem
Definition: hpm_crc_drv.h:30
@ crc_preset_crc8_rohc
Definition: hpm_crc_drv.h:38
@ crc_preset_crc16_x25
Definition: hpm_crc_drv.h:33
@ crc_preset_crc32
Definition: hpm_crc_drv.h:27
@ crc_preset_none
Definition: hpm_crc_drv.h:26
@ crc_preset_crc5_usb
Definition: hpm_crc_drv.h:41
@ crc_preset_crc8_itu
Definition: hpm_crc_drv.h:39
@ crc_preset_crc16_ibm
Definition: hpm_crc_drv.h:36
@ crc_preset_crc8_maxim
Definition: hpm_crc_drv.h:37
@ crc_preset_crc16_ccitt
Definition: hpm_crc_drv.h:29
@ crc_preset_crc16_dnp
Definition: hpm_crc_drv.h:32
@ crc_preset_crc16_maxim
Definition: hpm_crc_drv.h:35
@ crc_preset_crc16_usb
Definition: hpm_crc_drv.h:34
@ crc_refout_false
Definition: hpm_crc_drv.h:56
@ crc_refout_true
Definition: hpm_crc_drv.h:57
@ crc_in_byte_order_msb
Definition: hpm_crc_drv.h:65
@ crc_in_byte_order_lsb
Definition: hpm_crc_drv.h:64
@ crc_refin_true
Definition: hpm_crc_drv.h:49
@ crc_refin_false
Definition: hpm_crc_drv.h:48
Definition: hpm_crc_regs.h:12
__RW uint32_t RESULT
Definition: hpm_crc_regs.h:21
struct CRC_Type::@292 CHN[8]
__RW uint32_t DATA
Definition: hpm_crc_regs.h:20
Channel config.
Definition: hpm_crc_drv.h:80
crc_refin_t refin
Definition: hpm_crc_drv.h:87
crc_preset_t preset
Definition: hpm_crc_drv.h:81
uint32_t xorout
Definition: hpm_crc_drv.h:88
uint32_t init
Definition: hpm_crc_drv.h:82
crc_refout_t refout
Definition: hpm_crc_drv.h:86
uint32_t poly
Definition: hpm_crc_drv.h:83
uint32_t poly_width
Definition: hpm_crc_drv.h:84
crc_in_byte_order_t in_byte_order
Definition: hpm_crc_drv.h:85