1 /**************************************************************************//**
2  * @file     crc.h
3  * @version  V3.00
4  * @brief    Cyclic Redundancy Check(CRC) driver header file
5  *
6  * @copyright SPDX-License-Identifier: Apache-2.0
7  * @copyright Copyright (C) 2020 Nuvoton Technology Corp. All rights reserved.
8  *****************************************************************************/
9 #ifndef __CRC_H__
10 #define __CRC_H__
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
17 
18 /** @addtogroup Standard_Driver Standard Driver
19   @{
20 */
21 
22 /** @addtogroup CRC_Driver CRC Driver
23   @{
24 */
25 
26 /** @addtogroup CRC_EXPORTED_CONSTANTS CRC Exported Constants
27   @{
28 */
29 /*---------------------------------------------------------------------------------------------------------*/
30 /*  CRC Polynomial Mode Constant Definitions                                                               */
31 /*---------------------------------------------------------------------------------------------------------*/
32 #define CRC_CCITT           (0UL << CRC_CTL_CRCMODE_Pos) /*!<CRC Polynomial Mode - CCITT \hideinitializer */
33 #define CRC_8               (1UL << CRC_CTL_CRCMODE_Pos) /*!<CRC Polynomial Mode - CRC8 \hideinitializer */
34 #define CRC_16              (2UL << CRC_CTL_CRCMODE_Pos) /*!<CRC Polynomial Mode - CRC16 \hideinitializer */
35 #define CRC_32              (3UL << CRC_CTL_CRCMODE_Pos) /*!<CRC Polynomial Mode - CRC32 \hideinitializer */
36 
37 /*---------------------------------------------------------------------------------------------------------*/
38 /*  Checksum, Write data Constant Definitions                                                              */
39 /*---------------------------------------------------------------------------------------------------------*/
40 #define CRC_CHECKSUM_COM    (CRC_CTL_CHKSFMT_Msk)       /*!<CRC Checksum Complement \hideinitializer */
41 #define CRC_CHECKSUM_RVS    (CRC_CTL_CHKSREV_Msk)       /*!<CRC Checksum Reverse \hideinitializer */
42 #define CRC_WDATA_COM       (CRC_CTL_DATFMT_Msk)        /*!<CRC Write Data Complement \hideinitializer */
43 #define CRC_WDATA_RVS       (CRC_CTL_DATREV_Msk)        /*!<CRC Write Data Reverse \hideinitializer */
44 
45 /*---------------------------------------------------------------------------------------------------------*/
46 /*  CPU Write Data Length Constant Definitions                                                             */
47 /*---------------------------------------------------------------------------------------------------------*/
48 #define CRC_CPU_WDATA_8     (0UL << CRC_CTL_DATLEN_Pos) /*!<CRC CPU Write Data length is 8-bit \hideinitializer */
49 #define CRC_CPU_WDATA_16    (1UL << CRC_CTL_DATLEN_Pos) /*!<CRC CPU Write Data length is 16-bit \hideinitializer */
50 #define CRC_CPU_WDATA_32    (2UL << CRC_CTL_DATLEN_Pos) /*!<CRC CPU Write Data length is 32-bit \hideinitializer */
51 
52 /**@}*/ /* end of group CRC_EXPORTED_CONSTANTS */
53 
54 
55 /** @addtogroup CRC_EXPORTED_FUNCTIONS CRC Exported Functions
56   @{
57 */
58 
59 /**
60   * @brief      Set CRC Seed Value
61   *
62   * @param[in]  crc         The pointer of CRC module.
63   * @param[in]  u32Seed     Seed value
64   *
65   * @return     None
66   *
67   * @details    This macro is used to set CRC seed value.
68   *
69   * @note       User must to perform CRC_CHKSINIT(CRC_CTL[1] CRC Engine Reset) to reload the new seed value
70   *             to CRC controller.
71   * \hideinitializer
72   */
73 #define CRC_SET_SEED(crc, u32Seed)          do{ (crc)->SEED = (u32Seed); (crc)->CTL |= CRC_CTL_CHKSINIT_Msk; } while(0)
74 
75 /**
76   * @brief      Get CRC Seed Value
77   *
78   * @param[in]  crc         The pointer of CRC module.
79   *
80   * @return     CRC seed value
81   *
82   * @details    This macro gets the current CRC seed value.
83  * \hideinitializer
84   */
85 #define CRC_GET_SEED(crc)                   ((crc)->SEED)
86 
87 /**
88   * @brief      CRC Write Data
89   *
90   * @param[in]  crc         The pointer of CRC module.
91   * @param[in]  u32Data     Write data
92   *
93   * @return     None
94   *
95   * @details    User can write data directly to CRC Write Data Register(CRC_DAT) by this macro to perform CRC operation.
96  * \hideinitializer
97   */
98 #define CRC_WRITE_DATA(crc, u32Data)        ((crc)->DAT = (u32Data))
99 
100 
101 void CRC_Open(uint32_t u32Mode, uint32_t u32Attribute, uint32_t u32Seed, uint32_t u32DataLen);
102 uint32_t CRC_GetChecksum(void);
103 
104 /**@}*/ /* end of group CRC_EXPORTED_FUNCTIONS */
105 
106 /**@}*/ /* end of group CRC_Driver */
107 
108 /**@}*/ /* end of group Standard_Driver */
109 
110 #ifdef __cplusplus
111 }
112 #endif
113 
114 #endif /* __CRC_H__ */
115