MCUXpresso_LPC845/devices/LPC845/drivers/fsl_swm.c

129 lines
3.8 KiB
C

/*
* Copyright 2017-2020 NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "fsl_swm.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Component ID definition, used by tools. */
#ifndef FSL_COMPONENT_ID
#define FSL_COMPONENT_ID "platform.drivers.swm"
#endif
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Code
******************************************************************************/
/*!
* brief Assignment of digital peripheral functions to pins.
*
* This function will selects a pin (designated by its GPIO port and
* bit numbers) to a function.
*
* param base SWM peripheral base address.
* param func any function name that is movable.
* param swm_port_pin any pin which has a GPIO port number and bit number.
*/
void SWM_SetMovablePinSelect(SWM_Type *base, swm_select_movable_t func, swm_port_pin_type_t swm_port_pin)
{
/* Check arguments */
assert(NULL != base);
assert(func < kSWM_MOVABLE_NUM_FUNCS);
uint32_t temp;
uint32_t pinassign = 0;
uint32_t shifter = 0;
pinassign = (uint32_t)func / 4U;
shifter = ((uint32_t)func % 4U) * 8U;
temp = base->PINASSIGN_DATA[pinassign];
temp &= ~(0xFFUL << (shifter));
temp |= ((uint32_t)swm_port_pin << shifter);
base->PINASSIGN_DATA[pinassign] = temp;
}
#if (defined(FSL_FEATURE_SWM_HAS_PINASSIGNFIXED0_REGISTER) && (FSL_FEATURE_SWM_HAS_PINASSIGNFIXED0_REGISTER == 1))
/*!
* brief Assignment of digital peripheral functions to pins.
*
* This function will selects a pin (designated by its GPIO port and
* bit numbers) to a function.
*
* param base SWM peripheral base address.
* param func any function name that is movable.
* param swm_port_pin any pin which has a GPIO port number and bit number.
*/
void SWM_SetFixedMovablePinSelect(SWM_Type *base,
swm_select_fixed_movable_t func,
swm_fixed_port_pin_type_t swm_port_pin)
{
/* Check arguments */
assert(NULL != base);
assert(func < kSWM_PINASSINGNFIXED_MOVABLE_NUM_FUNCS);
uint32_t temp;
uint32_t shifter = 0;
shifter = (uint32_t)func * 2U;
temp = base->PINASSIGNFIXED0;
temp &= ~(0x03UL << (shifter));
temp |= ((uint32_t)swm_port_pin << shifter);
base->PINASSIGNFIXED0 = temp;
}
#endif /* FSL_FEATURE_SWM_HAS_PINASSIGNFIXED0_REGISTER */
/*!
* brief Enable the fixed-pin function.
*
* This function will enables a fixed-pin function in PINENABLE0 or PINENABLE1.
*
* param base SWM peripheral base address.
* param func any function name that is fixed pin.
* param enable enable or disable.
*/
void SWM_SetFixedPinSelect(SWM_Type *base, swm_select_fixed_pin_t func, bool enable)
{
/* Check arguments */
assert(NULL != base);
if (enable)
{
if (((uint32_t)func & 0x80000000U) == 0x00U)
{
base->PINENABLE0 &= ~((uint32_t)func);
}
#if (defined(FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER) && (FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER == 1))
else
{
base->PINENABLE1 &= ~((uint32_t)func);
}
#endif /* FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER */
}
else
{
if (((uint32_t)func & 0x80000000U) == 0x00U)
{
base->PINENABLE0 |= ((uint32_t)func);
}
#if (defined(FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER) && (FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER == 1))
else
{
base->PINENABLE1 |= ((uint32_t)func);
}
#endif /* FSL_FEATURE_SWM_HAS_PINENABLE1_REGISTER */
}
}