1 /***************************************************************************** 2 * Copyright (c) 2022, Nations Technologies Inc. 3 * 4 * All rights reserved. 5 * **************************************************************************** 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * - Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the disclaimer below. 12 * 13 * Nations' name may not be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 19 * DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 22 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 25 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * ****************************************************************************/ 27 28 /** 29 * @file n32l40x_gpio.h 30 * @author Nations 31 * @version v1.2.0 32 * 33 * @copyright Copyright (c) 2022, Nations Technologies Inc. All rights reserved. 34 */ 35 #ifndef __N32L40X_GPIO_H__ 36 #define __N32L40X_GPIO_H__ 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 #include "n32l40x.h" 43 44 /** @addtogroup n32l40x_StdPeriph_Driver 45 * @{ 46 */ 47 48 /** @addtogroup GPIO 49 * @{ 50 */ 51 52 /** @addtogroup GPIO_Exported_Types 53 * @{ 54 */ 55 56 #define IS_GPIO_ALL_PERIPH(PERIPH) \ 57 (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) || ((PERIPH) == GPIOC) || ((PERIPH) == GPIOD)) 58 59 60 #define GPIO_GET_INDEX(PERIPH) (((PERIPH) == (GPIOA))? 0 :\ 61 ((PERIPH) == (GPIOB))? 1 :\ 62 ((PERIPH) == (GPIOC))? 2 :3) 63 #define GPIO_GET_PERIPH(INDEX) (((INDEX)==((uint8_t)0x00))? GPIOA :\ 64 ((INDEX)==((uint8_t)0x01))? GPIOB :\ 65 ((INDEX)==((uint8_t)0x02))? GPIOC : GPIOD ) 66 67 68 /** 69 * @brief Output Maximum frequency selection 70 */ 71 72 typedef enum 73 { 74 GPIO_Slew_Rate_High = 0, 75 GPIO_Slew_Rate_Low 76 } GPIO_SpeedType; 77 #define IS_GPIO_SLEW_RATE(_RATE_) \ 78 (((_RATE_) == GPIO_Slew_Rate_High) || ((_RATE_) == GPIO_Slew_Rate_Low)) 79 80 /** 81 * @brief driver strength config 82 */ 83 84 typedef enum 85 { 86 GPIO_DC_2mA = 0x00, 87 GPIO_DC_4mA = 0x10, 88 GPIO_DC_8mA = 0x01, 89 GPIO_DC_12mA= 0x11 90 }GPIO_CurrentType; 91 92 #define IS_GPIO_CURRENT(CURRENT) \ 93 (((CURRENT) == GPIO_DC_2mA) ||((CURRENT) == GPIO_DC_4mA) \ 94 || ((CURRENT) == GPIO_DC_8mA)||((CURRENT) == GPIO_DC_12mA)) 95 /** 96 * @brief Configuration Mode enumeration 97 */ 98 99 100 /** @brief GPIO_mode_define Mode definition 101 * @brief GPIO Configuration Mode 102 * Values convention: 0xW0yz00YZ 103 * - W : GPIO mode or EXTI Mode 104 * - y : External IT or Event trigger detection 105 * - z : IO configuration on External IT or Event 106 * - Y : Output type (Push Pull or Open Drain) 107 * - Z : IO Direction mode (Input, Output, Alternate or Analog) 108 * @{ 109 */ 110 111 typedef enum 112 { 113 GPIO_Mode_Input = 0x00000000, /*!< Input Floating Mode */ 114 GPIO_Mode_Out_PP = 0x00000001, /*!< Output Push Pull Mode */ 115 GPIO_Mode_Out_OD = 0x00000011, /*!< Output Open Drain Mode */ 116 GPIO_Mode_AF_PP = 0x00000002, /*!< Alternate Function Push Pull Mode */ 117 GPIO_Mode_AF_OD = 0x00000012, /*!< Alternate Function Open Drain Mode */ 118 119 GPIO_Mode_Analog = 0x00000003, /*!< Analog Mode */ 120 121 GPIO_Mode_IT_Rising = 0x10110000, /*!< External Interrupt Mode with Rising edge trigger detection */ 122 GPIO_Mode_IT_Falling = 0x10210000, /*!< External Interrupt Mode with Falling edge trigger detection */ 123 GPIO_Mode_IT_Rising_Falling = 0x10310000, /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 124 125 GPIO_Mode_EVT_Rising = 0x10120000, /*!< External Event Mode with Rising edge trigger detection */ 126 GPIO_Mode_EVT_Falling = 0x10220000, /*!< External Event Mode with Falling edge trigger detection */ 127 GPIO_Mode_EVT_Rising_Falling = 0x10320000 128 }GPIO_ModeType; 129 130 131 132 /** 133 * @} 134 */ 135 #define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_Mode_Input) ||\ 136 ((__MODE__) == GPIO_Mode_Out_PP) ||\ 137 ((__MODE__) == GPIO_Mode_Out_OD) ||\ 138 ((__MODE__) == GPIO_Mode_AF_PP) ||\ 139 ((__MODE__) == GPIO_Mode_AF_OD) ||\ 140 ((__MODE__) == GPIO_Mode_IT_Rising) ||\ 141 ((__MODE__) == GPIO_Mode_IT_Falling) ||\ 142 ((__MODE__) == GPIO_Mode_IT_Rising_Falling) ||\ 143 ((__MODE__) == GPIO_Mode_EVT_Rising) ||\ 144 ((__MODE__) == GPIO_Mode_EVT_Falling) ||\ 145 ((__MODE__) == GPIO_Mode_EVT_Rising_Falling) ||\ 146 ((__MODE__) == GPIO_Mode_Analog)) 147 148 /** 149 * @} 150 */ 151 152 /** 153 * @} 154 */ 155 156 /** @brief GPIO_pull_define Pull definition 157 * @brief GPIO Pull-Up or Pull-Down Activation 158 * @{ 159 */ 160 161 typedef enum 162 { 163 GPIO_No_Pull = 0x00000000, /*!< No Pull-up or Pull-down activation */ 164 GPIO_Pull_Up = 0x00000001, /*!< Pull-up activation */ 165 GPIO_Pull_Down = 0x00000002 /*!< Pull-down activation */ 166 }GPIO_PuPdType; 167 /** 168 * @} 169 */ 170 171 #define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_No_Pull) || ((__PULL__) == GPIO_Pull_Up) || \ 172 ((__PULL__) == GPIO_Pull_Down)) 173 /** 174 * @} 175 */ 176 177 /** 178 * @brief GPIO Init structure definition 179 */ 180 181 typedef struct 182 { 183 uint16_t Pin; /*!< Specifies the GPIO pins to be configured. 184 This parameter can be any value of @ref GPIO_pins_define */ 185 186 GPIO_CurrentType GPIO_Current; /*!<Driving current of the select pins>. 187 This paramter can be a value of @ref GPIO_CurrentType*/ 188 189 GPIO_SpeedType GPIO_Slew_Rate; /*!< Specifies the speed for the selected pins. 190 This parameter can be a value of @ref GPIO_SpeedType */ 191 192 GPIO_PuPdType GPIO_Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. 193 This parameter can be a value of @ref GPIO_pull_define */ 194 195 GPIO_ModeType GPIO_Mode; /*!< Specifies the operating mode for the selected pins. 196 This parameter can be a value of @ref GPIO_ModeType */ 197 198 uint32_t GPIO_Alternate; /*!< Peripheral to be connected to the selected pins 199 This parameter can be a value of @ref GPIOEx_Alternate_function_selection */ 200 } GPIO_InitType; 201 202 /** 203 * @brief Bit_SET and Bit_RESET enumeration 204 */ 205 206 typedef enum 207 { 208 Bit_RESET = 0, 209 Bit_SET 210 } Bit_OperateType; 211 212 #define IS_GPIO_BIT_OPERATE(OPERATE) (((OPERATE) == Bit_RESET) || ((OPERATE) == Bit_SET)) 213 214 /** 215 * @} 216 */ 217 218 219 220 221 /** @addtogroup GPIO_Exported_Constants 222 * @{ 223 */ 224 225 /** @addtogroup GPIO_pins_define 226 * @{ 227 */ 228 229 #define GPIO_PIN_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ 230 #define GPIO_PIN_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ 231 #define GPIO_PIN_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ 232 #define GPIO_PIN_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ 233 #define GPIO_PIN_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ 234 #define GPIO_PIN_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ 235 #define GPIO_PIN_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ 236 #define GPIO_PIN_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ 237 #define GPIO_PIN_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ 238 #define GPIO_PIN_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ 239 #define GPIO_PIN_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ 240 #define GPIO_PIN_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ 241 #define GPIO_PIN_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ 242 #define GPIO_PIN_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ 243 #define GPIO_PIN_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ 244 #define GPIO_PIN_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ 245 #define GPIO_PIN_ALL ((uint16_t)0xFFFF) /*!< All pins selected */ 246 247 #define GPIOA_PIN_AVAILABLE ((uint16_t)0xFFFF) 248 #define GPIOB_PIN_AVAILABLE ((uint16_t)0xFFFF) 249 #define GPIOC_PIN_AVAILABLE ((uint16_t)0xFFFF) 250 #define GPIOD_PIN_AVAILABLE ((uint16_t)0xFFFF) 251 252 #define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00)) 253 254 #define IS_GET_GPIO_PIN(PIN) \ 255 (((PIN) == GPIO_PIN_0) || ((PIN) == GPIO_PIN_1) || ((PIN) == GPIO_PIN_2) || ((PIN) == GPIO_PIN_3) \ 256 || ((PIN) == GPIO_PIN_4) || ((PIN) == GPIO_PIN_5) || ((PIN) == GPIO_PIN_6) || ((PIN) == GPIO_PIN_7) \ 257 || ((PIN) == GPIO_PIN_8) || ((PIN) == GPIO_PIN_9) || ((PIN) == GPIO_PIN_10) || ((PIN) == GPIO_PIN_11) \ 258 || ((PIN) == GPIO_PIN_12) || ((PIN) == GPIO_PIN_13) || ((PIN) == GPIO_PIN_14) || ((PIN) == GPIO_PIN_15)) 259 260 261 #define IS_GPIO_PIN_AVAILABLE(__INSTANCE__,__PIN__) \ 262 ((((__INSTANCE__) == GPIOA) && (((__PIN__) & (GPIOA_PIN_AVAILABLE)) != 0) && (((__PIN__) | (GPIOA_PIN_AVAILABLE)) == (GPIOA_PIN_AVAILABLE))) || \ 263 (((__INSTANCE__) == GPIOB) && (((__PIN__) & (GPIOB_PIN_AVAILABLE)) != 0) && (((__PIN__) | (GPIOB_PIN_AVAILABLE)) == (GPIOB_PIN_AVAILABLE))) || \ 264 (((__INSTANCE__) == GPIOC) && (((__PIN__) & (GPIOC_PIN_AVAILABLE)) != 0) && (((__PIN__) | (GPIOC_PIN_AVAILABLE)) == (GPIOC_PIN_AVAILABLE))) || \ 265 (((__INSTANCE__) == GPIOD) && (((__PIN__) & (GPIOD_PIN_AVAILABLE)) != 0) && (((__PIN__) | (GPIOD_PIN_AVAILABLE)) == (GPIOD_PIN_AVAILABLE)))) 266 267 268 269 270 271 /** 272 * @} 273 */ 274 275 276 277 278 /** @addtogroup GPIO_Port_Sources 279 * @{ 280 */ 281 282 #define GPIOA_PORT_SOURCE ((uint8_t)0x00) 283 #define GPIOB_PORT_SOURCE ((uint8_t)0x01) 284 #define GPIOC_PORT_SOURCE ((uint8_t)0x02) 285 #define GPIOD_PORT_SOURCE ((uint8_t)0x03) 286 287 #define IS_GPIO_REMAP_PORT_SOURCE(PORTSOURCE) \ 288 (((PORTSOURCE) == GPIOA_PORT_SOURCE) || ((PORTSOURCE) == GPIOB_PORT_SOURCE) || ((PORTSOURCE) == GPIOC_PORT_SOURCE) \ 289 || ((PORTSOURCE) == GPIOD_PORT_SOURCE)) 290 291 292 #define IS_GPIO_EVENTOUT_PORT_SOURCE(PORTSOURCE) \ 293 (((PORTSOURCE) == GPIOA_PORT_SOURCE) || ((PORTSOURCE) == GPIOB_PORT_SOURCE) || ((PORTSOURCE) == GPIOC_PORT_SOURCE) \ 294 || ((PORTSOURCE) == GPIOD_PORT_SOURCE)) 295 296 #define IS_GPIO_EXTI_PORT_SOURCE(PORTSOURCE) \ 297 (((PORTSOURCE) == GPIOA_PORT_SOURCE) || ((PORTSOURCE) == GPIOB_PORT_SOURCE) || ((PORTSOURCE) == GPIOC_PORT_SOURCE) \ 298 || ((PORTSOURCE) == GPIOD_PORT_SOURCE)) 299 300 /** 301 * @} 302 */ 303 304 /** @addtogroup GPIO_Pin_sources 305 * @{ 306 */ 307 308 #define GPIO_PIN_SOURCE0 ((uint8_t)0x00) 309 #define GPIO_PIN_SOURCE1 ((uint8_t)0x01) 310 #define GPIO_PIN_SOURCE2 ((uint8_t)0x02) 311 #define GPIO_PIN_SOURCE3 ((uint8_t)0x03) 312 #define GPIO_PIN_SOURCE4 ((uint8_t)0x04) 313 #define GPIO_PIN_SOURCE5 ((uint8_t)0x05) 314 #define GPIO_PIN_SOURCE6 ((uint8_t)0x06) 315 #define GPIO_PIN_SOURCE7 ((uint8_t)0x07) 316 #define GPIO_PIN_SOURCE8 ((uint8_t)0x08) 317 #define GPIO_PIN_SOURCE9 ((uint8_t)0x09) 318 #define GPIO_PIN_SOURCE10 ((uint8_t)0x0A) 319 #define GPIO_PIN_SOURCE11 ((uint8_t)0x0B) 320 #define GPIO_PIN_SOURCE12 ((uint8_t)0x0C) 321 #define GPIO_PIN_SOURCE13 ((uint8_t)0x0D) 322 #define GPIO_PIN_SOURCE14 ((uint8_t)0x0E) 323 #define GPIO_PIN_SOURCE15 ((uint8_t)0x0F) 324 325 #define IS_GPIO_PIN_SOURCE(PINSOURCE) \ 326 (((PINSOURCE) == GPIO_PIN_SOURCE0) || ((PINSOURCE) == GPIO_PIN_SOURCE1) || ((PINSOURCE) == GPIO_PIN_SOURCE2) \ 327 || ((PINSOURCE) == GPIO_PIN_SOURCE3) || ((PINSOURCE) == GPIO_PIN_SOURCE4) || ((PINSOURCE) == GPIO_PIN_SOURCE5) \ 328 || ((PINSOURCE) == GPIO_PIN_SOURCE6) || ((PINSOURCE) == GPIO_PIN_SOURCE7) || ((PINSOURCE) == GPIO_PIN_SOURCE8) \ 329 || ((PINSOURCE) == GPIO_PIN_SOURCE9) || ((PINSOURCE) == GPIO_PIN_SOURCE10) || ((PINSOURCE) == GPIO_PIN_SOURCE11) \ 330 || ((PINSOURCE) == GPIO_PIN_SOURCE12) || ((PINSOURCE) == GPIO_PIN_SOURCE13) || ((PINSOURCE) == GPIO_PIN_SOURCE14) \ 331 || ((PINSOURCE) == GPIO_PIN_SOURCE15)) 332 333 /** 334 * @} 335 */ 336 337 338 339 /** @defgroup GPIOx_Alternate_function_selection Alternate function selection 340 * @{ 341 */ 342 343 /* 344 * Alternate function AF0 345 */ 346 #define GPIO_AF0_SW_JTAG ((uint8_t)0x00) /* SPI1 Alternate Function mapping */ 347 #define GPIO_AF0_SPI1 ((uint8_t)0x00) /* SPI1 Alternate Function mapping */ 348 #define GPIO_AF0_LPTIM ((uint8_t)0x00) /* LPTIM Alternate Function mapping */ 349 #define GPIO_AF0_SPI2 ((uint8_t)0x00) /* SPI2 Alternate Function mapping */ 350 #define GPIO_AF0_TIM8 ((uint8_t)0x00) /* TIM8 Alternate Function mapping */ 351 #define GPIO_AF0_USART1 ((uint8_t)0x00) /* USART1 Alternate Function mapping */ 352 #define GPIO_AF0_USART3 ((uint8_t)0x00) /* USART3 Alternate Function mapping */ 353 #define GPIO_AF0_LPUART ((uint8_t)0x00) /* LPUART Alternate Function mapping */ 354 #define GPIO_AF0_USART2 ((uint8_t)0x00) /* USART2 Alternate Function mapping */ 355 356 /** 357 * 358 */ 359 360 /* 361 * Alternate function AF1 362 */ 363 #define GPIO_AF1_TIM5 ((uint8_t)0x01) /* TIM5 Alternate Function mapping */ 364 #define GPIO_AF1_USART1 ((uint8_t)0x01) /* USART1 Alternate Function mapping */ 365 #define GPIO_AF1_I2C2 ((uint8_t)0x01) /* I2C2 Alternate Function mapping */ 366 #define GPIO_AF1_CAN ((uint8_t)0x01) /* CAN Alternate Function mapping */ 367 #define GPIO_AF1_SPI2 ((uint8_t)0x01) /* SPI2 Alternate Function mapping */ 368 #define GPIO_AF1_TIM9 ((uint8_t)0x01) /* TIM9 Alternate Function mapping */ 369 #define GPIO_AF1_SPI1 ((uint8_t)0x01) /* SPI1 Alternate Function mapping */ 370 #define GPIO_AF1_I2C1 ((uint8_t)0x01) /* I2C1 Alternate Function mapping */ 371 #define GPIO_AF1 ((uint8_t)0x01) /* test Alternate Function mapping */ 372 /** 373 * 374 */ 375 376 /* 377 * Alternate function AF2 378 */ 379 #define GPIO_AF2_TIM2 ((uint8_t)0x02) /* TIM2 Alternate Function mapping */ 380 #define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ 381 #define GPIO_AF2_TIM1 ((uint8_t)0x02) /* TIM1 Alternate Function mapping */ 382 #define GPIO_AF2_LPTIM ((uint8_t)0x02) /* LPTIM Alternate Function mapping */ 383 #define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ 384 #define GPIO_AF2_LPUART ((uint8_t)0x02) /* LPUART Alternate Function mapping */ 385 /** 386 * 387 */ 388 389 /* 390 * Alternate function AF3 391 */ 392 #define GPIO_AF3_EVENTOUT ((uint8_t)0x03) /* EVENTOUT Alternate Function mapping */ 393 394 /** 395 * 396 */ 397 398 /* 399 * Alternate function AF4 400 */ 401 #define GPIO_AF4_USART2 ((uint8_t)0x04) /* USART2 Alternate Function mapping */ 402 #define GPIO_AF4_LPUART ((uint8_t)0x04) /* LPUART Alternate Function mapping */ 403 #define GPIO_AF4_USART1 ((uint8_t)0x04) /* USART1 Alternate Function mapping */ 404 #define GPIO_AF4_TIM3 ((uint8_t)0x04) /* TIM3 Alternate Function mapping*/ 405 #define GPIO_AF4_SPI1 ((uint8_t)0x04) /* SPI1 Alternate Function mapping */ 406 #define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ 407 #define GPIO_AF4_USART3 ((uint8_t)0x04) /* USART3 Alternate Function mapping */ 408 /** 409 * 410 */ 411 412 /* 413 * Alternate function AF5 414 */ 415 #define GPIO_AF5_TIM2 ((uint8_t)0x05) /* TIM2 Alternate Function mapping */ 416 #define GPIO_AF5_TIM1 ((uint8_t)0x05) /* TIM1 Alternate Function mapping */ 417 #define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ 418 #define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2 Alternate Function mapping */ 419 #define GPIO_AF5_I2C2 ((uint8_t)0x05) /* I2C2 Alternate Function mapping */ 420 #define GPIO_AF5_LPTIM ((uint8_t)0x05) /* LPTIM Alternate Function mapping */ 421 #define GPIO_AF5_CAN ((uint8_t)0x05) /* CAN Alternate Function mapping */ 422 #define GPIO_AF5_USART3 ((uint8_t)0x05) /* USART3 Alternate Function mapping */ 423 424 /** 425 * 426 */ 427 428 /* 429 * Alternate function AF6 430 */ 431 432 #define GPIO_AF6_USART2 ((uint8_t)0x06) /* USART2 Alternate Function mapping */ 433 #define GPIO_AF6_LPUART ((uint8_t)0x06) /* LPUART Alternate Function mapping */ 434 #define GPIO_AF6_TIM5 ((uint8_t)0x06) /* TIM5 Alternate Function mapping */ 435 #define GPIO_AF6_TIM8 ((uint8_t)0x06) /* TIM8 Alternate Function mapping */ 436 #define GPIO_AF6_I2C2 ((uint8_t)0x06) /* I2C2 Alternate Function mapping */ 437 #define GPIO_AF6_UART4 ((uint8_t)0x06) /* UART4 Alternate Function mapping */ 438 #define GPIO_AF6_UART5 ((uint8_t)0x06) /* UART5 Alternate Function mapping */ 439 #define GPIO_AF6_SPI1 ((uint8_t)0x06) /* SPI1 Alternate Function mapping */ 440 /** 441 * 442 */ 443 444 /* 445 * Alternate function AF7 446 */ 447 #define GPIO_AF7_COMP1 ((uint8_t)0x07) /* COMP1 Alternate Function mapping */ 448 #define GPIO_AF7_COMP2 ((uint8_t)0x07) /* COMP2 Alternate Function mapping */ 449 #define GPIO_AF7_I2C1 ((uint8_t)0x07) /* I2C1 Alternate Function mapping */ 450 #define GPIO_AF7_TIM8 ((uint8_t)0x07) /* TIM8 Alternate Function mapping */ 451 #define GPIO_AF7_TIM5 ((uint8_t)0x07) /* TIM5 Alternate Function mapping */ 452 #define GPIO_AF7_LPUART ((uint8_t)0x07) /* LPUART Alternate Function mapping */ 453 #define GPIO_AF7_UART5 ((uint8_t)0x07) /* UART5 Alternate Function mapping */ 454 #define GPIO_AF7_TIM1 ((uint8_t)0x07) /* TIM1 Alternate Function mapping */ 455 #define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ 456 457 /** 458 * 459 */ 460 461 /* 462 * Alternate function AF8 463 */ 464 #define GPIO_AF8_COMP1 ((uint8_t)0x08) /* COMP1 Alternate Function mapping */ 465 #define GPIO_AF8_COMP2 ((uint8_t)0x08) /* COMP2 Alternate Function mapping */ 466 #define GPIO_AF8_LPTIM ((uint8_t)0x08) /* LPTIM Alternate Function mapping */ 467 #define GPIO_AF8_MCO ((uint8_t)0x08) /* MCO Alternate Function mapping */ 468 469 /** 470 * 471 */ 472 473 /* 474 * Alternate function AF9 475 */ 476 #define GPIO_AF9_RTC ((uint8_t)0x09) /* RTC Alternate Function mapping */ 477 #define GPIO_AF9_COMP1 ((uint8_t)0x09) /* COMP1 Alternate Function mapping */ 478 #define GPIO_AF9_TSC ((uint8_t)0x09) /* COMP1 Alternate Function mapping */ 479 480 /** 481 * 482 */ 483 484 /* 485 * Alternate function AF10 486 */ 487 #define GPIO_AF10_LCD ((uint8_t)0x0A) /* LCD Alternate Function mapping */ 488 489 /** 490 * 491 */ 492 493 /* 494 * Alternate function AF11 495 */ 496 #define GPIO_AF11_LCD ((uint8_t)0x0B) /* LCD Alternate Function mapping */ 497 498 499 /* 500 * Alternate function AF15 501 */ 502 #define GPIO_AF15 ((uint8_t)0x0F) /* NON Alternate Function mapping */ 503 504 #define GPIO_NO_AF (GPIO_AF15) 505 /** 506 * @} 507 */ 508 509 510 /** 511 * IS_GPIO_AF macro definition 512 */ 513 514 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_SPI1) || ((__AF__) == GPIO_AF1_TIM5) || \ 515 ((__AF__) == GPIO_AF0_LPTIM) || ((__AF__) == GPIO_AF1_USART1) || \ 516 ((__AF__) == GPIO_AF0_SPI2) || ((__AF__) == GPIO_AF1_I2C2) || \ 517 ((__AF__) == GPIO_AF0_TIM8) || ((__AF__) == GPIO_AF1_CAN) || \ 518 ((__AF__) == GPIO_AF0_USART1) || ((__AF__) == GPIO_AF1_SPI2) || \ 519 ((__AF__) == GPIO_AF0_USART3) || ((__AF__) == GPIO_AF1_TIM9) || \ 520 ((__AF__) == GPIO_AF0_LPUART) || ((__AF__) == GPIO_AF1_SPI1) || \ 521 ((__AF__) == GPIO_AF0_USART2) || ((__AF__) == GPIO_AF1_I2C1) || \ 522 ((__AF__) == GPIO_AF3_EVENTOUT) || ((__AF__) == GPIO_AF2_TIM2) || \ 523 ((__AF__) == GPIO_AF5_TIM2) || ((__AF__) == GPIO_AF2_TIM3) || \ 524 ((__AF__) == GPIO_AF5_TIM1) || ((__AF__) == GPIO_AF2_TIM1) || \ 525 ((__AF__) == GPIO_AF5_SPI1) || ((__AF__) == GPIO_AF2_LPTIM) || \ 526 ((__AF__) == GPIO_AF5_SPI2) || ((__AF__) == GPIO_AF2_TIM4) || \ 527 ((__AF__) == GPIO_AF5_I2C2) || ((__AF__) == GPIO_AF2_LPUART) || \ 528 ((__AF__) == GPIO_AF5_LPTIM) || ((__AF__) == GPIO_AF4_USART2) || \ 529 ((__AF__) == GPIO_AF5_CAN) || ((__AF__) == GPIO_AF4_LPUART) || \ 530 ((__AF__) == GPIO_AF5_USART3) || ((__AF__) == GPIO_AF4_USART1) || \ 531 ((__AF__) == GPIO_AF6_USART2) || ((__AF__) == GPIO_AF4_TIM3) || \ 532 ((__AF__) == GPIO_AF6_LPUART) || ((__AF__) == GPIO_AF4_SPI1) || \ 533 ((__AF__) == GPIO_AF6_TIM5) || ((__AF__) == GPIO_AF4_I2C1) || \ 534 ((__AF__) == GPIO_AF6_TIM8) || ((__AF__) == GPIO_AF4_USART3) || \ 535 ((__AF__) == GPIO_AF6_I2C2) || ((__AF__) == GPIO_AF7_COMP1) || \ 536 ((__AF__) == GPIO_AF6_UART4) || ((__AF__) == GPIO_AF7_COMP2) || \ 537 ((__AF__) == GPIO_AF6_UART5) || ((__AF__) == GPIO_AF7_I2C1) || \ 538 ((__AF__) == GPIO_AF6_SPI1) || ((__AF__) == GPIO_AF7_TIM8) || \ 539 ((__AF__) == GPIO_AF8_COMP1) || ((__AF__) == GPIO_AF7_TIM5) || \ 540 ((__AF__) == GPIO_AF8_COMP2) || ((__AF__) == GPIO_AF7_LPUART) || \ 541 ((__AF__) == GPIO_AF8_LPTIM) || ((__AF__) == GPIO_AF7_UART5) || \ 542 ((__AF__) == GPIO_AF9_RTC) || ((__AF__) == GPIO_AF7_TIM1) || \ 543 ((__AF__) == GPIO_AF9_COMP1) || ((__AF__) == GPIO_AF7_USART3) || \ 544 ((__AF__) == GPIO_AF10_LCD) || ((__AF__) == GPIO_AF11_LCD) || \ 545 ((__AF__) == GPIO_AF15) || ((__AF__) == GPIO_NO_AF)) 546 547 548 549 550 551 /** 552 * @} 553 */ 554 /** @defgroup GPIO Alternate function remaping 555 * @{ 556 */ 557 #define AFIO_SPI1_NSS (11U) 558 #define AFIO_SPI2_NSS (10U) 559 560 #define IS_AFIO_SPIX(_PARAMETER_) \ 561 (((_PARAMETER_) == AFIO_SPI1_NSS) ||((_PARAMETER_) == AFIO_SPI2_NSS)) 562 typedef enum 563 { 564 AFIO_SPI_NSS_High_IMPEDANCE = 0U, 565 AFIO_SPI_NSS_High_LEVEL = 1U 566 }AFIO_SPI_NSSType; 567 568 #define IS_AFIO_SPI_NSS(_PARAMETER_) \ 569 (((_PARAMETER_) == AFIO_SPI_NSS_High_IMPEDANCE) ||((_PARAMETER_) == AFIO_SPI_NSS_High_LEVEL)) 570 571 572 typedef enum 573 { 574 AFIO_ADC_ETRI= 9U, 575 AFIO_ADC_ETRR = 8U 576 }AFIO_ADC_ETRType; 577 578 typedef enum 579 { 580 AFIO_ADC_TRIG_EXTI_0 = 0x0U, 581 AFIO_ADC_TRIG_EXTI_1 = 0x01U, 582 AFIO_ADC_TRIG_EXTI_2, 583 AFIO_ADC_TRIG_EXTI_3, 584 AFIO_ADC_TRIG_EXTI_4, 585 AFIO_ADC_TRIG_EXTI_5, 586 AFIO_ADC_TRIG_EXTI_6, 587 AFIO_ADC_TRIG_EXTI_7, 588 AFIO_ADC_TRIG_EXTI_8, 589 AFIO_ADC_TRIG_EXTI_9, 590 AFIO_ADC_TRIG_EXTI_10, 591 AFIO_ADC_TRIG_EXTI_11, 592 AFIO_ADC_TRIG_EXTI_12, 593 AFIO_ADC_TRIG_EXTI_13, 594 AFIO_ADC_TRIG_EXTI_14, 595 AFIO_ADC_TRIG_EXTI_15, 596 AFIO_ADC_TRIG_TIM8_CH3, 597 AFIO_ADC_TRIG_TIM8_CH4 598 }AFIO_ADC_Trig_RemapType; 599 600 #define IS_AFIO_ADC_ETR(_PARAMETER_) \ 601 (((_PARAMETER_) == AFIO_ADC_ETRI) ||((_PARAMETER_) == AFIO_ADC_ETRR)) 602 #define IS_AFIO_ADC_ETRI(_PARAMETER_) \ 603 (((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_0) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_1)|| \ 604 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_2) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_3)|| \ 605 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_4) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_5)|| \ 606 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_6) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_7)|| \ 607 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_8) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_9)|| \ 608 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_10) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_11)|| \ 609 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_12) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_13)|| \ 610 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_14) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_15)|| \ 611 ((_PARAMETER_) == AFIO_ADC_TRIG_TIM8_CH4)) 612 613 #define IS_AFIO_ADC_ETRR(_PARAMETER_) \ 614 (((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_0) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_1)|| \ 615 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_2) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_3)|| \ 616 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_4) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_5)|| \ 617 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_6) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_7)|| \ 618 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_8) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_9)|| \ 619 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_10) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_11)|| \ 620 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_12) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_13) ||\ 621 ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_14) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_15)|| \ 622 ((_PARAMETER_) == AFIO_ADC_TRIG_TIM8_CH3)) 623 624 /** 625 * @} 626 */ 627 628 /** @addtogroup GPIO_Exported_Macros 629 * @{ 630 */ 631 632 /** 633 * @} 634 */ 635 636 /** @addtogroup GPIO_Exported_Functions 637 * @{ 638 */ 639 640 void GPIO_DeInit(GPIO_Module* GPIOx); 641 void GPIO_AFIOInitDefault(void); 642 void GPIO_InitPeripheral(GPIO_Module* GPIOx, GPIO_InitType* GPIO_InitStruct); 643 void GPIO_InitStruct(GPIO_InitType* GPIO_InitStruct); 644 uint8_t GPIO_ReadInputDataBit(GPIO_Module* GPIOx, uint16_t Pin); 645 uint16_t GPIO_ReadInputData(GPIO_Module* GPIOx); 646 uint8_t GPIO_ReadOutputDataBit(GPIO_Module* GPIOx, uint16_t Pin); 647 uint16_t GPIO_ReadOutputData(GPIO_Module* GPIOx); 648 void GPIO_SetBits(GPIO_Module* GPIOx, uint16_t Pin); 649 void GPIO_ResetBits(GPIO_Module* GPIOx, uint16_t Pin); 650 void GPIO_WriteBit(GPIO_Module* GPIOx, uint16_t Pin, Bit_OperateType BitCmd); 651 void GPIO_Write(GPIO_Module* GPIOx, uint16_t PortVal); 652 void GPIO_ConfigPinLock(GPIO_Module* GPIOx, uint16_t Pin); 653 void GPIO_ConfigEventOutput(uint8_t PortSource, uint8_t PinSource); 654 void GPIO_CtrlEventOutput(FunctionalState Cmd); 655 void GPIO_ConfigPinRemap(uint8_t PortSource, uint8_t PinSource, uint32_t AlternateFunction); 656 void GPIO_ConfigEXTILine(uint8_t PortSource, uint8_t PinSource); 657 658 void AFIO_ConfigSPINSSMode(uint32_t AFIO_SPIx_NSS,AFIO_SPI_NSSType SpiNssType); 659 void AFIO_ConfigADCExternalTrigRemap(AFIO_ADC_ETRType ADCETRType,AFIO_ADC_Trig_RemapType ADCTrigRemap); 660 661 #ifdef __cplusplus 662 } 663 #endif 664 665 #endif /* __N32L40X_GPIO_H__ */ 666 /** 667 * @} 668 */ 669 670 /** 671 * @} 672 */ 673 674 /** 675 * @} 676 */ 677