1 /*
2 * Copyright (c) 2016, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017, 2020, 2022 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #ifndef FSL_GINT_H_
10 #define FSL_GINT_H_
11
12 #include "fsl_common.h"
13
14 /*!
15 * @addtogroup gint_driver
16 * @{
17 */
18
19 /*! @file */
20
21 /*******************************************************************************
22 * Definitions
23 ******************************************************************************/
24
25 /*! @name Driver version */
26 /*! @{ */
27 #define FSL_GINT_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) /*!< Driver version. */
28 /*! @} */
29
30 /*! @brief GINT combine inputs type */
31 typedef enum _gint_comb
32 {
33 kGINT_CombineOr = 0U, /*!< A grouped interrupt is generated when any one of the enabled inputs is active */
34 kGINT_CombineAnd = 1U /*!< A grouped interrupt is generated when all enabled inputs are active */
35 } gint_comb_t;
36
37 /*! @brief GINT trigger type */
38 typedef enum _gint_trig
39 {
40 kGINT_TrigEdge = 0U, /*!< Edge triggered based on polarity */
41 kGINT_TrigLevel = 1U /*!< Level triggered based on polarity */
42 } gint_trig_t;
43
44 /* @brief GINT port type */
45 typedef enum _gint_port
46 {
47 kGINT_Port0 = 0U,
48 #if !(defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT <= 1U))
49 kGINT_Port1 = 1U,
50 #endif
51 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 2U)
52 kGINT_Port2 = 2U,
53 #endif
54 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 3U)
55 kGINT_Port3 = 3U,
56 #endif
57 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 4U)
58 kGINT_Port4 = 4U,
59 #endif
60 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 5U)
61 kGINT_Port5 = 5U,
62 #endif
63 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 6U)
64 kGINT_Port6 = 6U,
65 #endif
66 #if defined(FSL_FEATURE_GINT_PORT_COUNT) && (FSL_FEATURE_GINT_PORT_COUNT > 7U)
67 kGINT_Port7 = 7U,
68 #endif
69 } gint_port_t;
70
71 /*! @brief GINT Callback function. */
72 typedef void (*gint_cb_t)(void);
73
74 /*******************************************************************************
75 * API
76 ******************************************************************************/
77
78 #if defined(__cplusplus)
79 extern "C" {
80 #endif
81
82 /*!
83 * @brief Initialize GINT peripheral.
84
85 * This function initializes the GINT peripheral and enables the clock.
86 *
87 * @param base Base address of the GINT peripheral.
88 *
89 * @retval None.
90 */
91 void GINT_Init(GINT_Type *base);
92
93 /*!
94 * @brief Setup GINT peripheral control parameters.
95
96 * This function sets the control parameters of GINT peripheral.
97 *
98 * @param base Base address of the GINT peripheral.
99 * @param comb Controls if the enabled inputs are logically ORed or ANDed for interrupt generation.
100 * @param trig Controls if the enabled inputs are level or edge sensitive based on polarity.
101 * @param callback This function is called when configured group interrupt is generated.
102 *
103 * @retval None.
104 */
105 void GINT_SetCtrl(GINT_Type *base, gint_comb_t comb, gint_trig_t trig, gint_cb_t callback);
106
107 /*!
108 * @brief Get GINT peripheral control parameters.
109
110 * This function returns the control parameters of GINT peripheral.
111 *
112 * @param base Base address of the GINT peripheral.
113 * @param comb Pointer to store combine input value.
114 * @param trig Pointer to store trigger value.
115 * @param callback Pointer to store callback function.
116 *
117 * @retval None.
118 */
119 void GINT_GetCtrl(GINT_Type *base, gint_comb_t *comb, gint_trig_t *trig, gint_cb_t *callback);
120
121 /*!
122 * @brief Configure GINT peripheral pins.
123
124 * This function enables and controls the polarity of enabled pin(s) of a given port.
125 *
126 * @param base Base address of the GINT peripheral.
127 * @param port Port number.
128 * @param polarityMask Each bit position selects the polarity of the corresponding enabled pin.
129 * 0 = The pin is active LOW. 1 = The pin is active HIGH.
130 * @param enableMask Each bit position selects if the corresponding pin is enabled or not.
131 * 0 = The pin is disabled. 1 = The pin is enabled.
132 *
133 * @retval None.
134 */
135 void GINT_ConfigPins(GINT_Type *base, gint_port_t port, uint32_t polarityMask, uint32_t enableMask);
136
137 /*!
138 * @brief Get GINT peripheral pin configuration.
139
140 * This function returns the pin configuration of a given port.
141 *
142 * @param base Base address of the GINT peripheral.
143 * @param port Port number.
144 * @param polarityMask Pointer to store the polarity mask Each bit position indicates the polarity of the corresponding
145 enabled pin.
146 * 0 = The pin is active LOW. 1 = The pin is active HIGH.
147 * @param enableMask Pointer to store the enable mask. Each bit position indicates if the corresponding pin is enabled
148 or not.
149 * 0 = The pin is disabled. 1 = The pin is enabled.
150 *
151 * @retval None.
152 */
153 void GINT_GetConfigPins(GINT_Type *base, gint_port_t port, uint32_t *polarityMask, uint32_t *enableMask);
154
155 /*!
156 * @brief Enable callback.
157
158 * This function enables the interrupt for the selected GINT peripheral. Although the pin(s) are monitored
159 * as soon as they are enabled, the callback function is not enabled until this function is called.
160 *
161 * @param base Base address of the GINT peripheral.
162 *
163 * @retval None.
164 */
165 void GINT_EnableCallback(GINT_Type *base);
166
167 /*!
168 * @brief Disable callback.
169
170 * This function disables the interrupt for the selected GINT peripheral. Although the pins are still
171 * being monitored but the callback function is not called.
172 *
173 * @param base Base address of the peripheral.
174 *
175 * @retval None.
176 */
177 void GINT_DisableCallback(GINT_Type *base);
178
179 /*!
180 * @brief Clear GINT status.
181
182 * This function clears the GINT status bit.
183 *
184 * @param base Base address of the GINT peripheral.
185 *
186 * @retval None.
187 */
GINT_ClrStatus(GINT_Type * base)188 static inline void GINT_ClrStatus(GINT_Type *base)
189 {
190 base->CTRL |= GINT_CTRL_INT_MASK;
191 }
192
193 /*!
194 * @brief Get GINT status.
195
196 * This function returns the GINT status.
197 *
198 * @param base Base address of the GINT peripheral.
199 *
200 * @retval status = 0 No group interrupt request. = 1 Group interrupt request active.
201 */
GINT_GetStatus(GINT_Type * base)202 static inline uint32_t GINT_GetStatus(GINT_Type *base)
203 {
204 return (base->CTRL & GINT_CTRL_INT_MASK);
205 }
206
207 /*!
208 * @brief Deinitialize GINT peripheral.
209
210 * This function disables the GINT clock.
211 *
212 * @param base Base address of the GINT peripheral.
213 *
214 * @retval None.
215 */
216 void GINT_Deinit(GINT_Type *base);
217
218 #ifdef __cplusplus
219 }
220 #endif
221
222 /*! @} */
223
224 #endif /* FSL_GINT_H_ */
225