23#ifndef FSL_COMPONENT_ID
24#define FSL_COMPONENT_ID "platform.drivers.port"
30#define FSL_PORT_DRIVER_VERSION (MAKE_VERSION(2, 1, 0))
33#if defined(FSL_FEATURE_PORT_HAS_PULL_ENABLE) && FSL_FEATURE_PORT_HAS_PULL_ENABLE
43#if defined(FSL_FEATURE_PORT_HAS_SLEW_RATE) && FSL_FEATURE_PORT_HAS_SLEW_RATE
52#if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
61#if defined(FSL_FEATURE_PORT_HAS_PASSIVE_FILTER) && FSL_FEATURE_PORT_HAS_PASSIVE_FILTER
70#if defined(FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH) && FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH
79#if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
88#if defined(FSL_FEATURE_PORT_PCR_MUX_WIDTH) && FSL_FEATURE_PORT_PCR_MUX_WIDTH
111#if !(defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
116#if defined(FSL_FEATURE_PORT_HAS_DMA_REQUEST) && FSL_FEATURE_PORT_HAS_DMA_REQUEST
121#if defined(FSL_FEATURE_PORT_HAS_IRQC_FLAG) && FSL_FEATURE_PORT_HAS_IRQC_FLAG
131#if defined(FSL_FEATURE_PORT_HAS_IRQC_TRIGGER) && FSL_FEATURE_PORT_HAS_IRQC_TRIGGER
138#if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
154#if defined(FSL_FEATURE_PORT_PCR_MUX_WIDTH) && FSL_FEATURE_PORT_PCR_MUX_WIDTH
158#if defined(FSL_FEATURE_PORT_HAS_PULL_ENABLE) && FSL_FEATURE_PORT_HAS_PULL_ENABLE
164#if defined(FSL_FEATURE_PORT_HAS_SLEW_RATE) && FSL_FEATURE_PORT_HAS_SLEW_RATE
172#if defined(FSL_FEATURE_PORT_HAS_PASSIVE_FILTER) && FSL_FEATURE_PORT_HAS_PASSIVE_FILTER
178#if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
184#if defined(FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH) && FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH
192#if defined(FSL_FEATURE_PORT_PCR_MUX_WIDTH) && (FSL_FEATURE_PORT_PCR_MUX_WIDTH == 3)
195#elif defined(FSL_FEATURE_PORT_PCR_MUX_WIDTH) && (FSL_FEATURE_PORT_PCR_MUX_WIDTH == 4)
202#if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
214#if defined(__cplusplus)
218#if defined(FSL_FEATURE_PORT_PCR_MUX_WIDTH) && FSL_FEATURE_PORT_PCR_MUX_WIDTH
246 uint32_t
addr = (uint32_t)&base->PCR[
pin];
247 *(
volatile uint16_t *)(
addr) = *((
const uint16_t *)
config);
276 uint16_t pcrl = *((
const uint16_t *)
config);
280 base->GPCLR = ((mask & 0xffffU) << 16) | pcrl;
284 base->GPCHR = (mask & 0xffff0000U) | pcrl;
288#if defined(FSL_FEATURE_PORT_HAS_MULTIPLE_IRQ_CONFIG) && FSL_FEATURE_PORT_HAS_MULTIPLE_IRQ_CONFIG
316 base->GICLR = (
config << 16) | (mask & 0xffffU);
321 base->GICHR = (
config << 16) | (mask & 0xffffU);
348 base->PCR[
pin] = (base->PCR[
pin] & ~PORT_PCR_MUX_MASK) | PORT_PCR_MUX(mux);
352#if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
382 base->DFCR = PORT_DFCR_CS(
config->clockSource);
383 base->DFWR = PORT_DFWR_FILT(
config->digitalFilterWidth);
393#if !(defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
417 base->PCR[
pin] = (base->PCR[
pin] & ~PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(
config);
421#if defined(FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH) && FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH
433 base->PCR[
pin] = (base->PCR[
pin] & ~PORT_PCR_DSE_MASK) | PORT_PCR_DSE(strength);
437#if !(defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT)
470#if defined(__cplusplus)
static constexpr persistent_config_s * config
static void PORT_SetPinInterruptConfig(PORT_Type *base, uint32_t pin, port_interrupt_t config)
Configures the port pin interrupt/DMA request.
enum _port_interrupt port_interrupt_t
Configures the interrupt generation condition.
static void PORT_SetMultiplePinsConfig(PORT_Type *base, uint32_t mask, const port_pin_config_t *config)
Sets the port PCR register for multiple pins.
struct _port_digital_filter_config port_digital_filter_config_t
PORT digital filter feature configuration definition.
_port_digital_filter_clock_source
Digital filter clock source selection.
uint16_t passiveFilterEnable
_port_drive_strength
Configures the drive strength.
static void PORT_SetDigitalFilterConfig(PORT_Type *base, const port_digital_filter_config_t *config)
Sets the digital filter in one port, each bit of the 32-bit register represents one pin.
static void PORT_SetPinDriveStrength(PORT_Type *base, uint32_t pin, uint8_t strength)
Configures the port pin drive strength.
_port_slew_rate
Slew rate selection.
static void PORT_SetPinMux(PORT_Type *base, uint32_t pin, port_mux_t mux)
Configures the pin muxing.
static uint32_t PORT_GetPinsInterruptFlags(PORT_Type *base)
Reads the whole port status flag.
struct _port_pin_config port_pin_config_t
PORT pin configuration structure.
uint16_t uint16_t lockRegister
_port_open_drain_enable
Open Drain feature enable/disable.
uint32_t digitalFilterWidth
enum _port_digital_filter_clock_source port_digital_filter_clock_source_t
Digital filter clock source selection.
static void PORT_SetPinConfig(PORT_Type *base, uint32_t pin, const port_pin_config_t *config)
Sets the port PCR register.
static void PORT_SetMultipleInterruptPinsConfig(PORT_Type *base, uint32_t mask, port_interrupt_t config)
Sets the port interrupt configuration in PCR register for multiple pins.
_port_lock_register
Unlock/lock the pin control register field[15:0].
_port_pull
Internal resistor pull feature selection.
_port_mux
Pin mux selection.
port_digital_filter_clock_source_t clockSource
static void PORT_ClearPinsInterruptFlags(PORT_Type *base, uint32_t mask)
Clears the multiple pin interrupt status flag.
enum _port_mux port_mux_t
Pin mux selection.
static void PORT_EnablePinsDigitalFilter(PORT_Type *base, uint32_t mask, bool enable)
Enables the digital filter in one port, each bit of the 32-bit register represents one pin.
_port_passive_filter_enable
Passive filter feature enable/disable.
_port_interrupt
Configures the interrupt generation condition.
@ kPORT_HighDriveStrength
@ kPORT_PinDisabledOrAnalog
@ kPORT_PassiveFilterEnable
@ kPORT_PassiveFilterDisable
@ kPORT_InterruptEitherEdge
@ kPORT_InterruptRisingEdge
@ kPORT_InterruptOrDMADisabled
@ kPORT_InterruptLogicZero
@ kPORT_ActiveHighTriggerOutputEnable
@ kPORT_InterruptLogicOne
@ kPORT_ActiveLowTriggerOutputEnable
@ kPORT_InterruptFallingEdge
static void enable(const char *param)
PORT digital filter feature configuration definition.
PORT pin configuration structure.