]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_gpio.c
8d452a95c11cdb943500b87e74c544ffbf235532
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / drivers / fsl_gpio.c
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 #include "fsl_gpio.h"\r
10 \r
11 /* Component ID definition, used by tools. */\r
12 #ifndef FSL_COMPONENT_ID\r
13 #define FSL_COMPONENT_ID "platform.drivers.lpc_gpio"\r
14 #endif\r
15 \r
16 /*******************************************************************************\r
17  * Variables\r
18  ******************************************************************************/\r
19 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)\r
20 /*! @brief Array to map FGPIO instance number to clock name. */\r
21 static const clock_ip_name_t s_gpioClockName[] = GPIO_CLOCKS;\r
22 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */\r
23 \r
24 #if !(defined(FSL_FEATURE_GPIO_HAS_NO_RESET) && FSL_FEATURE_GPIO_HAS_NO_RESET)\r
25 /*! @brief Pointers to GPIO resets for each instance. */\r
26 static const reset_ip_name_t s_gpioResets[] = GPIO_RSTS_N;\r
27 #endif\r
28 /*******************************************************************************\r
29 * Prototypes\r
30 ************ ******************************************************************/\r
31 \r
32 /*******************************************************************************\r
33  * Code\r
34  ******************************************************************************/\r
35 /*!\r
36  * brief Initializes the GPIO peripheral.\r
37  *\r
38  * This function ungates the GPIO clock.\r
39  *\r
40  * param base   GPIO peripheral base pointer.\r
41  * param port   GPIO port number.\r
42  */\r
43 void GPIO_PortInit(GPIO_Type *base, uint32_t port)\r
44 {\r
45 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)\r
46     assert(port < ARRAY_SIZE(s_gpioClockName));\r
47 \r
48     /* Upgate the GPIO clock */\r
49     CLOCK_EnableClock(s_gpioClockName[port]);\r
50 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */\r
51 #if !(defined(FSL_FEATURE_GPIO_HAS_NO_RESET) && FSL_FEATURE_GPIO_HAS_NO_RESET)\r
52     /* Reset the GPIO module */\r
53     RESET_PeripheralReset(s_gpioResets[port]);\r
54 #endif\r
55 }\r
56 \r
57 /*!\r
58  * brief Initializes a GPIO pin used by the board.\r
59  *\r
60  * To initialize the GPIO, define a pin configuration, either input or output, in the user file.\r
61  * Then, call the GPIO_PinInit() function.\r
62  *\r
63  * This is an example to define an input pin or output pin configuration:\r
64  * code\r
65  * // Define a digital input pin configuration,\r
66  * gpio_pin_config_t config =\r
67  * {\r
68  *   kGPIO_DigitalInput,\r
69  *   0,\r
70  * }\r
71  * //Define a digital output pin configuration,\r
72  * gpio_pin_config_t config =\r
73  * {\r
74  *   kGPIO_DigitalOutput,\r
75  *   0,\r
76  * }\r
77  * endcode\r
78  *\r
79  * param base   GPIO peripheral base pointer(Typically GPIO)\r
80  * param port   GPIO port number\r
81  * param pin    GPIO pin number\r
82  * param config GPIO pin configuration pointer\r
83  */\r
84 void GPIO_PinInit(GPIO_Type *base, uint32_t port, uint32_t pin, const gpio_pin_config_t *config)\r
85 {\r
86     if (config->pinDirection == kGPIO_DigitalInput)\r
87     {\r
88 #if defined(FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR) && (FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR)\r
89         base->DIRCLR[port] = 1U << pin;\r
90 #else\r
91         base->DIR[port] &= ~(1U << pin);\r
92 #endif /*FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR*/\r
93     }\r
94     else\r
95     {\r
96         /* Set default output value */\r
97         if (config->outputLogic == 0U)\r
98         {\r
99             base->CLR[port] = (1U << pin);\r
100         }\r
101         else\r
102         {\r
103             base->SET[port] = (1U << pin);\r
104         }\r
105 /* Set pin direction */\r
106 #if defined(FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR) && (FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR)\r
107         base->DIRSET[port] = 1U << pin;\r
108 #else\r
109         base->DIR[port] |= 1U << pin;\r
110 #endif /*FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR*/\r
111     }\r
112 }\r