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