]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_gpio.h
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / drivers / fsl_gpio.h
1 /*\r
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.\r
3  * Copyright 2016-2019 NXP\r
4  * All rights reserved.\r
5  *\r
6  * SPDX-License-Identifier: BSD-3-Clause\r
7  */\r
8 \r
9 #ifndef _LPC_GPIO_H_\r
10 #define _LPC_GPIO_H_\r
11 \r
12 #include "fsl_common.h"\r
13 \r
14 /*!\r
15  * @addtogroup lpc_gpio\r
16  * @{\r
17  */\r
18 \r
19 /*! @file */\r
20 \r
21 /*******************************************************************************\r
22  * Definitions\r
23  ******************************************************************************/\r
24 \r
25 /*! @name Driver version */\r
26 /*@{*/\r
27 /*! @brief LPC GPIO driver version. */\r
28 #define FSL_GPIO_DRIVER_VERSION (MAKE_VERSION(2, 1, 5))\r
29 /*@}*/\r
30 \r
31 /*! @brief LPC GPIO direction definition */\r
32 typedef enum _gpio_pin_direction\r
33 {\r
34     kGPIO_DigitalInput  = 0U, /*!< Set current pin as digital input*/\r
35     kGPIO_DigitalOutput = 1U, /*!< Set current pin as digital output*/\r
36 } gpio_pin_direction_t;\r
37 \r
38 /*!\r
39  * @brief The GPIO pin configuration structure.\r
40  *\r
41  * Every pin can only be configured as either output pin or input pin at a time.\r
42  * If configured as a input pin, then leave the outputConfig unused.\r
43  */\r
44 typedef struct _gpio_pin_config\r
45 {\r
46     gpio_pin_direction_t pinDirection; /*!< GPIO direction, input or output */\r
47     /* Output configurations, please ignore if configured as a input one */\r
48     uint8_t outputLogic; /*!< Set default output logic, no use in input */\r
49 } gpio_pin_config_t;\r
50 \r
51 #if (defined(FSL_FEATURE_GPIO_HAS_INTERRUPT) && FSL_FEATURE_GPIO_HAS_INTERRUPT)\r
52 #define GPIO_PIN_INT_LEVEL 0x00U\r
53 #define GPIO_PIN_INT_EDGE 0x01U\r
54 \r
55 #define PINT_PIN_INT_HIGH_OR_RISE_TRIGGER 0x00U\r
56 #define PINT_PIN_INT_LOW_OR_FALL_TRIGGER 0x01U\r
57 \r
58 /*! @brief GPIO Pin Interrupt enable mode */\r
59 typedef enum _gpio_pin_enable_mode\r
60 {\r
61     kGPIO_PinIntEnableLevel = GPIO_PIN_INT_LEVEL, /*!< Generate Pin Interrupt on level mode */\r
62     kGPIO_PinIntEnableEdge  = GPIO_PIN_INT_EDGE   /*!< Generate Pin Interrupt on edge mode */\r
63 } gpio_pin_enable_mode_t;\r
64 \r
65 /*! @brief GPIO Pin Interrupt enable polarity */\r
66 typedef enum _gpio_pin_enable_polarity\r
67 {\r
68     kGPIO_PinIntEnableHighOrRise =\r
69         PINT_PIN_INT_HIGH_OR_RISE_TRIGGER, /*!< Generate Pin Interrupt on high level or rising edge */\r
70     kGPIO_PinIntEnableLowOrFall =\r
71         PINT_PIN_INT_LOW_OR_FALL_TRIGGER /*!< Generate Pin Interrupt on low level or falling edge */\r
72 } gpio_pin_enable_polarity_t;\r
73 \r
74 /*! @brief LPC GPIO interrupt index definition */\r
75 typedef enum _gpio_interrupt_index\r
76 {\r
77     kGPIO_InterruptA = 0U, /*!< Set current pin as interrupt A*/\r
78     kGPIO_InterruptB = 1U, /*!< Set current pin as interrupt B*/\r
79 } gpio_interrupt_index_t;\r
80 \r
81 /*! @brief Configures the interrupt generation condition. */\r
82 typedef struct _gpio_interrupt_config\r
83 {\r
84     uint8_t mode;     /* The trigger mode of GPIO interrupts */\r
85     uint8_t polarity; /* The polarity of GPIO interrupts */\r
86 } gpio_interrupt_config_t;\r
87 #endif\r
88 \r
89 /*******************************************************************************\r
90  * API\r
91  ******************************************************************************/\r
92 #if defined(__cplusplus)\r
93 extern "C" {\r
94 #endif\r
95 \r
96 /*! @name GPIO Configuration */\r
97 /*@{*/\r
98 \r
99 /*!\r
100  * @brief Initializes the GPIO peripheral.\r
101  *\r
102  * This function ungates the GPIO clock.\r
103  *\r
104  * @param base   GPIO peripheral base pointer.\r
105  * @param port   GPIO port number.\r
106  */\r
107 void GPIO_PortInit(GPIO_Type *base, uint32_t port);\r
108 \r
109 /*!\r
110  * @brief Initializes a GPIO pin used by the board.\r
111  *\r
112  * To initialize the GPIO, define a pin configuration, either input or output, in the user file.\r
113  * Then, call the GPIO_PinInit() function.\r
114  *\r
115  * This is an example to define an input pin or output pin configuration:\r
116  * @code\r
117  * Define a digital input pin configuration,\r
118  * gpio_pin_config_t config =\r
119  * {\r
120  *   kGPIO_DigitalInput,\r
121  *   0,\r
122  * }\r
123  * Define a digital output pin configuration,\r
124  * gpio_pin_config_t config =\r
125  * {\r
126  *   kGPIO_DigitalOutput,\r
127  *   0,\r
128  * }\r
129  * @endcode\r
130  *\r
131  * @param base   GPIO peripheral base pointer(Typically GPIO)\r
132  * @param port   GPIO port number\r
133  * @param pin    GPIO pin number\r
134  * @param config GPIO pin configuration pointer\r
135  */\r
136 void GPIO_PinInit(GPIO_Type *base, uint32_t port, uint32_t pin, const gpio_pin_config_t *config);\r
137 \r
138 /*@}*/\r
139 \r
140 /*! @name GPIO Output Operations */\r
141 /*@{*/\r
142 \r
143 /*!\r
144  * @brief Sets the output level of the one GPIO pin to the logic 1 or 0.\r
145  *\r
146  * @param base    GPIO peripheral base pointer(Typically GPIO)\r
147  * @param port   GPIO port number\r
148  * @param pin    GPIO pin number\r
149  * @param output  GPIO pin output logic level.\r
150  *        - 0: corresponding pin output low-logic level.\r
151  *        - 1: corresponding pin output high-logic level.\r
152  */\r
153 static inline void GPIO_PinWrite(GPIO_Type *base, uint32_t port, uint32_t pin, uint8_t output)\r
154 {\r
155     base->B[port][pin] = output;\r
156 }\r
157 \r
158 /*@}*/\r
159 /*! @name GPIO Input Operations */\r
160 /*@{*/\r
161 \r
162 /*!\r
163  * @brief Reads the current input value of the GPIO PIN.\r
164  *\r
165  * @param base GPIO peripheral base pointer(Typically GPIO)\r
166  * @param port   GPIO port number\r
167  * @param pin    GPIO pin number\r
168  * @retval GPIO port input value\r
169  *        - 0: corresponding pin input low-logic level.\r
170  *        - 1: corresponding pin input high-logic level.\r
171  */\r
172 static inline uint32_t GPIO_PinRead(GPIO_Type *base, uint32_t port, uint32_t pin)\r
173 {\r
174     return (uint32_t)base->B[port][pin];\r
175 }\r
176 \r
177 /*@}*/\r
178 \r
179 /*!\r
180  * @brief Sets the output level of the multiple GPIO pins to the logic 1.\r
181  *\r
182  * @param base GPIO peripheral base pointer(Typically GPIO)\r
183  * @param port GPIO port number\r
184  * @param mask GPIO pin number macro\r
185  */\r
186 static inline void GPIO_PortSet(GPIO_Type *base, uint32_t port, uint32_t mask)\r
187 {\r
188     base->SET[port] = mask;\r
189 }\r
190 \r
191 /*!\r
192  * @brief Sets the output level of the multiple GPIO pins to the logic 0.\r
193  *\r
194  * @param base GPIO peripheral base pointer(Typically GPIO)\r
195  * @param port GPIO port number\r
196  * @param mask GPIO pin number macro\r
197  */\r
198 static inline void GPIO_PortClear(GPIO_Type *base, uint32_t port, uint32_t mask)\r
199 {\r
200     base->CLR[port] = mask;\r
201 }\r
202 \r
203 /*!\r
204  * @brief Reverses current output logic of the multiple GPIO pins.\r
205  *\r
206  * @param base GPIO peripheral base pointer(Typically GPIO)\r
207  * @param port GPIO port number\r
208  * @param mask GPIO pin number macro\r
209  */\r
210 static inline void GPIO_PortToggle(GPIO_Type *base, uint32_t port, uint32_t mask)\r
211 {\r
212     base->NOT[port] = mask;\r
213 }\r
214 \r
215 /*@}*/\r
216 \r
217 /*!\r
218  * @brief Reads the current input value of the whole GPIO port.\r
219  *\r
220  * @param base GPIO peripheral base pointer(Typically GPIO)\r
221  * @param port GPIO port number\r
222  */\r
223 static inline uint32_t GPIO_PortRead(GPIO_Type *base, uint32_t port)\r
224 {\r
225     return (uint32_t)base->PIN[port];\r
226 }\r
227 \r
228 /*@}*/\r
229 /*! @name GPIO Mask Operations */\r
230 /*@{*/\r
231 \r
232 /*!\r
233  * @brief Sets port mask, 0 - enable pin, 1 - disable pin.\r
234  *\r
235  * @param base GPIO peripheral base pointer(Typically GPIO)\r
236  * @param port GPIO port number\r
237  * @param mask GPIO pin number macro\r
238  */\r
239 static inline void GPIO_PortMaskedSet(GPIO_Type *base, uint32_t port, uint32_t mask)\r
240 {\r
241     base->MASK[port] = mask;\r
242 }\r
243 \r
244 /*!\r
245  * @brief Sets the output level of the masked GPIO port. Only pins enabled by GPIO_SetPortMask() will be affected.\r
246  *\r
247  * @param base    GPIO peripheral base pointer(Typically GPIO)\r
248  * @param port   GPIO port number\r
249  * @param output  GPIO port output value.\r
250  */\r
251 static inline void GPIO_PortMaskedWrite(GPIO_Type *base, uint32_t port, uint32_t output)\r
252 {\r
253     base->MPIN[port] = output;\r
254 }\r
255 \r
256 /*!\r
257  * @brief Reads the current input value of the masked GPIO port. Only pins enabled by GPIO_SetPortMask() will be\r
258  * affected.\r
259  *\r
260  * @param base   GPIO peripheral base pointer(Typically GPIO)\r
261  * @param port   GPIO port number\r
262  * @retval       masked GPIO port value\r
263  */\r
264 static inline uint32_t GPIO_PortMaskedRead(GPIO_Type *base, uint32_t port)\r
265 {\r
266     return (uint32_t)base->MPIN[port];\r
267 }\r
268 \r
269 #if defined(FSL_FEATURE_GPIO_HAS_INTERRUPT) && FSL_FEATURE_GPIO_HAS_INTERRUPT\r
270 /*!\r
271  * @brief Configures the gpio pin interrupt.\r
272  *\r
273  * @param base GPIO base pointer.\r
274  * @param port GPIO port number\r
275  * @param pin GPIO pin number.\r
276  * @param config GPIO pin interrupt configuration..\r
277  */\r
278 void GPIO_SetPinInterruptConfig(GPIO_Type *base, uint32_t port, uint32_t pin, gpio_interrupt_config_t *config);\r
279 \r
280 /*!\r
281  * @brief Enables multiple pins interrupt.\r
282  *\r
283  * @param base GPIO base pointer.\r
284  * @param port GPIO port number.\r
285  * @param index GPIO interrupt number.\r
286  * @param mask GPIO pin number macro.\r
287  */\r
288 void GPIO_PortEnableInterrupts(GPIO_Type *base, uint32_t port, uint32_t index, uint32_t mask);\r
289 \r
290 /*!\r
291  * @brief Disables multiple pins interrupt.\r
292  *\r
293  * @param base GPIO base pointer.\r
294  * @param port GPIO port number.\r
295  * @param index GPIO interrupt number.\r
296  * @param mask GPIO pin number macro.\r
297  */\r
298 void GPIO_PortDisableInterrupts(GPIO_Type *base, uint32_t port, uint32_t index, uint32_t mask);\r
299 \r
300 /*!\r
301  * @brief Clears pin interrupt flag. Status flags are cleared by\r
302  *        writing a 1 to the corresponding bit position.\r
303  *\r
304  * @param base GPIO base pointer.\r
305  * @param port   GPIO port number.\r
306  * @param index GPIO interrupt number.\r
307  * @param mask GPIO pin number macro.\r
308  */\r
309 void GPIO_PortClearInterruptFlags(GPIO_Type *base, uint32_t port, uint32_t index, uint32_t mask);\r
310 \r
311 /*!\r
312  * @ Read port interrupt status.\r
313  *\r
314  * @param base GPIO base pointer.\r
315  * @param port GPIO port number\r
316  * @param index GPIO interrupt number.\r
317  * @retval masked GPIO status value\r
318  */\r
319 uint32_t GPIO_PortGetInterruptStatus(GPIO_Type *base, uint32_t port, uint32_t index);\r
320 \r
321 /*!\r
322  * @brief Enables the specific pin interrupt.\r
323  *\r
324  * @param base GPIO base pointer.\r
325  * @param port GPIO port number.\r
326  * @param pin GPIO pin number.\r
327  * @param index GPIO interrupt number.\r
328  */\r
329 void GPIO_PinEnableInterrupt(GPIO_Type *base, uint32_t port, uint32_t pin, uint32_t index);\r
330 \r
331 /*!\r
332  * @brief Disables the specific pin interrupt.\r
333  *\r
334  * @param base GPIO base pointer.\r
335  * @param port GPIO port number.\r
336  * @param pin GPIO pin number.\r
337  * @param index GPIO interrupt number.\r
338  */\r
339 void GPIO_PinDisableInterrupt(GPIO_Type *base, uint32_t port, uint32_t pin, uint32_t index);\r
340 \r
341 /*!\r
342  * @brief Clears the specific pin interrupt flag. Status flags are cleared by\r
343  *        writing a 1 to the corresponding bit position.\r
344  *\r
345  * @param base GPIO base pointer.\r
346  * @param port GPIO port number.\r
347  * @param pin GPIO pin number.\r
348  * @param index GPIO interrupt number.\r
349  */\r
350 void GPIO_PinClearInterruptFlag(GPIO_Type *base, uint32_t port, uint32_t pin, uint32_t index);\r
351 \r
352 #endif /* FSL_FEATURE_GPIO_HAS_INTERRUPT */\r
353 \r
354 /*@}*/\r
355 \r
356 #if defined(__cplusplus)\r
357 }\r
358 #endif\r
359 \r
360 /*!\r
361  * @}\r
362  */\r
363 \r
364 #endif /* _LPC_GPIO_H_*/\r