The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 145:64910690c574 1 /*
AnnaBridge 145:64910690c574 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 145:64910690c574 3 * All rights reserved.
AnnaBridge 145:64910690c574 4 *
AnnaBridge 145:64910690c574 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 145:64910690c574 6 * are permitted provided that the following conditions are met:
AnnaBridge 145:64910690c574 7 *
AnnaBridge 145:64910690c574 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 145:64910690c574 9 * of conditions and the following disclaimer.
AnnaBridge 145:64910690c574 10 *
AnnaBridge 145:64910690c574 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 145:64910690c574 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 145:64910690c574 13 * other materials provided with the distribution.
AnnaBridge 145:64910690c574 14 *
AnnaBridge 145:64910690c574 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 145:64910690c574 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 145:64910690c574 17 * software without specific prior written permission.
AnnaBridge 145:64910690c574 18 *
AnnaBridge 145:64910690c574 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 145:64910690c574 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 145:64910690c574 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 145:64910690c574 22 * DISCLAIMED. IN NO EVENT SDRVL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 145:64910690c574 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 145:64910690c574 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 145:64910690c574 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 145:64910690c574 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 145:64910690c574 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 145:64910690c574 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 145:64910690c574 29 */
AnnaBridge 145:64910690c574 30 #ifndef _FSL_PORT_H_
AnnaBridge 145:64910690c574 31 #define _FSL_PORT_H_
AnnaBridge 145:64910690c574 32
AnnaBridge 145:64910690c574 33 #include "fsl_common.h"
AnnaBridge 145:64910690c574 34
AnnaBridge 145:64910690c574 35 /*!
AnnaBridge 145:64910690c574 36 * @addtogroup port
AnnaBridge 145:64910690c574 37 * @{
AnnaBridge 145:64910690c574 38 */
AnnaBridge 145:64910690c574 39
AnnaBridge 145:64910690c574 40
AnnaBridge 145:64910690c574 41 /*******************************************************************************
AnnaBridge 145:64910690c574 42 * Definitions
AnnaBridge 145:64910690c574 43 ******************************************************************************/
AnnaBridge 145:64910690c574 44
AnnaBridge 145:64910690c574 45 /*! @name Driver version */
AnnaBridge 145:64910690c574 46 /*@{*/
AnnaBridge 145:64910690c574 47 /*! Version 2.0.1. */
AnnaBridge 145:64910690c574 48 #define FSL_PORT_DRIVER_VERSION (MAKE_VERSION(2, 0, 1))
AnnaBridge 145:64910690c574 49 /*@}*/
AnnaBridge 145:64910690c574 50
AnnaBridge 145:64910690c574 51 /*! @brief Internal resistor pull feature selection */
AnnaBridge 145:64910690c574 52 enum _port_pull
AnnaBridge 145:64910690c574 53 {
AnnaBridge 145:64910690c574 54 kPORT_PullDisable = 0U, /*!< Internal pull-up/down resistor is disabled. */
AnnaBridge 145:64910690c574 55 kPORT_PullDown = 2U, /*!< Internal pull-down resistor is enabled. */
AnnaBridge 145:64910690c574 56 kPORT_PullUp = 3U, /*!< Internal pull-up resistor is enabled. */
AnnaBridge 145:64910690c574 57 };
AnnaBridge 145:64910690c574 58
AnnaBridge 145:64910690c574 59 /*! @brief Slew rate selection */
AnnaBridge 145:64910690c574 60 enum _port_slew_rate
AnnaBridge 145:64910690c574 61 {
AnnaBridge 145:64910690c574 62 kPORT_FastSlewRate = 0U, /*!< Fast slew rate is configured. */
AnnaBridge 145:64910690c574 63 kPORT_SlowSlewRate = 1U, /*!< Slow slew rate is configured. */
AnnaBridge 145:64910690c574 64 };
AnnaBridge 145:64910690c574 65
AnnaBridge 145:64910690c574 66 #if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
AnnaBridge 145:64910690c574 67 /*! @brief Internal resistor pull feature enable/disable */
AnnaBridge 145:64910690c574 68 enum _port_open_drain_enable
AnnaBridge 145:64910690c574 69 {
AnnaBridge 145:64910690c574 70 kPORT_OpenDrainDisable = 0U, /*!< Internal pull-down resistor is disabled. */
AnnaBridge 145:64910690c574 71 kPORT_OpenDrainEnable = 1U, /*!< Internal pull-up resistor is enabled. */
AnnaBridge 145:64910690c574 72 };
AnnaBridge 145:64910690c574 73 #endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */
AnnaBridge 145:64910690c574 74
AnnaBridge 145:64910690c574 75 /*! @brief Passive filter feature enable/disable */
AnnaBridge 145:64910690c574 76 enum _port_passive_filter_enable
AnnaBridge 145:64910690c574 77 {
AnnaBridge 145:64910690c574 78 kPORT_PassiveFilterDisable = 0U, /*!< Fast slew rate is configured. */
AnnaBridge 145:64910690c574 79 kPORT_PassiveFilterEnable = 1U, /*!< Slow slew rate is configured. */
AnnaBridge 145:64910690c574 80 };
AnnaBridge 145:64910690c574 81
AnnaBridge 145:64910690c574 82 /*! @brief Configures the drive strength. */
AnnaBridge 145:64910690c574 83 enum _port_drive_strength
AnnaBridge 145:64910690c574 84 {
AnnaBridge 145:64910690c574 85 kPORT_LowDriveStrength = 0U, /*!< Low-drive strength is configured. */
AnnaBridge 145:64910690c574 86 kPORT_HighDriveStrength = 1U, /*!< High-drive strength is configured. */
AnnaBridge 145:64910690c574 87 };
AnnaBridge 145:64910690c574 88
AnnaBridge 145:64910690c574 89 #if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
AnnaBridge 145:64910690c574 90 /*! @brief Unlock/lock the pin control register field[15:0] */
AnnaBridge 145:64910690c574 91 enum _port_lock_register
AnnaBridge 145:64910690c574 92 {
AnnaBridge 145:64910690c574 93 kPORT_UnlockRegister = 0U, /*!< Pin Control Register fields [15:0] are not locked. */
AnnaBridge 145:64910690c574 94 kPORT_LockRegister = 1U, /*!< Pin Control Register fields [15:0] are locked. */
AnnaBridge 145:64910690c574 95 };
AnnaBridge 145:64910690c574 96 #endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */
AnnaBridge 145:64910690c574 97
AnnaBridge 145:64910690c574 98 /*! @brief Pin mux selection */
AnnaBridge 145:64910690c574 99 typedef enum _port_mux
AnnaBridge 145:64910690c574 100 {
AnnaBridge 145:64910690c574 101 kPORT_PinDisabledOrAnalog = 0U, /*!< Corresponding pin is disabled, but is used as an analog pin. */
AnnaBridge 145:64910690c574 102 kPORT_MuxAsGpio = 1U, /*!< Corresponding pin is configured as GPIO. */
AnnaBridge 145:64910690c574 103 kPORT_MuxAlt2 = 2U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 104 kPORT_MuxAlt3 = 3U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 105 kPORT_MuxAlt4 = 4U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 106 kPORT_MuxAlt5 = 5U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 107 kPORT_MuxAlt6 = 6U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 108 kPORT_MuxAlt7 = 7U, /*!< Chip-specific */
AnnaBridge 145:64910690c574 109 } port_mux_t;
AnnaBridge 145:64910690c574 110
AnnaBridge 145:64910690c574 111 /*! @brief Configures the interrupt generation condition. */
AnnaBridge 145:64910690c574 112 typedef enum _port_interrupt
AnnaBridge 145:64910690c574 113 {
AnnaBridge 145:64910690c574 114 kPORT_InterruptOrDMADisabled = 0x0U, /*!< Interrupt/DMA request is disabled. */
AnnaBridge 145:64910690c574 115 #if defined(FSL_FEATURE_PORT_HAS_DMA_REQUEST) && FSL_FEATURE_PORT_HAS_DMA_REQUEST
AnnaBridge 145:64910690c574 116 kPORT_DMARisingEdge = 0x1U, /*!< DMA request on rising edge. */
AnnaBridge 145:64910690c574 117 kPORT_DMAFallingEdge = 0x2U, /*!< DMA request on falling edge. */
AnnaBridge 145:64910690c574 118 kPORT_DMAEitherEdge = 0x3U, /*!< DMA request on either edge. */
AnnaBridge 145:64910690c574 119 #endif
AnnaBridge 145:64910690c574 120 #if defined(FSL_FEATURE_PORT_HAS_IRQC_FLAG) && FSL_FEATURE_PORT_HAS_IRQC_FLAG
AnnaBridge 145:64910690c574 121 kPORT_FlagRisingEdge = 0x05U, /*!< Flag sets on rising edge. */
AnnaBridge 145:64910690c574 122 kPORT_FlagFallingEdge = 0x06U, /*!< Flag sets on falling edge. */
AnnaBridge 145:64910690c574 123 kPORT_FlagEitherEdge = 0x07U, /*!< Flag sets on either edge. */
AnnaBridge 145:64910690c574 124 #endif
AnnaBridge 145:64910690c574 125 kPORT_InterruptLogicZero = 0x8U, /*!< Interrupt when logic zero. */
AnnaBridge 145:64910690c574 126 kPORT_InterruptRisingEdge = 0x9U, /*!< Interrupt on rising edge. */
AnnaBridge 145:64910690c574 127 kPORT_InterruptFallingEdge = 0xAU, /*!< Interrupt on falling edge. */
AnnaBridge 145:64910690c574 128 kPORT_InterruptEitherEdge = 0xBU, /*!< Interrupt on either edge. */
AnnaBridge 145:64910690c574 129 kPORT_InterruptLogicOne = 0xCU, /*!< Interrupt when logic one. */
AnnaBridge 145:64910690c574 130 #if defined(FSL_FEATURE_PORT_HAS_IRQC_TRIGGER) && FSL_FEATURE_PORT_HAS_IRQC_TRIGGER
AnnaBridge 145:64910690c574 131 kPORT_ActiveHighTriggerOutputEnable = 0xDU, /*!< Enable active high-trigger output. */
AnnaBridge 145:64910690c574 132 kPORT_ActiveLowTriggerOutputEnable = 0xEU, /*!< Enable active low-trigger output. */
AnnaBridge 145:64910690c574 133 #endif
AnnaBridge 145:64910690c574 134 } port_interrupt_t;
AnnaBridge 145:64910690c574 135
AnnaBridge 145:64910690c574 136 #if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
AnnaBridge 145:64910690c574 137 /*! @brief Digital filter clock source selection */
AnnaBridge 145:64910690c574 138 typedef enum _port_digital_filter_clock_source
AnnaBridge 145:64910690c574 139 {
AnnaBridge 145:64910690c574 140 kPORT_BusClock = 0U, /*!< Digital filters are clocked by the bus clock. */
AnnaBridge 145:64910690c574 141 kPORT_LpoClock = 1U, /*!< Digital filters are clocked by the 1 kHz LPO clock. */
AnnaBridge 145:64910690c574 142 } port_digital_filter_clock_source_t;
AnnaBridge 145:64910690c574 143
AnnaBridge 145:64910690c574 144 /*! @brief PORT digital filter feature configuration definition */
AnnaBridge 145:64910690c574 145 typedef struct _port_digital_filter_config
AnnaBridge 145:64910690c574 146 {
AnnaBridge 145:64910690c574 147 uint32_t digitalFilterWidth; /*!< Set digital filter width */
AnnaBridge 145:64910690c574 148 port_digital_filter_clock_source_t clockSource; /*!< Set digital filter clockSource */
AnnaBridge 145:64910690c574 149 } port_digital_filter_config_t;
AnnaBridge 145:64910690c574 150 #endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */
AnnaBridge 145:64910690c574 151
AnnaBridge 145:64910690c574 152 /*! @brief PORT pin configuration structure */
AnnaBridge 145:64910690c574 153 typedef struct _port_pin_config
AnnaBridge 145:64910690c574 154 {
AnnaBridge 145:64910690c574 155 uint16_t pullSelect : 2; /*!< No-pull/pull-down/pull-up select */
AnnaBridge 145:64910690c574 156 uint16_t slewRate : 1; /*!< Fast/slow slew rate Configure */
AnnaBridge 145:64910690c574 157 uint16_t : 1;
AnnaBridge 145:64910690c574 158 uint16_t passiveFilterEnable : 1; /*!< Passive filter enable/disable */
AnnaBridge 145:64910690c574 159 #if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
AnnaBridge 145:64910690c574 160 uint16_t openDrainEnable : 1; /*!< Open drain enable/disable */
AnnaBridge 145:64910690c574 161 #else
AnnaBridge 145:64910690c574 162 uint16_t : 1;
AnnaBridge 145:64910690c574 163 #endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */
AnnaBridge 145:64910690c574 164 uint16_t driveStrength : 1; /*!< Fast/slow drive strength configure */
AnnaBridge 145:64910690c574 165 uint16_t : 1;
AnnaBridge 145:64910690c574 166 uint16_t mux : 3; /*!< Pin mux Configure */
AnnaBridge 145:64910690c574 167 uint16_t : 4;
AnnaBridge 145:64910690c574 168 #if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
AnnaBridge 145:64910690c574 169 uint16_t lockRegister : 1; /*!< Lock/unlock the PCR field[15:0] */
AnnaBridge 145:64910690c574 170 #else
AnnaBridge 145:64910690c574 171 uint16_t : 1;
AnnaBridge 145:64910690c574 172 #endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */
AnnaBridge 145:64910690c574 173 } port_pin_config_t;
AnnaBridge 145:64910690c574 174
AnnaBridge 145:64910690c574 175 /*******************************************************************************
AnnaBridge 145:64910690c574 176 * API
AnnaBridge 145:64910690c574 177 ******************************************************************************/
AnnaBridge 145:64910690c574 178
AnnaBridge 145:64910690c574 179 #if defined(__cplusplus)
AnnaBridge 145:64910690c574 180 extern "C" {
AnnaBridge 145:64910690c574 181 #endif
AnnaBridge 145:64910690c574 182
AnnaBridge 145:64910690c574 183 /*! @name Configuration */
AnnaBridge 145:64910690c574 184 /*@{*/
AnnaBridge 145:64910690c574 185
AnnaBridge 145:64910690c574 186 /*!
AnnaBridge 145:64910690c574 187 * @brief Sets the port PCR register.
AnnaBridge 145:64910690c574 188 *
AnnaBridge 145:64910690c574 189 * This is an example to define an input pin or output pin PCR configuration:
AnnaBridge 145:64910690c574 190 * @code
AnnaBridge 145:64910690c574 191 * // Define a digital input pin PCR configuration
AnnaBridge 145:64910690c574 192 * port_pin_config_t config = {
AnnaBridge 145:64910690c574 193 * kPORT_PullUp,
AnnaBridge 145:64910690c574 194 * kPORT_FastSlewRate,
AnnaBridge 145:64910690c574 195 * kPORT_PassiveFilterDisable,
AnnaBridge 145:64910690c574 196 * kPORT_OpenDrainDisable,
AnnaBridge 145:64910690c574 197 * kPORT_LowDriveStrength,
AnnaBridge 145:64910690c574 198 * kPORT_MuxAsGpio,
AnnaBridge 145:64910690c574 199 * kPORT_UnLockRegister,
AnnaBridge 145:64910690c574 200 * };
AnnaBridge 145:64910690c574 201 * @endcode
AnnaBridge 145:64910690c574 202 *
AnnaBridge 145:64910690c574 203 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 204 * @param pin PORT pin number.
AnnaBridge 145:64910690c574 205 * @param config PORT PCR register configuration structure.
AnnaBridge 145:64910690c574 206 */
AnnaBridge 145:64910690c574 207 static inline void PORT_SetPinConfig(PORT_Type *base, uint32_t pin, const port_pin_config_t *config)
AnnaBridge 145:64910690c574 208 {
AnnaBridge 145:64910690c574 209 assert(config);
AnnaBridge 145:64910690c574 210 uint32_t addr = (uint32_t)&base->PCR[pin];
AnnaBridge 145:64910690c574 211 *(volatile uint16_t *)(addr) = *((const uint16_t *)config);
AnnaBridge 145:64910690c574 212 }
AnnaBridge 145:64910690c574 213
AnnaBridge 145:64910690c574 214 /*!
AnnaBridge 145:64910690c574 215 * @brief Sets the port PCR register for multiple pins.
AnnaBridge 145:64910690c574 216 *
AnnaBridge 145:64910690c574 217 * This is an example to define input pins or output pins PCR configuration:
AnnaBridge 145:64910690c574 218 * @code
AnnaBridge 145:64910690c574 219 * // Define a digital input pin PCR configuration
AnnaBridge 145:64910690c574 220 * port_pin_config_t config = {
AnnaBridge 145:64910690c574 221 * kPORT_PullUp ,
AnnaBridge 145:64910690c574 222 * kPORT_PullEnable,
AnnaBridge 145:64910690c574 223 * kPORT_FastSlewRate,
AnnaBridge 145:64910690c574 224 * kPORT_PassiveFilterDisable,
AnnaBridge 145:64910690c574 225 * kPORT_OpenDrainDisable,
AnnaBridge 145:64910690c574 226 * kPORT_LowDriveStrength,
AnnaBridge 145:64910690c574 227 * kPORT_MuxAsGpio,
AnnaBridge 145:64910690c574 228 * kPORT_UnlockRegister,
AnnaBridge 145:64910690c574 229 * };
AnnaBridge 145:64910690c574 230 * @endcode
AnnaBridge 145:64910690c574 231 *
AnnaBridge 145:64910690c574 232 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 233 * @param mask PORT pin number macro.
AnnaBridge 145:64910690c574 234 * @param config PORT PCR register configuration structure.
AnnaBridge 145:64910690c574 235 */
AnnaBridge 145:64910690c574 236 static inline void PORT_SetMultiplePinsConfig(PORT_Type *base, uint32_t mask, const port_pin_config_t *config)
AnnaBridge 145:64910690c574 237 {
AnnaBridge 145:64910690c574 238 assert(config);
AnnaBridge 145:64910690c574 239
AnnaBridge 145:64910690c574 240 uint16_t pcrl = *((const uint16_t *)config);
AnnaBridge 145:64910690c574 241
AnnaBridge 145:64910690c574 242 if (mask & 0xffffU)
AnnaBridge 145:64910690c574 243 {
AnnaBridge 145:64910690c574 244 base->GPCLR = ((mask & 0xffffU) << 16) | pcrl;
AnnaBridge 145:64910690c574 245 }
AnnaBridge 145:64910690c574 246 if (mask >> 16)
AnnaBridge 145:64910690c574 247 {
AnnaBridge 145:64910690c574 248 base->GPCHR = (mask & 0xffff0000U) | pcrl;
AnnaBridge 145:64910690c574 249 }
AnnaBridge 145:64910690c574 250 }
AnnaBridge 145:64910690c574 251
AnnaBridge 145:64910690c574 252 /*!
AnnaBridge 145:64910690c574 253 * @brief Configures the pin muxing.
AnnaBridge 145:64910690c574 254 *
AnnaBridge 145:64910690c574 255 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 256 * @param pin PORT pin number.
AnnaBridge 145:64910690c574 257 * @param mux pin muxing slot selection.
AnnaBridge 145:64910690c574 258 * - #kPORT_PinDisabledOrAnalog: Pin disabled or work in analog function.
AnnaBridge 145:64910690c574 259 * - #kPORT_MuxAsGpio : Set as GPIO.
AnnaBridge 145:64910690c574 260 * - #kPORT_MuxAlt2 : chip-specific.
AnnaBridge 145:64910690c574 261 * - #kPORT_MuxAlt3 : chip-specific.
AnnaBridge 145:64910690c574 262 * - #kPORT_MuxAlt4 : chip-specific.
AnnaBridge 145:64910690c574 263 * - #kPORT_MuxAlt5 : chip-specific.
AnnaBridge 145:64910690c574 264 * - #kPORT_MuxAlt6 : chip-specific.
AnnaBridge 145:64910690c574 265 * - #kPORT_MuxAlt7 : chip-specific.
AnnaBridge 145:64910690c574 266 * @Note : This function is NOT recommended to use together with the PORT_SetPinsConfig, because
AnnaBridge 145:64910690c574 267 * the PORT_SetPinsConfig need to configure the pin mux anyway (Otherwise the pin mux is
AnnaBridge 145:64910690c574 268 * reset to zero : kPORT_PinDisabledOrAnalog).
AnnaBridge 145:64910690c574 269 * This function is recommended to use to reset the pin mux
AnnaBridge 145:64910690c574 270 *
AnnaBridge 145:64910690c574 271 */
AnnaBridge 145:64910690c574 272 static inline void PORT_SetPinMux(PORT_Type *base, uint32_t pin, port_mux_t mux)
AnnaBridge 145:64910690c574 273 {
AnnaBridge 145:64910690c574 274 base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_MUX_MASK) | PORT_PCR_MUX(mux);
AnnaBridge 145:64910690c574 275 }
AnnaBridge 145:64910690c574 276
AnnaBridge 145:64910690c574 277 #if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
AnnaBridge 145:64910690c574 278
AnnaBridge 145:64910690c574 279 /*!
AnnaBridge 145:64910690c574 280 * @brief Enables the digital filter in one port, each bit of the 32-bit register represents one pin.
AnnaBridge 145:64910690c574 281 *
AnnaBridge 145:64910690c574 282 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 283 * @param mask PORT pin number macro.
AnnaBridge 145:64910690c574 284 */
AnnaBridge 145:64910690c574 285 static inline void PORT_EnablePinsDigitalFilter(PORT_Type *base, uint32_t mask, bool enable)
AnnaBridge 145:64910690c574 286 {
AnnaBridge 145:64910690c574 287 if (enable == true)
AnnaBridge 145:64910690c574 288 {
AnnaBridge 145:64910690c574 289 base->DFER |= mask;
AnnaBridge 145:64910690c574 290 }
AnnaBridge 145:64910690c574 291 else
AnnaBridge 145:64910690c574 292 {
AnnaBridge 145:64910690c574 293 base->DFER &= ~mask;
AnnaBridge 145:64910690c574 294 }
AnnaBridge 145:64910690c574 295 }
AnnaBridge 145:64910690c574 296
AnnaBridge 145:64910690c574 297 /*!
AnnaBridge 145:64910690c574 298 * @brief Sets the digital filter in one port, each bit of the 32-bit register represents one pin.
AnnaBridge 145:64910690c574 299 *
AnnaBridge 145:64910690c574 300 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 301 * @param config PORT digital filter configuration structure.
AnnaBridge 145:64910690c574 302 */
AnnaBridge 145:64910690c574 303 static inline void PORT_SetDigitalFilterConfig(PORT_Type *base, const port_digital_filter_config_t *config)
AnnaBridge 145:64910690c574 304 {
AnnaBridge 145:64910690c574 305 assert(config);
AnnaBridge 145:64910690c574 306
AnnaBridge 145:64910690c574 307 base->DFCR = PORT_DFCR_CS(config->clockSource);
AnnaBridge 145:64910690c574 308 base->DFWR = PORT_DFWR_FILT(config->digitalFilterWidth);
AnnaBridge 145:64910690c574 309 }
AnnaBridge 145:64910690c574 310
AnnaBridge 145:64910690c574 311 #endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */
AnnaBridge 145:64910690c574 312
AnnaBridge 145:64910690c574 313 /*@}*/
AnnaBridge 145:64910690c574 314
AnnaBridge 145:64910690c574 315 /*! @name Interrupt */
AnnaBridge 145:64910690c574 316 /*@{*/
AnnaBridge 145:64910690c574 317
AnnaBridge 145:64910690c574 318 /*!
AnnaBridge 145:64910690c574 319 * @brief Configures the port pin interrupt/DMA request.
AnnaBridge 145:64910690c574 320 *
AnnaBridge 145:64910690c574 321 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 322 * @param pin PORT pin number.
AnnaBridge 145:64910690c574 323 * @param config PORT pin interrupt configuration.
AnnaBridge 145:64910690c574 324 * - #kPORT_InterruptOrDMADisabled: Interrupt/DMA request disabled.
AnnaBridge 145:64910690c574 325 * - #kPORT_DMARisingEdge : DMA request on rising edge(if the DMA requests exit).
AnnaBridge 145:64910690c574 326 * - #kPORT_DMAFallingEdge: DMA request on falling edge(if the DMA requests exit).
AnnaBridge 145:64910690c574 327 * - #kPORT_DMAEitherEdge : DMA request on either edge(if the DMA requests exit).
AnnaBridge 145:64910690c574 328 * - #kPORT_FlagRisingEdge : Flag sets on rising edge(if the Flag states exit).
AnnaBridge 145:64910690c574 329 * - #kPORT_FlagFallingEdge : Flag sets on falling edge(if the Flag states exit).
AnnaBridge 145:64910690c574 330 * - #kPORT_FlagEitherEdge : Flag sets on either edge(if the Flag states exit).
AnnaBridge 145:64910690c574 331 * - #kPORT_InterruptLogicZero : Interrupt when logic zero.
AnnaBridge 145:64910690c574 332 * - #kPORT_InterruptRisingEdge : Interrupt on rising edge.
AnnaBridge 145:64910690c574 333 * - #kPORT_InterruptFallingEdge: Interrupt on falling edge.
AnnaBridge 145:64910690c574 334 * - #kPORT_InterruptEitherEdge : Interrupt on either edge.
AnnaBridge 145:64910690c574 335 * - #kPORT_InterruptLogicOne : Interrupt when logic one.
AnnaBridge 145:64910690c574 336 * - #kPORT_ActiveHighTriggerOutputEnable : Enable active high-trigger output (if the trigger states exit).
AnnaBridge 145:64910690c574 337 * - #kPORT_ActiveLowTriggerOutputEnable : Enable active low-trigger output (if the trigger states exit).
AnnaBridge 145:64910690c574 338 */
AnnaBridge 145:64910690c574 339 static inline void PORT_SetPinInterruptConfig(PORT_Type *base, uint32_t pin, port_interrupt_t config)
AnnaBridge 145:64910690c574 340 {
AnnaBridge 145:64910690c574 341 base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(config);
AnnaBridge 145:64910690c574 342 }
AnnaBridge 145:64910690c574 343
AnnaBridge 145:64910690c574 344 /*!
AnnaBridge 145:64910690c574 345 * @brief Reads the whole port status flag.
AnnaBridge 145:64910690c574 346 *
AnnaBridge 145:64910690c574 347 * If a pin is configured to generate the DMA request, the corresponding flag
AnnaBridge 145:64910690c574 348 * is cleared automatically at the completion of the requested DMA transfer.
AnnaBridge 145:64910690c574 349 * Otherwise, the flag remains set until a logic one is written to that flag.
AnnaBridge 145:64910690c574 350 * If configured for a level sensitive interrupt that remains asserted, the flag
AnnaBridge 145:64910690c574 351 * is set again immediately.
AnnaBridge 145:64910690c574 352 *
AnnaBridge 145:64910690c574 353 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 354 * @return Current port interrupt status flags, for example, 0x00010001 means the
AnnaBridge 145:64910690c574 355 * pin 0 and 17 have the interrupt.
AnnaBridge 145:64910690c574 356 */
AnnaBridge 145:64910690c574 357 static inline uint32_t PORT_GetPinsInterruptFlags(PORT_Type *base)
AnnaBridge 145:64910690c574 358 {
AnnaBridge 145:64910690c574 359 return base->ISFR;
AnnaBridge 145:64910690c574 360 }
AnnaBridge 145:64910690c574 361
AnnaBridge 145:64910690c574 362 /*!
AnnaBridge 145:64910690c574 363 * @brief Clears the multiple pin interrupt status flag.
AnnaBridge 145:64910690c574 364 *
AnnaBridge 145:64910690c574 365 * @param base PORT peripheral base pointer.
AnnaBridge 145:64910690c574 366 * @param mask PORT pin number macro.
AnnaBridge 145:64910690c574 367 */
AnnaBridge 145:64910690c574 368 static inline void PORT_ClearPinsInterruptFlags(PORT_Type *base, uint32_t mask)
AnnaBridge 145:64910690c574 369 {
AnnaBridge 145:64910690c574 370 base->ISFR = mask;
AnnaBridge 145:64910690c574 371 }
AnnaBridge 145:64910690c574 372
AnnaBridge 145:64910690c574 373 /*@}*/
AnnaBridge 145:64910690c574 374
AnnaBridge 145:64910690c574 375 #if defined(__cplusplus)
AnnaBridge 145:64910690c574 376 }
AnnaBridge 145:64910690c574 377 #endif
AnnaBridge 145:64910690c574 378
AnnaBridge 145:64910690c574 379 /*! @}*/
AnnaBridge 145:64910690c574 380
AnnaBridge 145:64910690c574 381 #endif /* _FSL_PORT_H_ */