1 /************************ (C) COPYRIGHT Megahuntmicro *************************
2  * @file                : air32f103_trng.h
3  * @author              : Megahuntmicro
4  * @version             : V1.0.0
5  * @date                :
6  * @brief               :
7  *****************************************************************************/
8 
9 #ifndef __AIR32F10x_TRNG_H
10 #define __AIR32F10x_TRNG_H
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /* Includes ------------------------------------------------------------------*/
17 #include "air32f10x.h"
18 
19 typedef enum
20 {
21     TRNG_PDSource_0 = 0xE,
22     TRNG_PDSource_1 = 0xD,
23     TRNG_PDSource_2 = 0xB,
24     TRNG_PDSource_3 = 0x7,
25 } TRNG_PDSourceTypeDef;
26 
27 #define TRNG_Periph_Div_None                       ((uint32_t)0x00)
28 #define TRNG_Periph_Div2                           ((uint32_t)0x01)
29 #define TRNG_Periph_Div4                           ((uint32_t)0x10)
30 #define TRNG_Periph_Div8                           ((uint32_t)0x11)
31 
32 #define IS_TRNG_DIV(DIV)                            (((DIV) == TRNG_Periph_Div_None)  || \
33                                                     ((DIV) == TRNG_Periph_Div2)  || \
34                                                     ((DIV) == TRNG_Periph_Div4)  || \
35                                                     ((DIV) == TRNG_Periph_Div8))
36 
37 
38 #define IS_TRNG_PDSource(PDSOURCE)          (((PDSOURCE) == TRNG_PDSource_0) ||\
39                                              ((PDSOURCE) == TRNG_PDSource_1) ||\
40                                              ((PDSOURCE) == TRNG_PDSource_2) ||\
41                                              ((PDSOURCE) == TRNG_PDSource_3))
42 
43 #define TRNG_IT_RNG0_S128           ((uint32_t)0x00000001)
44 #define TRNG_IT_RNG0_ATTACK         ((uint32_t)0x00000004)
45 #define IS_TRNG_GET_IT(IT)          (((IT) == TRNG_IT_RNG0_S128) || \
46                                     ((IT) == TRNG_IT_RNG0_ATTACK))
47 
48 
49 
50 /************ bit definition for TRNG RNG_INDEX REGISTER ************/
51 
52 #define RNG_FIFO_INDEX_Mask                         BIT(31)
53 /************ bit definition for TRNG RNG_CSR REGISTER ************/
54 #define TRNG_RNG_CSR_INTP_EN_Mask                   ((uint32_t)0x0010)
55 #define TRNG_RNG_CSR_ATTACK_TRNG0_Mask              ((uint32_t)0x0004)
56 #define TRNG_RNG_CSR_S128_TRNG0_Mask                ((uint32_t)0x0001)
57 
58 /************ bit definition for TRNG RNG_AMA REGISTER ************/
59 #define TRNG_RNG_AMA_OUT_TRNG0_Mask                 ((uint32_t)0x10000000)
60 #define TRNG_RNG_AMA_PD_TRNG0_Mask                  ((uint32_t)0x00001000)
61 #define TRNG_RNG_AMA_PD_TRNG1_Mask                  ((uint32_t)0x00002000)
62 #define TRNG_RNG_AMA_PD_TRNG2_Mask                  ((uint32_t)0x00004000)
63 #define TRNG_RNG_AMA_PD_TRNG3_Mask                  ((uint32_t)0x00008000)
64 #define TRNG_RNG_AMA_PD_ALL_Mask                    ((uint32_t)0x0000F000)
65 /************ bit definition for TRNG ENABLE REGISTER ************/
66 #define TRNG_RNG_ENABLE                                     ((uint32_t)0x00000001)
67 
68 /** @defgroup RNG_Exported_Functions
69   * @{
70   */
71 void TRNG_Start(void);
72 void TRNG_Stop(void);
73 uint32_t TRNG_Get(uint32_t TRNG_Data[4]);
74 void TRNG_SetPseudoRandom(uint32_t TRNG_PseudoRandom);;
75 void TRNG_DirectOutANA(FunctionalState NewState);
76 
77 void TRNG_ITConfig(FunctionalState NewState);
78 ITStatus TRNG_GetITStatus(uint32_t TRNG_IT);
79 void TRNG_ClearITPendingBit(uint32_t TRNG_IT);
80 void TRNG_SelectPDSource(TRNG_PDSourceTypeDef TRNG_Source);
81 void TRNG_Out(FunctionalState NewState);
82 #ifdef __cplusplus
83 }
84 #endif
85 
86 #endif
87 
88 /**************************      (C) COPYRIGHT Megahunt    *****END OF FILE****/
89