123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- * Copyright (c) 2016, Freescale Semiconductor, Inc.
- * Copyright 2016-2018 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)
- {
- #if defined(FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR) && (FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR)
- base->DIRCLR[port] = 1U << pin;
- #else
- base->DIR[port] &= ~(1U << pin);
- #endif /*FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR*/
- }
- else
- {
- /* Set default output value */
- if (config->outputLogic == 0U)
- {
- base->CLR[port] = (1U << pin);
- }
- else
- {
- base->SET[port] = (1U << pin);
- }
- /* Set pin direction */
- #if defined(FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR) && (FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR)
- base->DIRSET[port] = 1U << pin;
- #else
- base->DIR[port] |= 1U << pin;
- #endif /*FSL_FEATURE_GPIO_DIRSET_AND_DIRCLR*/
- }
- }
|