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 n32g43x_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 __N32G43X_GPIO_H__
36 #define __N32G43X_GPIO_H__
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include "n32g43x.h"
43 
44 /** @addtogroup N32G43x_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 AF15
486  */
487 #define GPIO_AF15         ((uint8_t)0x0F)  /* NON Alternate Function mapping   */
488 
489 #define GPIO_NO_AF        (GPIO_AF15)
490 /**
491   * @}
492   */
493 
494 
495 /**
496  *  IS_GPIO_AF macro definition
497  */
498 
499 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_SPI1) || ((__AF__) == GPIO_AF1_TIM5)      || \
500                             ((__AF__) == GPIO_AF0_LPTIM)     || ((__AF__) == GPIO_AF1_USART1)     || \
501                             ((__AF__) == GPIO_AF0_SPI2)    || ((__AF__) == GPIO_AF1_I2C2)     || \
502                             ((__AF__) == GPIO_AF0_TIM8)      || ((__AF__) == GPIO_AF1_CAN)    || \
503                             ((__AF__) == GPIO_AF0_USART1)    || ((__AF__) == GPIO_AF1_SPI2)     || \
504                             ((__AF__) == GPIO_AF0_USART3)    || ((__AF__) == GPIO_AF1_TIM9)     || \
505                             ((__AF__) == GPIO_AF0_LPUART)   || ((__AF__) == GPIO_AF1_SPI1)      || \
506                             ((__AF__) == GPIO_AF0_USART2)     || ((__AF__) == GPIO_AF1_I2C1) || \
507                             ((__AF__) == GPIO_AF3_EVENTOUT)   || ((__AF__) == GPIO_AF2_TIM2)   || \
508                             ((__AF__) == GPIO_AF5_TIM2)     || ((__AF__) == GPIO_AF2_TIM3)  || \
509                             ((__AF__) == GPIO_AF5_TIM1)  || ((__AF__) == GPIO_AF2_TIM1)      || \
510                             ((__AF__) == GPIO_AF5_SPI1)   || ((__AF__) == GPIO_AF2_LPTIM)      || \
511                             ((__AF__) == GPIO_AF5_SPI2)      || ((__AF__) == GPIO_AF2_TIM4)     || \
512                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF2_LPUART)   || \
513                             ((__AF__) == GPIO_AF5_LPTIM)      || ((__AF__) == GPIO_AF4_USART2)     || \
514                             ((__AF__) == GPIO_AF5_CAN) || ((__AF__) == GPIO_AF4_LPUART)   || \
515                             ((__AF__) == GPIO_AF5_USART3)     || ((__AF__) == GPIO_AF4_USART1)  || \
516                             ((__AF__) == GPIO_AF6_USART2)    || ((__AF__) == GPIO_AF4_TIM3) || \
517                             ((__AF__) == GPIO_AF6_LPUART)     || ((__AF__) == GPIO_AF4_SPI1)   || \
518                             ((__AF__) == GPIO_AF6_TIM5)   || ((__AF__) == GPIO_AF4_I2C1)    || \
519                             ((__AF__) == GPIO_AF6_TIM8)    || ((__AF__) == GPIO_AF4_USART3)     || \
520                             ((__AF__) == GPIO_AF6_I2C2)     || ((__AF__) == GPIO_AF7_COMP1)     || \
521                             ((__AF__) == GPIO_AF6_UART4)     || ((__AF__) == GPIO_AF7_COMP2)   || \
522                             ((__AF__) == GPIO_AF6_UART5)    || ((__AF__) == GPIO_AF7_I2C1)  || \
523                             ((__AF__) == GPIO_AF6_SPI1)    || ((__AF__) == GPIO_AF7_TIM8)     || \
524                             ((__AF__) == GPIO_AF8_COMP1)     || ((__AF__) == GPIO_AF7_TIM5) || \
525                             ((__AF__) == GPIO_AF8_COMP2)  || ((__AF__) == GPIO_AF7_LPUART)     || \
526                             ((__AF__) == GPIO_AF8_LPTIM)   || ((__AF__) == GPIO_AF7_UART5)       || \
527                             ((__AF__) == GPIO_AF9_RTC)   || ((__AF__) == GPIO_AF7_TIM1)   || \
528                             ((__AF__) == GPIO_AF9_COMP1)     || ((__AF__) == GPIO_AF7_USART3)  || \
529                             ((__AF__) == GPIO_AF15)  || ((__AF__) == GPIO_NO_AF))
530 
531 
532 
533 
534 
535 /**
536  * @}
537  */
538 /** @defgroup GPIO Alternate function remaping
539  * @{
540  */
541 #define AFIO_SPI1_NSS   (11U)
542 #define AFIO_SPI2_NSS   (10U)
543 
544 #define IS_AFIO_SPIX(_PARAMETER_) \
545             (((_PARAMETER_) == AFIO_SPI1_NSS) ||((_PARAMETER_) == AFIO_SPI2_NSS))
546 typedef enum
547 {
548     AFIO_SPI_NSS_High_IMPEDANCE = 0U,
549     AFIO_SPI_NSS_High_LEVEL = 1U
550 }AFIO_SPI_NSSType;
551 
552 #define IS_AFIO_SPI_NSS(_PARAMETER_) \
553             (((_PARAMETER_) == AFIO_SPI_NSS_High_IMPEDANCE) ||((_PARAMETER_) == AFIO_SPI_NSS_High_LEVEL))
554 
555 
556 typedef enum
557 {
558     AFIO_ADC_ETRI= 9U,
559     AFIO_ADC_ETRR = 8U
560 }AFIO_ADC_ETRType;
561 
562 typedef enum
563 {
564     AFIO_ADC_TRIG_EXTI_0 = 0x0U,
565     AFIO_ADC_TRIG_EXTI_1 = 0x01U,
566     AFIO_ADC_TRIG_EXTI_2,
567     AFIO_ADC_TRIG_EXTI_3,
568     AFIO_ADC_TRIG_EXTI_4,
569     AFIO_ADC_TRIG_EXTI_5,
570     AFIO_ADC_TRIG_EXTI_6,
571     AFIO_ADC_TRIG_EXTI_7,
572     AFIO_ADC_TRIG_EXTI_8,
573     AFIO_ADC_TRIG_EXTI_9,
574     AFIO_ADC_TRIG_EXTI_10,
575     AFIO_ADC_TRIG_EXTI_11,
576     AFIO_ADC_TRIG_EXTI_12,
577     AFIO_ADC_TRIG_EXTI_13,
578     AFIO_ADC_TRIG_EXTI_14,
579     AFIO_ADC_TRIG_EXTI_15,
580     AFIO_ADC_TRIG_TIM8_CH3,
581     AFIO_ADC_TRIG_TIM8_CH4
582 }AFIO_ADC_Trig_RemapType;
583 
584 #define IS_AFIO_ADC_ETR(_PARAMETER_) \
585             (((_PARAMETER_) == AFIO_ADC_ETRI) ||((_PARAMETER_) == AFIO_ADC_ETRR))
586 #define IS_AFIO_ADC_ETRI(_PARAMETER_) \
587             (((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_0) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_1)|| \
588             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_2) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_3)|| \
589             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_4) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_5)|| \
590             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_6) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_7)|| \
591             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_8) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_9)|| \
592             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_10) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_11)|| \
593             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_12) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_13)|| \
594             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_14) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_15)|| \
595             ((_PARAMETER_) == AFIO_ADC_TRIG_TIM8_CH4))
596 
597 #define IS_AFIO_ADC_ETRR(_PARAMETER_) \
598             (((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_0) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_1)|| \
599             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_2) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_3)|| \
600             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_4) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_5)|| \
601             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_6) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_7)|| \
602             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_8) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_9)|| \
603             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_10) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_11)|| \
604             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_12) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_13) ||\
605             ((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_14) ||((_PARAMETER_) == AFIO_ADC_TRIG_EXTI_15)|| \
606             ((_PARAMETER_) == AFIO_ADC_TRIG_TIM8_CH3))
607 
608  /**
609  * @}
610  */
611 
612 /** @addtogroup GPIO_Exported_Macros
613  * @{
614  */
615 
616 /**
617  * @}
618  */
619 
620 /** @addtogroup GPIO_Exported_Functions
621  * @{
622  */
623 
624 void GPIO_DeInit(GPIO_Module* GPIOx);
625 void GPIO_AFIOInitDefault(void);
626 void GPIO_InitPeripheral(GPIO_Module* GPIOx, GPIO_InitType* GPIO_InitStruct);
627 void GPIO_InitStruct(GPIO_InitType* GPIO_InitStruct);
628 uint8_t GPIO_ReadInputDataBit(GPIO_Module* GPIOx, uint16_t Pin);
629 uint16_t GPIO_ReadInputData(GPIO_Module* GPIOx);
630 uint8_t GPIO_ReadOutputDataBit(GPIO_Module* GPIOx, uint16_t Pin);
631 uint16_t GPIO_ReadOutputData(GPIO_Module* GPIOx);
632 void GPIO_SetBits(GPIO_Module* GPIOx, uint16_t Pin);
633 void GPIO_ResetBits(GPIO_Module* GPIOx, uint16_t Pin);
634 void GPIO_WriteBit(GPIO_Module* GPIOx, uint16_t Pin, Bit_OperateType BitCmd);
635 void GPIO_Write(GPIO_Module* GPIOx, uint16_t PortVal);
636 void GPIO_ConfigPinLock(GPIO_Module* GPIOx, uint16_t Pin);
637 void GPIO_ConfigEventOutput(uint8_t PortSource, uint8_t PinSource);
638 void GPIO_CtrlEventOutput(FunctionalState Cmd);
639 void GPIO_ConfigPinRemap(uint8_t PortSource, uint8_t PinSource, uint32_t AlternateFunction);
640 void GPIO_ConfigEXTILine(uint8_t PortSource, uint8_t PinSource);
641 
642 void AFIO_ConfigSPINSSMode(uint32_t AFIO_SPIx_NSS,AFIO_SPI_NSSType SpiNssType);
643 void AFIO_ConfigADCExternalTrigRemap(AFIO_ADC_ETRType ADCETRType,AFIO_ADC_Trig_RemapType ADCTrigRemap);
644 
645 #ifdef __cplusplus
646 }
647 #endif
648 
649 #endif /* __N32G43X_GPIO_H__ */
650 /**
651  * @}
652  */
653 
654 /**
655  * @}
656  */
657 
658 /**
659  * @}
660  */
661