1 /*****************************************************************************
2  * Copyright (c) 2019, 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 n32g4fr_exti.h
30  * @author Nations
31  * @version v1.0.0
32  *
33  * @copyright Copyright (c) 2019, Nations Technologies Inc. All rights reserved.
34  */
35 #ifndef __N32G4FR_EXTI_H__
36 #define __N32G4FR_EXTI_H__
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include "n32g4fr.h"
43 
44 /** @addtogroup N32G4FR_StdPeriph_Driver
45  * @{
46  */
47 
48 /** @addtogroup EXTI
49  * @{
50  */
51 
52 /** @addtogroup EXTI_Exported_Types
53  * @{
54  */
55 
56 /**
57  * @brief  EXTI mode enumeration
58  */
59 
60 typedef enum
61 {
62     EXTI_Mode_Interrupt = 0x00,
63     EXTI_Mode_Event     = 0x04
64 } EXTI_ModeType;
65 
66 #define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event))
67 
68 /**
69  * @brief  EXTI Trigger enumeration
70  */
71 
72 typedef enum
73 {
74     EXTI_Trigger_Rising         = 0x08,
75     EXTI_Trigger_Falling        = 0x0C,
76     EXTI_Trigger_Rising_Falling = 0x10
77 } EXTI_TriggerType;
78 
79 #define IS_EXTI_TRIGGER(TRIGGER)                                                                                       \
80     (((TRIGGER) == EXTI_Trigger_Rising) || ((TRIGGER) == EXTI_Trigger_Falling)                                         \
81      || ((TRIGGER) == EXTI_Trigger_Rising_Falling))
82 /**
83  * @brief  EXTI Init Structure definition
84  */
85 
86 typedef struct
87 {
88     uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled.
89                              This parameter can be any combination of @ref EXTI_Lines */
90 
91     EXTI_ModeType EXTI_Mode; /*!< Specifies the mode for the EXTI lines.
92                                      This parameter can be a value of @ref EXTI_ModeType */
93 
94     EXTI_TriggerType EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
95                                            This parameter can be a value of @ref EXTI_ModeType */
96 
97     FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines.
98                                        This parameter can be set either to ENABLE or DISABLE */
99 } EXTI_InitType;
100 
101 /**
102  * @}
103  */
104 
105 /** @addtogroup EXTI_Exported_Constants
106  * @{
107  */
108 
109 /** @addtogroup EXTI_Lines
110  * @{
111  */
112 
113 #define EXTI_LINE0  ((uint32_t)0x00001) /*!< External interrupt line 0 */
114 #define EXTI_LINE1  ((uint32_t)0x00002) /*!< External interrupt line 1 */
115 #define EXTI_LINE2  ((uint32_t)0x00004) /*!< External interrupt line 2 */
116 #define EXTI_LINE3  ((uint32_t)0x00008) /*!< External interrupt line 3 */
117 #define EXTI_LINE4  ((uint32_t)0x00010) /*!< External interrupt line 4 */
118 #define EXTI_LINE5  ((uint32_t)0x00020) /*!< External interrupt line 5 */
119 #define EXTI_LINE6  ((uint32_t)0x00040) /*!< External interrupt line 6 */
120 #define EXTI_LINE7  ((uint32_t)0x00080) /*!< External interrupt line 7 */
121 #define EXTI_LINE8  ((uint32_t)0x00100) /*!< External interrupt line 8 */
122 #define EXTI_LINE9  ((uint32_t)0x00200) /*!< External interrupt line 9 */
123 #define EXTI_LINE10 ((uint32_t)0x00400) /*!< External interrupt line 10 */
124 #define EXTI_LINE11 ((uint32_t)0x00800) /*!< External interrupt line 11 */
125 #define EXTI_LINE12 ((uint32_t)0x01000) /*!< External interrupt line 12 */
126 #define EXTI_LINE13 ((uint32_t)0x02000) /*!< External interrupt line 13 */
127 #define EXTI_LINE14 ((uint32_t)0x04000) /*!< External interrupt line 14 */
128 #define EXTI_LINE15 ((uint32_t)0x08000) /*!< External interrupt line 15 */
129 #define EXTI_LINE16 ((uint32_t)0x10000) /*!< External interrupt line 16 Connected to the PVD Output */
130 #define EXTI_LINE17 ((uint32_t)0x20000) /*!< External interrupt line 17 Connected to the RTC Alarm event */
131 #define EXTI_LINE18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the USB Device/USB OTG FS Wakeup from suspend event */
132 #define EXTI_LINE19 ((uint32_t)0x80000)  /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
133 #define EXTI_LINE20 ((uint32_t)0x100000) /*!< External interrupt line 20 Connected to the RTC Wakeup event */
134 #define EXTI_LINE21 ((uint32_t)0x200000) /*!< External interrupt line 21 Connected to the TSC event */
135 
136 #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFC00000) == 0x00) && ((LINE) != (uint16_t)0x00))
137 #define IS_GET_EXTI_LINE(LINE)                                                                                         \
138     (((LINE) == EXTI_LINE0) || ((LINE) == EXTI_LINE1) || ((LINE) == EXTI_LINE2) || ((LINE) == EXTI_LINE3)              \
139      || ((LINE) == EXTI_LINE4) || ((LINE) == EXTI_LINE5) || ((LINE) == EXTI_LINE6) || ((LINE) == EXTI_LINE7)           \
140      || ((LINE) == EXTI_LINE8) || ((LINE) == EXTI_LINE9) || ((LINE) == EXTI_LINE10) || ((LINE) == EXTI_LINE11)         \
141      || ((LINE) == EXTI_LINE12) || ((LINE) == EXTI_LINE13) || ((LINE) == EXTI_LINE14) || ((LINE) == EXTI_LINE15)       \
142      || ((LINE) == EXTI_LINE16) || ((LINE) == EXTI_LINE17) || ((LINE) == EXTI_LINE18) || ((LINE) == EXTI_LINE19)       \
143      || ((LINE) == EXTI_LINE20) || ((LINE) == EXTI_LINE21))
144 
145 /**
146  * @}
147  */
148 
149 /** @addtogroup EXTI_TSSEL_Line
150  * @{
151  */
152 
153 
154 #define IS_EXTI_TSSEL_LINE(LINE)                                                                                       \
155     (((LINE) == EXTI_TSSEL_LINE0) || ((LINE) == EXTI_TSSEL_LINE1) || ((LINE) == EXTI_TSSEL_LINE2)                      \
156      || ((LINE) == EXTI_TSSEL_LINE3) || ((LINE) == EXTI_TSSEL_LINE4) || ((LINE) == EXTI_TSSEL_LINE5)                   \
157      || ((LINE) == EXTI_TSSEL_LINE6) || ((LINE) == EXTI_TSSEL_LINE7) || ((LINE) == EXTI_TSSEL_LINE8)                   \
158      || ((LINE) == EXTI_TSSEL_LINE9) || ((LINE) == EXTI_TSSEL_LINE10) || ((LINE) == EXTI_TSSEL_LINE11)                 \
159      || ((LINE) == EXTI_TSSEL_LINE12) || ((LINE) == EXTI_TSSEL_LINE13) || ((LINE) == EXTI_TSSEL_LINE14)                \
160      || ((LINE) == EXTI_TSSEL_LINE15))
161 /**
162  * @}
163  */
164 
165 /**
166  * @}
167  */
168 
169 /** @addtogroup EXTI_Exported_Macros
170  * @{
171  */
172 
173 /**
174  * @}
175  */
176 
177 /** @addtogroup EXTI_Exported_Functions
178  * @{
179  */
180 
181 void EXTI_DeInit(void);
182 void EXTI_InitPeripheral(EXTI_InitType* EXTI_InitStruct);
183 void EXTI_InitStruct(EXTI_InitType* EXTI_InitStruct);
184 void EXTI_TriggerSWInt(uint32_t EXTI_Line);
185 FlagStatus EXTI_GetStatusFlag(uint32_t EXTI_Line);
186 void EXTI_ClrStatusFlag(uint32_t EXTI_Line);
187 INTStatus EXTI_GetITStatus(uint32_t EXTI_Line);
188 void EXTI_ClrITPendBit(uint32_t EXTI_Line);
189 void EXTI_RTCTimeStampSel(uint32_t EXTI_TSSEL_Line);
190 
191 #ifdef __cplusplus
192 }
193 #endif
194 
195 #endif /* __N32G4FR_EXTI_H__ */
196 /**
197  * @}
198  */
199 
200 /**
201  * @}
202  */
203 
204 /**
205  * @}
206  */
207