1 /************************ (C) COPYRIGHT Megahuntmicro *************************
2  * @file                : air32f10x_trng.c
3  * @author              : Megahuntmicro
4  * @version             : V1.0.0
5  * @date                :
6  * @brief               :
7  *****************************************************************************/
8 
9 /* Includes -----------------------------------------------------------------*/
10 #include "air32f10x_trng.h"
11 
12 /**
13   * @method TRNG_Get
14   * @brief
15   * @param  rand
16   * @retval
17   */
TRNG_Get(uint32_t TRNG_Data[4])18 uint32_t TRNG_Get(uint32_t TRNG_Data[4])
19 {
20     uint32_t ret = 1;
21 
22     if (TRNG->RNG_CSR & TRNG_RNG_CSR_S128_TRNG0_Mask)
23     {
24         TRNG_Data[0] = TRNG->RNG_DATA;
25         TRNG_Data[1] = TRNG->RNG_DATA;
26         TRNG_Data[2] = TRNG->RNG_DATA;
27         TRNG_Data[3] = TRNG->RNG_DATA;
28         ret = 0;
29     }
30     return ret;
31 }
32 
33 /**
34   * @method TRNG_SetPseudoRandom
35   * @brief
36   * @param  PseudoRandom
37   * @retval
38   */
TRNG_SetPseudoRandom(uint32_t TRNG_PseudoRandom)39 void TRNG_SetPseudoRandom(uint32_t TRNG_PseudoRandom)
40 {
41     TRNG->RNG_PN = TRNG_PseudoRandom;
42 }
43 
44 /**
45   * @method TRNG_DirectOutANA
46   * @brief
47   * @param  NewState
48   * @retval
49   */
TRNG_DirectOutANA(FunctionalState NewState)50 void TRNG_DirectOutANA(FunctionalState NewState)
51 {
52     assert_param(IS_FUNCTIONAL_STATE(NewState));
53 
54     if (NewState != DISABLE)
55     {
56         TRNG->RNG_AMA |= TRNG_RNG_AMA_OUT_TRNG0_Mask;
57     }
58     else
59     {
60         TRNG->RNG_AMA &= ~TRNG_RNG_AMA_OUT_TRNG0_Mask;
61     }
62 }
63 
64 /**
65   * @method TRNG_SelectPDSource
66   * @brief
67   * @param  sourcex
68   * @retval
69   */
TRNG_SelectPDSource(TRNG_PDSourceTypeDef TRNG_Source)70 void TRNG_SelectPDSource(TRNG_PDSourceTypeDef TRNG_Source)
71 {
72     assert_param(IS_TRNG_PDSource(TRNG_Source));
73     TRNG->RNG_AMA = (TRNG->RNG_AMA & ~(0xF << 12)) | (TRNG_Source << 12);
74 }
75 
76 
77 /**
78   * @method TRNG_ITConfig
79   * @brief
80   * @param  NewState
81   * @retval
82   */
TRNG_ITConfig(FunctionalState NewState)83 void TRNG_ITConfig(FunctionalState NewState)
84 {
85     if (NewState != DISABLE)
86     {
87         TRNG->RNG_CSR |= TRNG_RNG_CSR_INTP_EN_Mask;
88     }
89     else
90     {
91         TRNG->RNG_CSR &= ~TRNG_RNG_CSR_INTP_EN_Mask;
92     }
93 }
94 
95 /**
96   * @brief  TRNG_GetITStatus
97   * @param  TRNG_IT:
98   *         TRNG_IT_RNG0_S128
99   *         TRNG_IT_RNG1_S128
100   *         TRNG_IT_RNG0_ATTACK
101   *         TRNG_IT_RNG1_ATTACK
102   * @retval None
103   */
TRNG_GetITStatus(uint32_t TRNG_IT)104 ITStatus TRNG_GetITStatus(uint32_t TRNG_IT)
105 {
106     assert_param(IS_TRNG_GET_IT(TRNG_IT));
107 
108     if (((TRNG->RNG_CSR) & TRNG_IT) != (uint32_t)RESET)
109     {
110         return SET;
111     }
112     else
113     {
114         return RESET;
115     }
116 }
117 
118 /**
119   * @brief  设置TRNG中断标志位
120   * @param  TRNG_IT:
121   *         TRNG_IT_RNG0_S128
122   *         TRNG_IT_RNG1_S128
123   *         TRNG_IT_RNG0_ATTACK
124   *         TRNG_IT_RNG1_ATTACK
125   * @retval None
126   */
TRNG_ClearITPendingBit(uint32_t TRNG_IT)127 void TRNG_ClearITPendingBit(uint32_t TRNG_IT)
128 {
129     assert_param(IS_TRNG_GET_IT(TRNG_IT));
130 
131     TRNG->RNG_CSR &= ~TRNG_IT;
132 }
133 
134 /**
135   * @brief  TRNG_Start
136   * @param
137   * @retval None
138   */
TRNG_Start(void)139 void TRNG_Start(void)
140 {
141     TRNG->RNG_AMA &= ~TRNG_RNG_AMA_PD_ALL_Mask;
142     TRNG->RNG_CSR &= ~TRNG_RNG_CSR_S128_TRNG0_Mask;
143 }
144 
145 /**
146   * @brief  TRNG_Stop
147   * @param
148   * @retval None
149   */
TRNG_Stop(void)150 void TRNG_Stop(void)
151 {
152     TRNG->RNG_AMA |= TRNG_RNG_AMA_PD_ALL_Mask;
153 }
154 
155 
156 /**
157   * @brief  TRNG_Stop
158   * @param
159   * @retval None
160   */
TRNG_Out(FunctionalState NewState)161 void TRNG_Out(FunctionalState NewState)
162 {
163     if (NewState != DISABLE)
164     {
165         RCC->RCC_SYSCFG_CONFIG = 0x01;
166         SYSCFG->SYSCFG_LOCK = 0xCDED3526;
167         SYSCFG->SSC_CLK_EN |= TRNG_RNG_ENABLE;
168     }
169     else
170     {
171         RCC->RCC_SYSCFG_CONFIG = 0x00;
172         SYSCFG->SSC_CLK_EN &= ~TRNG_RNG_ENABLE;
173     }
174 }
175 /**************************      (C) COPYRIGHT Megahunt    *****END OF FILE****/
176