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