hpm_crc_regs.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_CRC_H
  8. #define HPM_CRC_H
  9. typedef struct {
  10. struct {
  11. __RW uint32_t PRE_SET; /* 0x0: pre set for crc setting */
  12. __RW uint32_t CLR; /* 0x4: chn clear crc result and setting */
  13. __RW uint32_t POLY; /* 0x8: chn poly */
  14. __RW uint32_t INIT_DATA; /* 0xC: chn init_data */
  15. __RW uint32_t XOROUT; /* 0x10: chn xorout */
  16. __RW uint32_t MISC_SETTING; /* 0x14: chn misc_setting */
  17. __RW uint32_t DATA; /* 0x18: chn data */
  18. __RW uint32_t RESULT; /* 0x1C: chn result */
  19. __R uint8_t RESERVED0[32]; /* 0x20 - 0x3F: Reserved */
  20. } CHN[8];
  21. } CRC_Type;
  22. /* Bitfield definition for register of struct array CHN: PRE_SET */
  23. /*
  24. * PRE_SET (RW)
  25. *
  26. * 0: no pre set
  27. * 1: CRC32
  28. * 2: CRC32-AUTOSAR
  29. * 3: CRC16-CCITT
  30. * 4: CRC16-XMODEM
  31. * 5: CRC16-MODBUS
  32. * 1: CRC32
  33. * 2: CRC32-autosar
  34. * 3: CRC16-ccitt
  35. * 4: CRC16-xmodem
  36. * 5: CRC16-modbus
  37. * 6: crc16_dnp
  38. * 7: crc16_x25
  39. * 8: crc16_usb
  40. * 9: crc16_maxim
  41. * 10: crc16_ibm
  42. * 11: crc8_maxim
  43. * 12: crc8_rohc
  44. * 13: crc8_itu
  45. * 14: crc8
  46. * 15: crc5_usb
  47. */
  48. #define CRC_CHN_PRE_SET_PRE_SET_MASK (0xFFU)
  49. #define CRC_CHN_PRE_SET_PRE_SET_SHIFT (0U)
  50. #define CRC_CHN_PRE_SET_PRE_SET_SET(x) (((uint32_t)(x) << CRC_CHN_PRE_SET_PRE_SET_SHIFT) & CRC_CHN_PRE_SET_PRE_SET_MASK)
  51. #define CRC_CHN_PRE_SET_PRE_SET_GET(x) (((uint32_t)(x) & CRC_CHN_PRE_SET_PRE_SET_MASK) >> CRC_CHN_PRE_SET_PRE_SET_SHIFT)
  52. /* Bitfield definition for register of struct array CHN: CLR */
  53. /*
  54. * CLR (RW)
  55. *
  56. * write 1 to clr crc setting and result for its channel.
  57. * always read 0.
  58. */
  59. #define CRC_CHN_CLR_CLR_MASK (0x1U)
  60. #define CRC_CHN_CLR_CLR_SHIFT (0U)
  61. #define CRC_CHN_CLR_CLR_SET(x) (((uint32_t)(x) << CRC_CHN_CLR_CLR_SHIFT) & CRC_CHN_CLR_CLR_MASK)
  62. #define CRC_CHN_CLR_CLR_GET(x) (((uint32_t)(x) & CRC_CHN_CLR_CLR_MASK) >> CRC_CHN_CLR_CLR_SHIFT)
  63. /* Bitfield definition for register of struct array CHN: POLY */
  64. /*
  65. * POLY (RW)
  66. *
  67. * poly setting
  68. */
  69. #define CRC_CHN_POLY_POLY_MASK (0xFFFFFFFFUL)
  70. #define CRC_CHN_POLY_POLY_SHIFT (0U)
  71. #define CRC_CHN_POLY_POLY_SET(x) (((uint32_t)(x) << CRC_CHN_POLY_POLY_SHIFT) & CRC_CHN_POLY_POLY_MASK)
  72. #define CRC_CHN_POLY_POLY_GET(x) (((uint32_t)(x) & CRC_CHN_POLY_POLY_MASK) >> CRC_CHN_POLY_POLY_SHIFT)
  73. /* Bitfield definition for register of struct array CHN: INIT_DATA */
  74. /*
  75. * INIT_DATA (RW)
  76. *
  77. * initial data of CRC
  78. */
  79. #define CRC_CHN_INIT_DATA_INIT_DATA_MASK (0xFFFFFFFFUL)
  80. #define CRC_CHN_INIT_DATA_INIT_DATA_SHIFT (0U)
  81. #define CRC_CHN_INIT_DATA_INIT_DATA_SET(x) (((uint32_t)(x) << CRC_CHN_INIT_DATA_INIT_DATA_SHIFT) & CRC_CHN_INIT_DATA_INIT_DATA_MASK)
  82. #define CRC_CHN_INIT_DATA_INIT_DATA_GET(x) (((uint32_t)(x) & CRC_CHN_INIT_DATA_INIT_DATA_MASK) >> CRC_CHN_INIT_DATA_INIT_DATA_SHIFT)
  83. /* Bitfield definition for register of struct array CHN: XOROUT */
  84. /*
  85. * XOROUT (RW)
  86. *
  87. * XOR for CRC result
  88. */
  89. #define CRC_CHN_XOROUT_XOROUT_MASK (0xFFFFFFFFUL)
  90. #define CRC_CHN_XOROUT_XOROUT_SHIFT (0U)
  91. #define CRC_CHN_XOROUT_XOROUT_SET(x) (((uint32_t)(x) << CRC_CHN_XOROUT_XOROUT_SHIFT) & CRC_CHN_XOROUT_XOROUT_MASK)
  92. #define CRC_CHN_XOROUT_XOROUT_GET(x) (((uint32_t)(x) & CRC_CHN_XOROUT_XOROUT_MASK) >> CRC_CHN_XOROUT_XOROUT_SHIFT)
  93. /* Bitfield definition for register of struct array CHN: MISC_SETTING */
  94. /*
  95. * BYTE_REV (RW)
  96. *
  97. * 0: no wrap input byte order
  98. * 1: wrap input byte order
  99. */
  100. #define CRC_CHN_MISC_SETTING_BYTE_REV_MASK (0x1000000UL)
  101. #define CRC_CHN_MISC_SETTING_BYTE_REV_SHIFT (24U)
  102. #define CRC_CHN_MISC_SETTING_BYTE_REV_SET(x) (((uint32_t)(x) << CRC_CHN_MISC_SETTING_BYTE_REV_SHIFT) & CRC_CHN_MISC_SETTING_BYTE_REV_MASK)
  103. #define CRC_CHN_MISC_SETTING_BYTE_REV_GET(x) (((uint32_t)(x) & CRC_CHN_MISC_SETTING_BYTE_REV_MASK) >> CRC_CHN_MISC_SETTING_BYTE_REV_SHIFT)
  104. /*
  105. * REV_OUT (RW)
  106. *
  107. * 0: no wrap output bit order
  108. * 1: wrap output bit order
  109. */
  110. #define CRC_CHN_MISC_SETTING_REV_OUT_MASK (0x10000UL)
  111. #define CRC_CHN_MISC_SETTING_REV_OUT_SHIFT (16U)
  112. #define CRC_CHN_MISC_SETTING_REV_OUT_SET(x) (((uint32_t)(x) << CRC_CHN_MISC_SETTING_REV_OUT_SHIFT) & CRC_CHN_MISC_SETTING_REV_OUT_MASK)
  113. #define CRC_CHN_MISC_SETTING_REV_OUT_GET(x) (((uint32_t)(x) & CRC_CHN_MISC_SETTING_REV_OUT_MASK) >> CRC_CHN_MISC_SETTING_REV_OUT_SHIFT)
  114. /*
  115. * REV_IN (RW)
  116. *
  117. * 0: no wrap input bit order
  118. * 1: wrap input bit order
  119. */
  120. #define CRC_CHN_MISC_SETTING_REV_IN_MASK (0x100U)
  121. #define CRC_CHN_MISC_SETTING_REV_IN_SHIFT (8U)
  122. #define CRC_CHN_MISC_SETTING_REV_IN_SET(x) (((uint32_t)(x) << CRC_CHN_MISC_SETTING_REV_IN_SHIFT) & CRC_CHN_MISC_SETTING_REV_IN_MASK)
  123. #define CRC_CHN_MISC_SETTING_REV_IN_GET(x) (((uint32_t)(x) & CRC_CHN_MISC_SETTING_REV_IN_MASK) >> CRC_CHN_MISC_SETTING_REV_IN_SHIFT)
  124. /*
  125. * POLY_WIDTH (RW)
  126. *
  127. * crc data length
  128. */
  129. #define CRC_CHN_MISC_SETTING_POLY_WIDTH_MASK (0x3FU)
  130. #define CRC_CHN_MISC_SETTING_POLY_WIDTH_SHIFT (0U)
  131. #define CRC_CHN_MISC_SETTING_POLY_WIDTH_SET(x) (((uint32_t)(x) << CRC_CHN_MISC_SETTING_POLY_WIDTH_SHIFT) & CRC_CHN_MISC_SETTING_POLY_WIDTH_MASK)
  132. #define CRC_CHN_MISC_SETTING_POLY_WIDTH_GET(x) (((uint32_t)(x) & CRC_CHN_MISC_SETTING_POLY_WIDTH_MASK) >> CRC_CHN_MISC_SETTING_POLY_WIDTH_SHIFT)
  133. /* Bitfield definition for register of struct array CHN: DATA */
  134. /*
  135. * DATA (RW)
  136. *
  137. * data for crc
  138. */
  139. #define CRC_CHN_DATA_DATA_MASK (0xFFFFFFFFUL)
  140. #define CRC_CHN_DATA_DATA_SHIFT (0U)
  141. #define CRC_CHN_DATA_DATA_SET(x) (((uint32_t)(x) << CRC_CHN_DATA_DATA_SHIFT) & CRC_CHN_DATA_DATA_MASK)
  142. #define CRC_CHN_DATA_DATA_GET(x) (((uint32_t)(x) & CRC_CHN_DATA_DATA_MASK) >> CRC_CHN_DATA_DATA_SHIFT)
  143. /* Bitfield definition for register of struct array CHN: RESULT */
  144. /*
  145. * RESULT (RW)
  146. *
  147. * crc result
  148. */
  149. #define CRC_CHN_RESULT_RESULT_MASK (0xFFFFFFFFUL)
  150. #define CRC_CHN_RESULT_RESULT_SHIFT (0U)
  151. #define CRC_CHN_RESULT_RESULT_SET(x) (((uint32_t)(x) << CRC_CHN_RESULT_RESULT_SHIFT) & CRC_CHN_RESULT_RESULT_MASK)
  152. #define CRC_CHN_RESULT_RESULT_GET(x) (((uint32_t)(x) & CRC_CHN_RESULT_RESULT_MASK) >> CRC_CHN_RESULT_RESULT_SHIFT)
  153. /* CHN register group index macro definition */
  154. #define CRC_CHN_0 (0UL)
  155. #define CRC_CHN_1 (1UL)
  156. #define CRC_CHN_2 (2UL)
  157. #define CRC_CHN_3 (3UL)
  158. #define CRC_CHN_4 (4UL)
  159. #define CRC_CHN_5 (5UL)
  160. #define CRC_CHN_6 (6UL)
  161. #define CRC_CHN_7 (7UL)
  162. #endif /* HPM_CRC_H */