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_exti.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_EXTI_H__
36 #define __N32L40X_EXTI_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 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 USB Device/USB OTG FS Wakeup from suspend event */
131 #define EXTI_LINE18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the RTC Alarm event */
132 #define EXTI_LINE19 ((uint32_t)0x80000)  /*!< External interrupt line 19 Connected to the RTC Time stamp 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 COMP1 Global interrupt */
135 #define EXTI_LINE22 ((uint32_t)0x400000) /*!< External interrupt line 22 Connected to the COMP2 Global interrupt */
136 #define EXTI_LINE23 ((uint32_t)0x800000) /*!< External interrupt line 23 Connected to the LPUART Global interrupt */
137 #define EXTI_LINE24 ((uint32_t)0x1000000) /*!< External interrupt line 24 Connected to the LPTIM Global interrupt */
138 #define EXTI_LINE25 ((uint32_t)0x2000000) /*!< External interrupt line 25 Connected to the TSC Global interrupt */
139 #define EXTI_LINE26 ((uint32_t)0x4000000) /*!< External interrupt line 26 Connected to the LCD Global interrupt */
140 
141 
142 
143 
144 
145 
146 
147 #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xF0000000) == 0x00) && ((LINE) != (uint16_t)0x00))
148 #define IS_GET_EXTI_LINE(LINE)                                                                                         \
149     (((LINE) == EXTI_LINE0) || ((LINE) == EXTI_LINE1) || ((LINE) == EXTI_LINE2) || ((LINE) == EXTI_LINE3)              \
150      || ((LINE) == EXTI_LINE4) || ((LINE) == EXTI_LINE5) || ((LINE) == EXTI_LINE6) || ((LINE) == EXTI_LINE7)           \
151      || ((LINE) == EXTI_LINE8) || ((LINE) == EXTI_LINE9) || ((LINE) == EXTI_LINE10) || ((LINE) == EXTI_LINE11)         \
152      || ((LINE) == EXTI_LINE12) || ((LINE) == EXTI_LINE13) || ((LINE) == EXTI_LINE14) || ((LINE) == EXTI_LINE15)       \
153      || ((LINE) == EXTI_LINE16) || ((LINE) == EXTI_LINE17) || ((LINE) == EXTI_LINE18) || ((LINE) == EXTI_LINE19)       \
154      || ((LINE) == EXTI_LINE20) || ((LINE) == EXTI_LINE21) || ((LINE) == EXTI_LINE22) || ((LINE) == EXTI_LINE23)         \
155      || ((LINE) == EXTI_LINE24) || ((LINE) == EXTI_LINE25) || ((LINE) == EXTI_LINE26))
156 
157 /**
158  * @}
159  */
160 
161 /** @addtogroup EXTI_TSSEL_Line
162  * @{
163  */
164 #define EXTI_TSSEL_LINE_MASK ((uint32_t)0x00000)
165 #define EXTI_TSSEL_LINE0     ((uint32_t)0x00000) /*!< External interrupt line 0 */
166 #define EXTI_TSSEL_LINE1     ((uint32_t)0x00001) /*!< External interrupt line 1 */
167 #define EXTI_TSSEL_LINE2     ((uint32_t)0x00002) /*!< External interrupt line 2 */
168 #define EXTI_TSSEL_LINE3     ((uint32_t)0x00003) /*!< External interrupt line 3 */
169 #define EXTI_TSSEL_LINE4     ((uint32_t)0x00004) /*!< External interrupt line 4 */
170 #define EXTI_TSSEL_LINE5     ((uint32_t)0x00005) /*!< External interrupt line 5 */
171 #define EXTI_TSSEL_LINE6     ((uint32_t)0x00006) /*!< External interrupt line 6 */
172 #define EXTI_TSSEL_LINE7     ((uint32_t)0x00007) /*!< External interrupt line 7 */
173 #define EXTI_TSSEL_LINE8     ((uint32_t)0x00008) /*!< External interrupt line 8 */
174 #define EXTI_TSSEL_LINE9     ((uint32_t)0x00009) /*!< External interrupt line 9 */
175 #define EXTI_TSSEL_LINE10    ((uint32_t)0x0000A) /*!< External interrupt line 10 */
176 #define EXTI_TSSEL_LINE11    ((uint32_t)0x0000B) /*!< External interrupt line 11 */
177 #define EXTI_TSSEL_LINE12    ((uint32_t)0x0000C) /*!< External interrupt line 12 */
178 #define EXTI_TSSEL_LINE13    ((uint32_t)0x0000D) /*!< External interrupt line 13 */
179 #define EXTI_TSSEL_LINE14    ((uint32_t)0x0000E) /*!< External interrupt line 14 */
180 #define EXTI_TSSEL_LINE15    ((uint32_t)0x0000F) /*!< External interrupt line 15 */
181 
182 #define IS_EXTI_TSSEL_LINE(LINE)                                                                                       \
183     (((LINE) == EXTI_TSSEL_LINE0) || ((LINE) == EXTI_TSSEL_LINE1) || ((LINE) == EXTI_TSSEL_LINE2)                      \
184      || ((LINE) == EXTI_TSSEL_LINE3) || ((LINE) == EXTI_TSSEL_LINE4) || ((LINE) == EXTI_TSSEL_LINE5)                   \
185      || ((LINE) == EXTI_TSSEL_LINE6) || ((LINE) == EXTI_TSSEL_LINE7) || ((LINE) == EXTI_TSSEL_LINE8)                   \
186      || ((LINE) == EXTI_TSSEL_LINE9) || ((LINE) == EXTI_TSSEL_LINE10) || ((LINE) == EXTI_TSSEL_LINE11)                 \
187      || ((LINE) == EXTI_TSSEL_LINE12) || ((LINE) == EXTI_TSSEL_LINE13) || ((LINE) == EXTI_TSSEL_LINE14)                \
188      || ((LINE) == EXTI_TSSEL_LINE15))
189 /**
190  * @}
191  */
192 
193 /**
194  * @}
195  */
196 
197 /** @addtogroup EXTI_Exported_Macros
198  * @{
199  */
200 
201 /**
202  * @}
203  */
204 
205 /** @addtogroup EXTI_Exported_Functions
206  * @{
207  */
208 
209 void EXTI_DeInit(void);
210 void EXTI_InitPeripheral(EXTI_InitType* EXTI_InitStruct);
211 void EXTI_InitStruct(EXTI_InitType* EXTI_InitStruct);
212 void EXTI_TriggerSWInt(uint32_t EXTI_Line);
213 FlagStatus EXTI_GetStatusFlag(uint32_t EXTI_Line);
214 void EXTI_ClrStatusFlag(uint32_t EXTI_Line);
215 INTStatus EXTI_GetITStatus(uint32_t EXTI_Line);
216 void EXTI_ClrITPendBit(uint32_t EXTI_Line);
217 void EXTI_RTCTimeStampSel(uint32_t EXTI_TSSEL_Line);
218 
219 #ifdef __cplusplus
220 }
221 #endif
222 
223 #endif /* __N32L40X_EXTI_H__ */
224 /**
225  * @}
226  */
227 
228 /**
229  * @}
230  */
231 
232 /**
233  * @}
234  */
235