| /* |
| * Copyright (c) 2016, Freescale Semiconductor, Inc. |
| * Copyright 2016-2017 NXP |
| * All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #include "fsl_gpio.h" |
| |
| /* Component ID definition, used by tools. */ |
| #ifndef FSL_COMPONENT_ID |
| #define FSL_COMPONENT_ID "platform.drivers.lpc_gpio" |
| #endif |
| |
| /******************************************************************************* |
| * Variables |
| ******************************************************************************/ |
| #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) |
| /*! @brief Array to map FGPIO instance number to clock name. */ |
| static const clock_ip_name_t s_gpioClockName[] = GPIO_CLOCKS; |
| #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ |
| |
| #if !(defined(FSL_FEATURE_GPIO_HAS_NO_RESET) && FSL_FEATURE_GPIO_HAS_NO_RESET) |
| /*! @brief Pointers to GPIO resets for each instance. */ |
| static const reset_ip_name_t s_gpioResets[] = GPIO_RSTS_N; |
| #endif |
| /******************************************************************************* |
| * Prototypes |
| ************ ******************************************************************/ |
| |
| /******************************************************************************* |
| * Code |
| ******************************************************************************/ |
| /*! |
| * brief Initializes the GPIO peripheral. |
| * |
| * This function ungates the GPIO clock. |
| * |
| * param base GPIO peripheral base pointer. |
| * param port GPIO port number. |
| */ |
| void GPIO_PortInit(GPIO_Type *base, uint32_t port) |
| { |
| #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) |
| assert(port < ARRAY_SIZE(s_gpioClockName)); |
| |
| /* Upgate the GPIO clock */ |
| CLOCK_EnableClock(s_gpioClockName[port]); |
| #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ |
| #if !(defined(FSL_FEATURE_GPIO_HAS_NO_RESET) && FSL_FEATURE_GPIO_HAS_NO_RESET) |
| /* Reset the GPIO module */ |
| RESET_PeripheralReset(s_gpioResets[port]); |
| #endif |
| } |
| |
| /*! |
| * brief Initializes a GPIO pin used by the board. |
| * |
| * To initialize the GPIO, define a pin configuration, either input or output, in the user file. |
| * Then, call the GPIO_PinInit() function. |
| * |
| * This is an example to define an input pin or output pin configuration: |
| * code |
| * // Define a digital input pin configuration, |
| * gpio_pin_config_t config = |
| * { |
| * kGPIO_DigitalInput, |
| * 0, |
| * } |
| * //Define a digital output pin configuration, |
| * gpio_pin_config_t config = |
| * { |
| * kGPIO_DigitalOutput, |
| * 0, |
| * } |
| * endcode |
| * |
| * param base GPIO peripheral base pointer(Typically GPIO) |
| * param port GPIO port number |
| * param pin GPIO pin number |
| * param config GPIO pin configuration pointer |
| */ |
| void GPIO_PinInit(GPIO_Type *base, uint32_t port, uint32_t pin, const gpio_pin_config_t *config) |
| { |
| if (config->pinDirection == kGPIO_DigitalInput) |
| { |
| base->DIR[port] &= ~(1U << pin); |
| } |
| else |
| { |
| /* Set default output value */ |
| if (config->outputLogic == 0U) |
| { |
| base->CLR[port] = (1U << pin); |
| } |
| else |
| { |
| base->SET[port] = (1U << pin); |
| } |
| /* Set pin direction */ |
| base->DIR[port] |= 1U << pin; |
| } |
| } |