1 /**************************************************************************//** 2 * @file crc_reg.h 3 * @version V3.00 4 * @brief CRC register definition header file 5 * 6 * @copyright SPDX-License-Identifier: Apache-2.0 7 * @copyright Copyright (C) 2021 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 #ifndef __CRC_REG_H__ 10 #define __CRC_REG_H__ 11 12 #if defined ( __CC_ARM ) 13 #pragma anon_unions 14 #endif 15 16 /** @addtogroup REGISTER Control Register 17 @{ 18 */ 19 20 /*---------------------- Cyclic Redundancy Check Controller -------------------------*/ 21 /** 22 @addtogroup CRC Cyclic Redundancy Check Controller (CRC) 23 Memory Mapped Structure for CRC Controller 24 @{ 25 */ 26 27 typedef struct 28 { 29 30 31 /** 32 * @var CRC_T::CTL 33 * Offset: 0x00 CRC Control Register 34 * --------------------------------------------------------------------------------------------------- 35 * |Bits |Field |Descriptions 36 * | :----: | :----: | :---- | 37 * |[0] |CRCEN |CRC Channel Enable Bit 38 * | | |0 = No effect. 39 * | | |1 = CRC operation Enabled. 40 * |[1] |CHKSINIT |Checksum Initialization 41 * | | |0 = No effect. 42 * | | |1 = Initial checksum value by auto reload CRC_SEED register value to CRC_CHECKSUM register value. 43 * | | |Note: This bit will be cleared automatically and written only. 44 * |[24] |DATREV |Write Data Bit Order Reverse 45 * | | |This bit is used to enable the bit order reverse function per byte for write data value in CRC_DAT register. 46 * | | |0 = Bit order reversed for CRC write data in Disabled. 47 * | | |1 = Bit order reversed for CRC write data in Enabled (per byte). 48 * | | |Note: If the write data is 0xAABBCCDD, the bit order reverse for CRC write data in is 0x55DD33BB. 49 * |[25] |CHKSREV |Checksum Bit Order Reverse 50 * | | |This bit is used to enable the bit order reverse function for checksum result in CRC_CHECKSUM register. 51 * | | |0 = Bit order reverse for CRC checksum Disabled. 52 * | | |1 = Bit order reverse for CRC checksum Enabled. 53 * | | |Note: If the checksum result is 0xDD7B0F2E, the bit order reverse for CRC checksum is 0x74F0DEBB. 54 * |[26] |DATFMT |Write Data 1's Complement 55 * | | |This bit is used to enable the 1's complement function for write data value in CRC_DAT register. 56 * | | |0 = 1's complement for CRC writes data in Disabled. 57 * | | |1 = 1's complement for CRC writes data in Enabled. 58 * |[27] |CHKSFMT |Checksum 1's Complement 59 * | | |This bit is used to enable the 1's complement function for checksum result in CRC_CHECKSUM register. 60 * | | |0 = 1's complement for CRC checksum Disabled. 61 * | | |0 = 1's complement for CRC checksum Enabled. 62 * |[29:28] |DATLEN |CPU Write Data Length 63 * | | |This field indicates the write data length. 64 * | | |00 = Data length is 8-bit mode. 65 * | | |01 = Data length is 16-bit mode. 66 * | | |1x = Data length is 32-bit mode. 67 * | | |Note: When the write data length is 8-bit mode, the valid data in CRC_DAT register is only DATA[7:0] bits; if the write data length is 16-bit mode, the valid data in CRC_DAT register is only DATA[15:0]. 68 * |[31:30] |CRCMODE |CRC Polynomial Mode 69 * | | |This field indicates the CRC operation polynomial mode. 70 * | | |10 = CRC-16 Polynomial mode. 71 * | | |01 = CRC-8 Polynomial mode. 72 * | | |10 = CRC-16 Polynomial mode. 73 * | | |11 = CRC-32 Polynomial mode. 74 * | | |Note: User must program the polynomial value in CRC_POLYNOMIAL register to specify the polynomial used for CRC calculation. 75 * @var CRC_T::DAT 76 * Offset: 0x04 CRC Write Data Register 77 * --------------------------------------------------------------------------------------------------- 78 * |Bits |Field |Descriptions 79 * | :----: | :----: | :---- | 80 * |[31:0] |DATA |CRC Write Data Bits 81 * | | |User can write data directly by CPU mode or use PDMA function to write data to this field to perform CRC operation. 82 * | | |Note: When the write data length is 8-bit mode, the valid data in CRC_DAT register is only DATA[7:0] bits; if the write data length is 16-bit mode, the valid data in CRC_DAT register is only DATA[15:0]. 83 * @var CRC_T::SEED 84 * Offset: 0x08 CRC Seed Register 85 * --------------------------------------------------------------------------------------------------- 86 * |Bits |Field |Descriptions 87 * | :----: | :----: | :---- | 88 * |[31:0] |SEED |CRC Seed Value 89 * | | |This field indicates the CRC seed value. 90 * | | |Note: This field will be reloaded as checksum initial value (CRC_CHECKSUM register) after perform CHKSINIT (CRC_CTL[1]). 91 * @var CRC_T::CHECKSUM 92 * Offset: 0x0C CRC Checksum Register 93 * --------------------------------------------------------------------------------------------------- 94 * |Bits |Field |Descriptions 95 * | :----: | :----: | :---- | 96 * |[31:0] |CHECKSUM |CRC Checksum Results 97 * | | |This field indicates the CRC checksum result. 98 * | | |Note: The valid bits of CRC_CHECKSUM[31:0] is correlated to CRCMODE (CRC_CTL[31:30]). 99 * @var CRC_T::POLYNOMIAL 100 * Offset: 0x10 CRC Polynomial Register 101 * --------------------------------------------------------------------------------------------------- 102 * |Bits |Field |Descriptions 103 * | :----: | :----: | :---- | 104 * |[31:0] |POLYNOMIAL |CRC Polynomial Register 105 * | | |This field indicates the value of CRC polynomial. 106 */ 107 __IO uint32_t CTL; /*!< [0x0000] CRC Control Register */ 108 __IO uint32_t DAT; /*!< [0x0004] CRC Write Data Register */ 109 __IO uint32_t SEED; /*!< [0x0008] CRC Seed Register */ 110 __I uint32_t CHECKSUM; /*!< [0x000c] CRC Checksum Register */ 111 __IO uint32_t POLYNOMIAL; /*!< [0x0010] CRC Polynomial Register */ 112 113 } CRC_T; 114 115 /** 116 @addtogroup CRC_CONST CRC Bit Field Definition 117 Constant Definitions for CRC Controller 118 @{ 119 */ 120 121 #define CRC_CTL_CRCEN_Pos (0) /*!< CRC_T::CTL: CRCEN Position */ 122 #define CRC_CTL_CRCEN_Msk (0x1ul << CRC_CTL_CRCEN_Pos) /*!< CRC_T::CTL: CRCEN Mask */ 123 124 #define CRC_CTL_CHKSINIT_Pos (1) /*!< CRC_T::CTL: CHKSINIT Position */ 125 #define CRC_CTL_CHKSINIT_Msk (0x1ul << CRC_CTL_CHKSINIT_Pos) /*!< CRC_T::CTL: CHKSINIT Mask */ 126 127 #define CRC_CTL_DATREV_Pos (24) /*!< CRC_T::CTL: DATREV Position */ 128 #define CRC_CTL_DATREV_Msk (0x1ul << CRC_CTL_DATREV_Pos) /*!< CRC_T::CTL: DATREV Mask */ 129 130 #define CRC_CTL_CHKSREV_Pos (25) /*!< CRC_T::CTL: CHKSREV Position */ 131 #define CRC_CTL_CHKSREV_Msk (0x1ul << CRC_CTL_CHKSREV_Pos) /*!< CRC_T::CTL: CHKSREV Mask */ 132 133 #define CRC_CTL_DATFMT_Pos (26) /*!< CRC_T::CTL: DATFMT Position */ 134 #define CRC_CTL_DATFMT_Msk (0x1ul << CRC_CTL_DATFMT_Pos) /*!< CRC_T::CTL: DATFMT Mask */ 135 136 #define CRC_CTL_CHKSFMT_Pos (27) /*!< CRC_T::CTL: CHKSFMT Position */ 137 #define CRC_CTL_CHKSFMT_Msk (0x1ul << CRC_CTL_CHKSFMT_Pos) /*!< CRC_T::CTL: CHKSFMT Mask */ 138 139 #define CRC_CTL_DATLEN_Pos (28) /*!< CRC_T::CTL: DATLEN Position */ 140 #define CRC_CTL_DATLEN_Msk (0x3ul << CRC_CTL_DATLEN_Pos) /*!< CRC_T::CTL: DATLEN Mask */ 141 142 #define CRC_CTL_CRCMODE_Pos (30) /*!< CRC_T::CTL: CRCMODE Position */ 143 #define CRC_CTL_CRCMODE_Msk (0x3ul << CRC_CTL_CRCMODE_Pos) /*!< CRC_T::CTL: CRCMODE Mask */ 144 145 #define CRC_DAT_DATA_Pos (0) /*!< CRC_T::DAT: DATA Position */ 146 #define CRC_DAT_DATA_Msk (0xfffffffful << CRC_DAT_DATA_Pos) /*!< CRC_T::DAT: DATA Mask */ 147 148 #define CRC_SEED_SEED_Pos (0) /*!< CRC_T::SEED: SEED Position */ 149 #define CRC_SEED_SEED_Msk (0xfffffffful << CRC_SEED_SEED_Pos) /*!< CRC_T::SEED: SEED Mask */ 150 151 #define CRC_CHECKSUM_CHECKSUM_Pos (0) /*!< CRC_T::CHECKSUM: CHECKSUM Position */ 152 #define CRC_CHECKSUM_CHECKSUM_Msk (0xfffffffful << CRC_CHECKSUM_CHECKSUM_Pos) /*!< CRC_T::CHECKSUM: CHECKSUM Mask */ 153 154 #define CRC_POLYNOMIAL_POLYNOMIAL_Pos (0) /*!< CRC_T::POLYNOMIAL: POLYNOMIAL Position */ 155 #define CRC_POLYNOMIAL_POLYNOMIAL_Msk (0xfffffffful << CRC_POLYNOMIAL_POLYNOMIAL_Pos) /*!< CRC_T::POLYNOMIAL: POLYNOMIAL Mask */ 156 157 158 /**@}*/ /* CRC_CONST */ 159 /**@}*/ /* end of CRC register group */ 160 /**@}*/ /* end of REGISTER group */ 161 162 #if defined ( __CC_ARM ) 163 #pragma no_anon_unions 164 #endif 165 166 #endif /* __CRC_REG_H__ */ 167