]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_gpio.h
c2505eafce437a891caa17fc84252a5caa4072f6
[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-2018 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 2.1.3. */\r
28 #define FSL_GPIO_DRIVER_VERSION (MAKE_VERSION(2, 1, 3))\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 /*******************************************************************************\r
52  * API\r
53  ******************************************************************************/\r
54 #if defined(__cplusplus)\r
55 extern "C" {\r
56 #endif\r
57 \r
58 /*! @name GPIO Configuration */\r
59 /*@{*/\r
60 \r
61 /*!\r
62  * @brief Initializes the GPIO peripheral.\r
63  *\r
64  * This function ungates the GPIO clock.\r
65  *\r
66  * @param base   GPIO peripheral base pointer.\r
67  * @param port   GPIO port number.\r
68  */\r
69 void GPIO_PortInit(GPIO_Type *base, uint32_t port);\r
70 \r
71 /*!\r
72  * @brief Initializes a GPIO pin used by the board.\r
73  *\r
74  * To initialize the GPIO, define a pin configuration, either input or output, in the user file.\r
75  * Then, call the GPIO_PinInit() function.\r
76  *\r
77  * This is an example to define an input pin or output pin configuration:\r
78  * @code\r
79  * // Define a digital input pin configuration,\r
80  * gpio_pin_config_t config =\r
81  * {\r
82  *   kGPIO_DigitalInput,\r
83  *   0,\r
84  * }\r
85  * //Define a digital output pin configuration,\r
86  * gpio_pin_config_t config =\r
87  * {\r
88  *   kGPIO_DigitalOutput,\r
89  *   0,\r
90  * }\r
91  * @endcode\r
92  *\r
93  * @param base   GPIO peripheral base pointer(Typically GPIO)\r
94  * @param port   GPIO port number\r
95  * @param pin    GPIO pin number\r
96  * @param config GPIO pin configuration pointer\r
97  */\r
98 void GPIO_PinInit(GPIO_Type *base, uint32_t port, uint32_t pin, const gpio_pin_config_t *config);\r
99 \r
100 /*@}*/\r
101 \r
102 /*! @name GPIO Output Operations */\r
103 /*@{*/\r
104 \r
105 /*!\r
106  * @brief Sets the output level of the one GPIO pin to the logic 1 or 0.\r
107  *\r
108  * @param base    GPIO peripheral base pointer(Typically GPIO)\r
109  * @param port   GPIO port number\r
110  * @param pin    GPIO pin number\r
111  * @param output  GPIO pin output logic level.\r
112  *        - 0: corresponding pin output low-logic level.\r
113  *        - 1: corresponding pin output high-logic level.\r
114  */\r
115 static inline void GPIO_PinWrite(GPIO_Type *base, uint32_t port, uint32_t pin, uint8_t output)\r
116 {\r
117     base->B[port][pin] = output;\r
118 }\r
119 \r
120 /*@}*/\r
121 /*! @name GPIO Input Operations */\r
122 /*@{*/\r
123 \r
124 /*!\r
125  * @brief Reads the current input value of the GPIO PIN.\r
126  *\r
127  * @param base GPIO peripheral base pointer(Typically GPIO)\r
128  * @param port   GPIO port number\r
129  * @param pin    GPIO pin number\r
130  * @retval GPIO port input value\r
131  *        - 0: corresponding pin input low-logic level.\r
132  *        - 1: corresponding pin input high-logic level.\r
133  */\r
134 static inline uint32_t GPIO_PinRead(GPIO_Type *base, uint32_t port, uint32_t pin)\r
135 {\r
136     return (uint32_t)base->B[port][pin];\r
137 }\r
138 \r
139 /*@}*/\r
140 \r
141 /*!\r
142  * @brief Sets the output level of the multiple GPIO pins to the logic 1.\r
143  *\r
144  * @param base GPIO peripheral base pointer(Typically GPIO)\r
145  * @param port GPIO port number\r
146  * @param mask GPIO pin number macro\r
147  */\r
148 static inline void GPIO_PortSet(GPIO_Type *base, uint32_t port, uint32_t mask)\r
149 {\r
150     base->SET[port] = mask;\r
151 }\r
152 \r
153 /*!\r
154  * @brief Sets the output level of the multiple GPIO pins to the logic 0.\r
155  *\r
156  * @param base GPIO peripheral base pointer(Typically GPIO)\r
157  * @param port GPIO port number\r
158  * @param mask GPIO pin number macro\r
159  */\r
160 static inline void GPIO_PortClear(GPIO_Type *base, uint32_t port, uint32_t mask)\r
161 {\r
162     base->CLR[port] = mask;\r
163 }\r
164 \r
165 /*!\r
166  * @brief Reverses current output logic of the multiple GPIO pins.\r
167  *\r
168  * @param base GPIO peripheral base pointer(Typically GPIO)\r
169  * @param port GPIO port number\r
170  * @param mask GPIO pin number macro\r
171  */\r
172 static inline void GPIO_PortToggle(GPIO_Type *base, uint32_t port, uint32_t mask)\r
173 {\r
174     base->NOT[port] = mask;\r
175 }\r
176 \r
177 /*@}*/\r
178 \r
179 /*!\r
180  * @brief Reads the current input value of the whole GPIO port.\r
181  *\r
182  * @param base GPIO peripheral base pointer(Typically GPIO)\r
183  * @param port GPIO port number\r
184  */\r
185 static inline uint32_t GPIO_PortRead(GPIO_Type *base, uint32_t port)\r
186 {\r
187     return (uint32_t)base->PIN[port];\r
188 }\r
189 \r
190 /*@}*/\r
191 /*! @name GPIO Mask Operations */\r
192 /*@{*/\r
193 \r
194 /*!\r
195  * @brief Sets port mask, 0 - enable pin, 1 - disable pin.\r
196  *\r
197  * @param base GPIO peripheral base pointer(Typically GPIO)\r
198  * @param port GPIO port number\r
199  * @param mask GPIO pin number macro\r
200  */\r
201 static inline void GPIO_PortMaskedSet(GPIO_Type *base, uint32_t port, uint32_t mask)\r
202 {\r
203     base->MASK[port] = mask;\r
204 }\r
205 \r
206 /*!\r
207  * @brief Sets the output level of the masked GPIO port. Only pins enabled by GPIO_SetPortMask() will be affected.\r
208  *\r
209  * @param base    GPIO peripheral base pointer(Typically GPIO)\r
210  * @param port   GPIO port number\r
211  * @param output  GPIO port output value.\r
212  */\r
213 static inline void GPIO_PortMaskedWrite(GPIO_Type *base, uint32_t port, uint32_t output)\r
214 {\r
215     base->MPIN[port] = output;\r
216 }\r
217 \r
218 /*!\r
219  * @brief Reads the current input value of the masked GPIO port. Only pins enabled by GPIO_SetPortMask() will be\r
220  * affected.\r
221  *\r
222  * @param base   GPIO peripheral base pointer(Typically GPIO)\r
223  * @param port   GPIO port number\r
224  * @retval       masked GPIO port value\r
225  */\r
226 static inline uint32_t GPIO_PortMaskedRead(GPIO_Type *base, uint32_t port)\r
227 {\r
228     return (uint32_t)base->MPIN[port];\r
229 }\r
230 \r
231 /*@}*/\r
232 \r
233 #if defined(__cplusplus)\r
234 }\r
235 #endif\r
236 \r
237 /*!\r
238  * @}\r
239  */\r
240 \r
241 #endif /* _LPC_GPIO_H_*/\r