ciu32f003_std_crc.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_crc.h
  4. * @author MCU Ecosystem Development Team
  5. * @brief CRC STD库驱动头文件。
  6. * 提供CRC相关的STD库操作函数声明、数据类型以及常量的定义。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /* 避免头文件重复引用 */
  16. #ifndef CIU32F003_STD_CRC_H
  17. #define CIU32F003_STD_CRC_H
  18. /************************************************************************************************/
  19. /**
  20. * @addtogroup CIU32F003_STD_Driver
  21. * @{
  22. */
  23. /**
  24. * @defgroup CRC CRC
  25. * @brief 循环冗余校验的STD库驱动
  26. * @{
  27. */
  28. /************************************************************************************************/
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. /*------------------------------------------includes--------------------------------------------*/
  33. #include "ciu32F003_std_common.h"
  34. /*--------------------------------------------define--------------------------------------------*/
  35. /************************************************************************************************/
  36. /**
  37. * @defgroup CRC_Constants CRC Constants
  38. * @brief CRC常量定义及宏定义
  39. * @{
  40. *
  41. */
  42. /************************************************************************************************/
  43. /* CRC多项式选择 */
  44. #define CRC_POLY_16 CRC_CSR_POLY_SIZE_16 /**< 16位多项式 */
  45. #define CRC_POLY_32 CRC_CSR_POLY_SIZE_32 /**< 32位多项式 */
  46. /* CRC默认初始值 */
  47. #define CRC_DEFAULT_INIT_VALUE (0xFFFFFFFFU) /**< CRC默认初始值 */
  48. /**
  49. * @}
  50. */
  51. /*-------------------------------------------functions------------------------------------------*/
  52. /************************************************************************************************/
  53. /**
  54. * @defgroup CRC_External_Functions CRC External Functions
  55. * @brief CRC对外函数
  56. * @{
  57. *
  58. */
  59. /************************************************************************************************/
  60. /**
  61. * @brief 配置CRC多项式
  62. * @param poly_size 多项式选择
  63. * @arg CRC_POLY_16:16位多项式
  64. * @arg CRC_POLY_32:32位多项式
  65. * @retval 无
  66. */
  67. __STATIC_INLINE void std_crc_set_poly_size(uint32_t poly_size)
  68. {
  69. CRC->CSR = poly_size;
  70. }
  71. /**
  72. * @brief 将CRC初始值未进行反转直接写入寄存器
  73. * @param init_value CRC的初始值
  74. * @retval 无
  75. */
  76. __STATIC_INLINE void std_crc_set_init_value(uint32_t init_value)
  77. {
  78. CRC->RDR = init_value;
  79. }
  80. /**
  81. * @brief 读取CRC计算结果
  82. * @retval uint32_t CRC计算结果
  83. */
  84. __STATIC_INLINE uint32_t std_crc_get_value(void)
  85. {
  86. return(CRC->RDR);
  87. }
  88. /**
  89. * @brief 向数据寄存器中写入输入的1字节数据
  90. * @param input_data 要进行CRC计算的原始数据
  91. * @retval 无
  92. */
  93. __STATIC_INLINE void std_crc_set_byte(uint8_t input_data)
  94. {
  95. CRC->DR = (uint32_t)input_data;
  96. }
  97. void std_crc_deinit(void);
  98. void std_crc_set_init_value_invert(uint32_t poly_sel, uint32_t init_value);
  99. /**
  100. * @}
  101. */
  102. #ifdef __cplusplus
  103. }
  104. #endif
  105. /**
  106. * @}
  107. */
  108. /**
  109. * @}
  110. */
  111. #endif /* CIU32F003_STD_CRC_H */