gd32f4xx_trng.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*!
  2. \file gd32f4xx_trng.c
  3. \brief TRNG driver
  4. */
  5. /*
  6. Copyright (C) 2016 GigaDevice
  7. 2016-08-15, V1.0.0, firmware for GD32F4xx
  8. */
  9. #include "gd32f4xx_trng.h"
  10. /*!
  11. \brief deinitialize the TRNG
  12. \param[in] none
  13. \param[out] none
  14. \retval none
  15. */
  16. void trng_deinit(void)
  17. {
  18. rcu_periph_reset_enable(RCU_TRNGRST);
  19. rcu_periph_reset_disable(RCU_TRNGRST);
  20. }
  21. /*!
  22. \brief enable the TRNG interface
  23. \param[in] none
  24. \param[out] none
  25. \retval none
  26. */
  27. void trng_enable(void)
  28. {
  29. TRNG_CTL |= TRNG_CTL_TRNGEN;
  30. }
  31. /*!
  32. \brief disable the TRNG interface
  33. \param[in] none
  34. \param[out] none
  35. \retval none
  36. */
  37. void trng_disable(void)
  38. {
  39. TRNG_CTL &= ~TRNG_CTL_TRNGEN;
  40. }
  41. /*!
  42. \brief get the true random data
  43. \param[in] none
  44. \param[out] none
  45. \retval the generated random data
  46. */
  47. uint32_t trng_get_true_random_data(void)
  48. {
  49. return (TRNG_DATA);
  50. }
  51. /*!
  52. \brief get the trng status flags
  53. \param[in] flag: trng status flag, refer to trng_flag_enum
  54. only one parameter can be selected which is shown as below:
  55. \arg TRNG_FLAG_DRDY: Random Data ready status
  56. \arg TRNG_FLAG_CECS: Clock error current status
  57. \arg TRNG_FLAG_SECS: Seed error current status
  58. \param[out] none
  59. \retval FlagStatus: SET or RESET
  60. */
  61. FlagStatus trng_flag_get(trng_flag_enum flag)
  62. {
  63. if(RESET != (TRNG_STAT & flag)){
  64. return SET;
  65. }else{
  66. return RESET;
  67. }
  68. }
  69. /*!
  70. \brief clear the trng status flags
  71. \param[in] flag: the special status flag
  72. only one parameter can be selected which is shown as below:
  73. \arg TRNG_FLAG_CECS: Clock error current status
  74. \arg TRNG_FLAG_SECS: Seed error current status
  75. \param[out] none
  76. \retval none
  77. */
  78. void trng_flag_clear(trng_flag_enum flag)
  79. {
  80. TRNG_STAT &= ~(uint32_t)flag;
  81. }
  82. /*!
  83. \brief enable the TRNG interrupt
  84. \param[in] none
  85. \param[out] none
  86. \retval none
  87. */
  88. void trng_interrupt_enable(void)
  89. {
  90. TRNG_CTL |= TRNG_CTL_IE;
  91. }
  92. /*!
  93. \brief disable the TRNG interrupt
  94. \param[in] none
  95. \param[out] none
  96. \retval none
  97. */
  98. void trng_interrupt_disable(void)
  99. {
  100. TRNG_CTL &= ~TRNG_CTL_IE;
  101. }
  102. /*!
  103. \brief get the trng interrupt flags
  104. \param[in] int_flag: trng interrupt flag, refer to trng_int_flag_enum
  105. only one parameter can be selected which is shown as below:
  106. \arg TRNG_INT_FLAG_CEIF: clock error interrupt flag
  107. \arg TRNG_INT_FLAG_SEIF: Seed error interrupt flag
  108. \param[out] none
  109. \retval FlagStatus: SET or RESET
  110. */
  111. FlagStatus trng_interrupt_flag_get(trng_int_flag_enum int_flag)
  112. {
  113. if(RESET != (TRNG_STAT & int_flag)){
  114. return SET;
  115. }else{
  116. return RESET;
  117. }
  118. }
  119. /*!
  120. \brief clear the trng interrupt flags
  121. \param[in] int_flag: trng interrupt flag, refer to trng_int_flag_enum
  122. only one parameter can be selected which is shown as below:
  123. \arg TRNG_INT_FLAG_CEIF: clock error interrupt flag
  124. \arg TRNG_INT_FLAG_SEIF: Seed error interrupt flag
  125. \param[out] none
  126. \retval none
  127. */
  128. void trng_interrupt_flag_clear(trng_int_flag_enum int_flag)
  129. {
  130. TRNG_STAT &= ~(uint32_t)int_flag;
  131. }