1 /*
2  * Copyright 2021 MindMotion Microelectronics Co., Ltd.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 
9 #ifndef __HAL_SYSCFG_H__
10 #define __HAL_SYSCFG_H__
11 
12 #include "hal_common.h"
13 
14 /*!
15  * @addtogroup SYSCFG
16  * @{
17  */
18 
19 /*!
20  * @brief Boot memory mapping mode.
21  */
22 typedef enum
23 {
24     SYSCFG_BootMemMode_Flash = 0u, /*!< SYSCFG Boot Memory Flash mode. */
25     SYSCFG_BootMemMode_ROM   = 1u, /*!< SYSCFG Boot Memory ROM mode. */
26     SYSCFG_BootMemMode_SRAM  = 3u, /*!< SYSCFG Boot Memory SRAM mode. */
27 } SYSCFG_BootMemMode_Type;
28 
29 /*!
30  * @brief Set FSMC compatible mode.
31  */
32 typedef enum
33 {
34     SYSCFG_FSMCMode_NorFlash = 0u, /*!< SYSCFG FSMC compatible with Nor Flash. */
35     SYSCFG_FSMCMode_8080 = 1u, /*!< SYSCFG FSMC compatible with 8080 protocal. */
36 } SYSCFG_FSMCMode_Type;
37 
38 /*!
39  * @brief FSMC pin usage.
40  * FSMC pins can be used as data use only or mixed as data use and address use.
41  */
42 typedef enum
43 {
44     SYSCFG_FSMCPinUseMode_DataAndAddrMixed = 0u, /*!< FSMC pins can be used mixedly. */
45     SYSCFG_FSMCPinUseMode_DataOnly = 1u, /*!< FSMC pins can be used for data only. */
46 } SYSCFG_FSMCPinUseMode_Type;
47 
48 /*!
49  * @brief External interrupt port.
50  */
51 typedef enum
52 {
53     SYSCFG_EXTIPort_GPIOA = (0x00U), /*!< SYSCFG External Interrupt GPIOA. */
54     SYSCFG_EXTIPort_GPIOB = (0x01U), /*!< SYSCFG External Interrupt GPIOB. */
55     SYSCFG_EXTIPort_GPIOC = (0x02U), /*!< SYSCFG External Interrupt GPIOC. */
56     SYSCFG_EXTIPort_GPIOD = (0x03U), /*!< SYSCFG External Interrupt GPIOD. */
57     SYSCFG_EXTIPort_GPIOE = (0x04U), /*!< SYSCFG External Interrupt GPIOE. */
58     SYSCFG_EXTIPort_GPIOF = (0x05U), /*!< SYSCFG External Interrupt GPIOF. */
59 } SYSCFG_EXTIPort_Type;
60 
61 /*!
62  * @brief External interrupt line.
63  */
64 typedef enum
65 {
66     SYSCFG_EXTILine_0  =  (0x00U),  /*!< Pin 0 selected.    */
67     SYSCFG_EXTILine_1  =  (0x01U),  /*!< Pin 1 selected.    */
68     SYSCFG_EXTILine_2  =  (0x02U),  /*!< Pin 2 selected.    */
69     SYSCFG_EXTILine_3  =  (0x03U),  /*!< Pin 3 selected.    */
70     SYSCFG_EXTILine_4  =  (0x04U),  /*!< Pin 4 selected.    */
71     SYSCFG_EXTILine_5  =  (0x05U),  /*!< Pin 5 selected.    */
72     SYSCFG_EXTILine_6  =  (0x06U),  /*!< Pin 6 selected.    */
73     SYSCFG_EXTILine_7  =  (0x07U),  /*!< Pin 7 selected.    */
74     SYSCFG_EXTILine_8  =  (0x08U),  /*!< Pin 8 selected.    */
75     SYSCFG_EXTILine_9  =  (0x09U),  /*!< Pin 9 selected.    */
76     SYSCFG_EXTILine_10 =  (0x0AU),  /*!< Pin 10 selected.   */
77     SYSCFG_EXTILine_11 =  (0x0BU),  /*!< Pin 11 selected.   */
78     SYSCFG_EXTILine_12 =  (0x0CU),  /*!< Pin 12 selected.   */
79     SYSCFG_EXTILine_13 =  (0x0DU),  /*!< Pin 13 selected.   */
80     SYSCFG_EXTILine_14 =  (0x0EU),  /*!< Pin 14 selected.   */
81     SYSCFG_EXTILine_15 =  (0x0FU),  /*!< Pin 15 selected.   */
82 } SYSCFG_EXTILine_Type;
83 
84 /*!
85  * @brief I2C port mode.
86  */
87 typedef enum
88 {
89     SYSCFG_I2CPortMode_OpenDrain = 0u, /*!< I2C output open-drain mode. */
90     SYSCFG_I2CPortMode_PushPull = 1u, /*!< I2C output push-pull mode. */
91 } SYSCFG_I2CPortMode_Type;
92 
93 /*!
94  * @brief Ethernet port mode.
95  */
96 typedef enum
97 {
98     SYSCFG_ENETPortMode_MII  = 0u, /*!< Ethernet connect on MMI port. */
99     SYSCFG_ENETPortMode_RMII = 1u, /*!< Ethernet connect on RMMI port. */
100 } SYSCFG_ENETPortMode_Type;
101 
102 /*!
103  * @brief Ethernet speed mode.
104  */
105 typedef enum
106 {
107     SYSCFG_ENETSpeedMode_10Mb  = 0u, /*!< Ethernet speed mode of 10 Mbps. */
108     SYSCFG_ENETSpeedMode_100Mb = 1u, /*!< Ethernet speed mode of 100 Mbps. */
109 } SYSCFG_ENETSpeedMode_Type;
110 
111 /*!
112  * @brief PVD threshold.
113  */
114 typedef enum
115 {
116     SYSCFG_PVDThold_1v8 = 0u, /*!< PVD threshold of 1.8 v.*/
117     SYSCFG_PVDThold_2v1 = 1u, /*!< PVD threshold of 2.1 v.*/
118     SYSCFG_PVDThold_2v4 = 2u, /*!< PVD threshold of 2.4 v.*/
119     SYSCFG_PVDThold_2v7 = 3u, /*!< PVD threshold of 2.7 v.*/
120     SYSCFG_PVDThold_3v0 = 4u, /*!< PVD threshold of 3.0 v.*/
121     SYSCFG_PVDThold_3v3 = 5u, /*!< PVD threshold of 3.3 v.*/
122     SYSCFG_PVDThold_3v6 = 6u, /*!< PVD threshold of 3.6 v.*/
123     SYSCFG_PVDThold_3v9 = 7u, /*!< PVD threshold of 3.9 v.*/
124     SYSCFG_PVDThold_4v2 = 8u, /*!< PVD threshold of 4.2 v.*/
125     SYSCFG_PVDThold_4v5 = 9u, /*!< PVD threshold of 4.5 v.*/
126     SYSCFG_PVDThold_4v8 = 10u, /*!< PVD threshold of 4.8 v.*/
127 } SYSCFG_PVDThold_Type;
128 
129 /*!
130  * @brief PVD output state.
131  */
132 typedef enum
133 {
134     SYSCFG_PVDOut_Low  = 0u, /*!< PVD output low.*/
135     SYSCFG_PVDOut_High = 1u, /*!< PVD output high.*/
136 } SYSCFG_PVDOut_Type;
137 
138 /*!
139  * @brief VDT threshold alt.
140  */
141 typedef enum
142 {
143     SYSCFG_VDTThold_1v2 = 0u, /*!< VDT threshold of 1.2 v.*/
144     SYSCFG_VDTThold_1v1 = 1u, /*!< VDT threshold of 1.1 v.*/
145     SYSCFG_VDTThold_1v0 = 2u, /*!< VDT threshold of 1.0 v.*/
146     SYSCFG_VDTThold_0v9 = 3u, /*!< VDT threshold of 0.9 v.*/
147 } SYSCFG_VDTThold_Type;
148 
149 /*!
150  * @brief VDT output state.
151  */
152 typedef enum
153 {
154     SYSCFG_VDTOut_Low  = 0u, /*!< VDT output low.*/
155     SYSCFG_VDTOut_High = 1u, /*!< VDT output high.*/
156 } SYSCFG_VDTOut_Type;
157 
158 /*!
159  * @brief This type of structure instance is used to keep the settings when calling the @ref SYSCFG_EnablePVD().
160  */
161 typedef struct
162 {
163     SYSCFG_PVDThold_Type Thold; /* Set the threshold of the PVD. */
164     SYSCFG_PVDOut_Type Output; /* Set the output of the PVD. */
165 } SYSCFG_PVDConf_Type;
166 
167 /*!
168  * @brief This type of structure instance is used to keep the settings when calling the @ref SYSCFG_EnableVDT().
169  */
170 typedef struct
171 {
172     SYSCFG_VDTThold_Type Thold;  /* Set the threshold of the VDT. */
173     SYSCFG_VDTOut_Type Output; /* Set the output of the VDT. */
174 } SYSCFG_VDTConf_Type;
175 
176 /*!
177  * @brief Set boot memory mode.
178  *
179  * @param mode The memory mode. See to @ref SYSCFG_BootMemMode_Type.
180  * @return None.
181  */
182 void SYSCFG_SetBootMemMode(SYSCFG_BootMemMode_Type mode);
183 
184 /*!
185  * @brief Set FSMC pin usage mode.
186  *
187  * @param mode FMSC pin use mode to be set. See to @ref SYSCFG_FSMCPinUseMode_Type.
188  * @return None.
189  */
190 void SYSCFG_SetFSMCPinUseMode(SYSCFG_FSMCPinUseMode_Type mode);
191 
192 /*!
193  * @brief Set the FMSC compatible mode.
194  *
195  * @param mode The compatible mode to be set for FMSC. See to @ref SYSCFG_FSMCMode_Type.
196  * @return None.
197  */
198 void SYSCFG_SetFSMCMode(SYSCFG_FSMCMode_Type mode);
199 
200 /*!
201  * @brief Set the external interrupt mux.
202  *
203  * @param port external interrupt port. See to @ref SYSCFG_EXTIPort_Type.
204  * @param line external interrupt line. See to @ref SYSCFG_EXTILine_Type.
205  * @return None.
206  */
207 void SYSCFG_SetExtIntMux(SYSCFG_EXTIPort_Type port, SYSCFG_EXTILine_Type line);
208 
209 /*!
210  * @brief Set the I2C port 0 mode.
211  *
212  * @param mode The I2C output state to be set. See to @ref SYSCFG_I2CPortMode_Type.
213  * @return None.
214  */
215 void SYSCFG_SetI2C0PortMode(SYSCFG_I2CPortMode_Type mode);
216 
217 /*!
218  * @brief Set the I2C port 1 mode.
219  *
220  * @param mode The I2C output state to be set. See to @ref SYSCFG_I2CPortMode_Type.
221  * @return None.
222  */
223 void SYSCFG_SetI2C1PortMode(SYSCFG_I2CPortMode_Type mode);
224 
225 /*!
226  * @brief Set the Ethernet port mode.
227  *
228  * @param mode The Ethernet port mode. See to @ref SYSCFG_ENETPortMode_Type.
229  * @return None.
230  */
231 void SYSCFG_SetENETPortMode(SYSCFG_ENETPortMode_Type mode);
232 
233 /*!
234  * @brief Set the Ethernet speed mode.
235  *
236  * @param mode The Ethernet speed mode. See to @ref SYSCFG_ENETSpeedMode_Type.
237  * @return None.
238  */
239 void SYSCFG_SetENETSpeedMode(SYSCFG_ENETSpeedMode_Type mode);
240 
241 /*!
242  * @brief Enable the PVD.
243  *
244  * @param conf Pointer to the PDV configuration structure. See to @ref SYSCFG_PVDConf_Type.
245  * @return None.
246  */
247 void SYSCFG_EnablePVD(SYSCFG_PVDConf_Type * conf);
248 
249 /*!
250  * @brief Enable the VDT.
251  *
252  * @param conf Pointer to the VDT configuration structure. See to @ref SYSCFG_VDTConf_Type.
253  * @return None.
254  */
255 void SYSCFG_EnableVDT(SYSCFG_VDTConf_Type * conf);
256 
257 /*!
258  * @brief Enable ADC checking VBat_Div3.
259  *
260  * @param enable 'true' to enable ADC checking, 'false' to disable ADC checking.
261  * @return None.
262  */
263 void SYSCFG_EnableADCCheckVBatDiv3(bool enable);
264 
265 /*!
266  * @brief Set the VOS delay time.
267  *
268  * @param time VOS delay time.
269  * @return None.
270  */
271 void SYSCFG_SetVOSDelayValue(uint32_t val);
272 
273 /*!
274  * @}
275  */
276 
277 #endif /* __HAL_SYSCFG_H__ */
278