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])18uint32_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)39void 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)50void 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)70void 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)83void 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)104ITStatus 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)127void 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)139void 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)150void 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)161void 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