MCUXpresso_MCXA153/devices/MCXA153/drivers/fsl_wuu.h
Yilin Sun 35e678394a
Initial commit v2.14.2
Signed-off-by: Yilin Sun <imi415@imi.moe>
2024-02-11 19:33:06 +08:00

287 lines
9.2 KiB
C

/*
* Copyright 2019-2023 NXP.
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _FSL_WUU_H_
#define _FSL_WUU_H_
#include "fsl_common.h"
/*! @addtogroup wuu */
/*! @{ */
/*******************************************************************************
* Definitions
*******************************************************************************/
/*! @name Driver version */
/*@{*/
/*! @brief Defines WUU driver version 2.3.0. */
#define FSL_WUU_DRIVER_VERSION (MAKE_VERSION(2, 3, 0))
/*@}*/
/*!
* @brief External WakeUp pin edge detection enumeration.
*/
typedef enum _wuu_external_pin_edge_detection
{
kWUU_ExternalPinDisable = 0x0U, /*!< External input Pin disabled as wake up input. */
kWUU_ExternalPinRisingEdge = 0x1U, /*!< External input Pin enabled with the rising edge detection. */
kWUU_ExternalPinFallingEdge = 0x2U, /*!< External input Pin enabled with the falling edge detection. */
kWUU_ExternalPinAnyEdge = 0x3U, /*!< External input Pin enabled with any change detection. */
} wuu_external_pin_edge_detection_t;
/*!
* @brief External input wake up pin event enumeration.
*/
typedef enum _wuu_external_wakeup_pin_event
{
kWUU_ExternalPinInterrupt = 0x0U, /*!< External input Pin configured as interrupt. */
kWUU_ExternalPinDMARequest = 0x1U, /*!< External input Pin configured as DMA request. */
kWUU_ExternalPinTriggerEvent = 0x2U, /*!< External input Pin configured as Trigger event. */
} wuu_external_wakeup_pin_event_t;
/*!
* @brief External input wake up pin mode enumeration.
*/
typedef enum _wuu_external_wakeup_pin_mode
{
kWUU_ExternalPinActiveDSPD = 0x0U, /*!< External input Pin is active only during Deep Sleep/Power Down Mode. */
kWUU_ExternalPinActiveAlways = 0x1U, /*!< External input Pin is active during all power modes. */
} wuu_external_wakeup_pin_mode_t;
/*!
* @brief Internal module wake up event enumeration.
*/
typedef enum _wuu_internal_wakeup_module_event
{
kWUU_InternalModuleInterrupt = 0x0U, /*!< Internal modules' interrupt as a wakeup source. */
kWUU_InternalModuleDMATrigger = 0x1U, /*!< Internal modules' DMA/Trigger as a wakeup source. */
} wuu_internal_wakeup_module_event_t;
/*!
* @brief Pin filter edge enumeration.
*/
typedef enum _wuu_filter_edge
{
kWUU_FilterDisabled = 0x0U, /*!< Filter disabled. */
kWUU_FilterPosedgeEnable = 0x1U, /*!< Filter posedge detect enabled. */
kWUU_FilterNegedgeEnable = 0x2U, /*!< Filter negedge detect enabled. */
kWUU_FilterAnyEdge = 0x3U, /*!< Filter any edge detect enabled. */
} wuu_filter_edge_t;
/*!
* @brief Pin Filter event enumeration.
*/
typedef enum _wuu_filter_event
{
kWUU_FilterInterrupt = 0x0U, /*!< Filter output configured as interrupt. */
kWUU_FilterDMARequest = 0x1U, /*!< Filter output configured as DMA request. */
kWUU_FilterTriggerEvent = 0x2U, /*!< Filter output configured as Trigger event. */
} wuu_filter_event_t;
/*!
* @brief Pin filter mode enumeration.
*/
typedef enum _wuu_filter_mode
{
kWUU_FilterActiveDSPD = 0x0U, /*!< External input pin filter is active only during Deep Sleep/Power Down Mode. */
kWUU_FilterActiveAlways = 0x1U, /*!< External input Pin filter is active during all power modes. */
} wuu_filter_mode_t;
/*!
* @brief External WakeUp pin configuration
*/
typedef struct _wuu_external_wakeup_pin_config
{
wuu_external_pin_edge_detection_t edge; /*!< External Input pin edge detection. */
wuu_external_wakeup_pin_event_t event; /*!< External Input wakeup Pin event */
wuu_external_wakeup_pin_mode_t mode; /*!< External Input wakeup Pin operate mode. */
} wuu_external_wakeup_pin_config_t;
/*!
* @brief Pin Filter configuration.
*/
typedef struct _wuu_pin_filter_config
{
uint32_t pinIndex; /*!< The index of wakeup pin to be muxxed into filter. */
wuu_filter_edge_t edge; /*!< The edge of the pin digital filter. */
wuu_filter_event_t event; /*!< The event of the filter output. */
wuu_filter_mode_t mode; /*!< The mode of the filter operate. */
} wuu_pin_filter_config_t;
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*!
* @name External Wake up Pins Control APIs.
* @{
*/
/*!
* @brief Enables and Configs External WakeUp Pins.
*
* This function enables/disables the external pin as wakeup input. What's more this
* function configs pins options, including edge detection wakeup event and operate mode.
*
* @param base MUU peripheral base address.
* @param pinIndex The index of the external input pin. See Reference Manual for the details.
* @param config Pointer to wuu_external_wakeup_pin_config_t structure.
*/
void WUU_SetExternalWakeUpPinsConfig(WUU_Type *base, uint8_t pinIndex, const wuu_external_wakeup_pin_config_t *config);
/*!
* @brief Gets External Wakeup pin flags.
*
* This function return the external wakeup pin flags.
*
* @param base WUU peripheral base address.
* @return Wakeup flags for all external wakeup pins.
*/
static inline uint32_t WUU_GetExternalWakeUpPinsFlag(WUU_Type *base)
{
return base->PF;
}
/*!
* @brief Clears External WakeUp Pin flags.
*
* This function clears external wakeup pins flags based on the mask.
*
* @param base WUU peripheral base address.
* @param mask The mask of Wakeup pin index to be cleared.
*/
static inline void WUU_ClearExternalWakeUpPinsFlag(WUU_Type *base, uint32_t mask)
{
base->PF = mask;
}
/* @} */
/*!
* @name Internal Wakeup Module control APIs.
* @{
*/
/*!
* @brief Config Internal modules' event as the wake up soures.
*
* This function configs the internal modules event as the wake up sources.
*
* @param base WUU peripheral base address.
* @param moduleIndex The selected internal module. See the Reference Manual for the details.
* @param event Select interrupt or DMA/Trigger of the internal module as the wake up source.
*/
void WUU_SetInternalWakeUpModulesConfig(WUU_Type *base, uint8_t moduleIndex, wuu_internal_wakeup_module_event_t event);
/*!
* @brief Disable an on-chip internal modules' event as the wakeup sources.
*
* @param base WUU peripheral base address.
* @param moduleIndex The selected internal module. See the Reference Manual for the details.
* @param event The event(interrupt or DMA/trigger) of the internal module to disable.
*/
void WUU_ClearInternalWakeUpModulesConfig(WUU_Type *base, uint8_t moduleIndex, wuu_internal_wakeup_module_event_t event);
#if (defined(FSL_FEATURE_WUU_HAS_MF) && FSL_FEATURE_WUU_HAS_MF)
/*!
* @brief Get wakeup flags for internal wakeup modules.
*
* @param base WUU peripheral base address.
* @return Wakeup flags for all internal wakeup modules.
*/
static inline uint32_t WUU_GetModuleInterruptFlag(WUU_Type *base)
{
return base->MF;
}
/*!
* @brief Gets the internal module wakeup source flag.
*
* This function checks the flag to detect whether the system is
* woken up by specific on-chip module interrupt.
*
* @param base WWU peripheral base address.
* @param moduleIndex A module index, which starts from 0.
* @return True if the specific pin is a wake up source.
*/
static inline bool WUU_GetInternalWakeupModuleFlag(WUU_Type *base, uint32_t moduleIndex)
{
return ((1UL << moduleIndex) == (WUU_GetModuleInterruptFlag(base) & (1UL << moduleIndex)));
}
#endif /* FSL_FEATURE_WUU_HAS_MF */
/* @} */
/*!
* @name Pin Filter Control APIs
* @{
*/
/*!
* @brief Configs and Enables Pin filters.
*
* This function configs Pin filter, including pin select, filer operate mode
* filer wakeup event and filter edge detection.
*
* @param base WUU peripheral base address.
* @param filterIndex The index of the pin filer.
* @param config Pointer to wuu_pin_filter_config_t structure.
*/
void WUU_SetPinFilterConfig(WUU_Type *base, uint8_t filterIndex, const wuu_pin_filter_config_t *config);
/*!
* @brief Gets the pin filter configuration.
*
* This function gets the pin filter flag.
*
* @param base WUU peripheral base address.
* @param filterIndex A pin filter index, which starts from 1.
* @return True if the flag is a source of the existing low-leakage power mode.
*/
bool WUU_GetPinFilterFlag(WUU_Type *base, uint8_t filterIndex);
/*!
* @brief Clears the pin filter configuration.
*
* This function clears the pin filter flag.
*
* @param base WUU peripheral base address.
* @param filterIndex A pin filter index to clear the flag, starting from 1.
*/
void WUU_ClearPinFilterFlag(WUU_Type *base, uint8_t filterIndex);
/*!
* brief Gets the external wakeup source flag.
*
* This function checks the external pin flag to detect whether the MCU is
* woken up by the specific pin.
*
* param base WUU peripheral base address.
* param pinIndex A pin index, which starts from 0.
* return True if the specific pin is a wakeup source.
*/
bool WUU_GetExternalWakeupPinFlag(WUU_Type *base, uint32_t pinIndex);
/*!
* brief Clears the external wakeup source flag.
*
* This function clears the external wakeup source flag for a specific pin.
*
* param base WUU peripheral base address.
* param pinIndex A pin index, which starts from 0.
*/
void WUU_ClearExternalWakeupPinFlag(WUU_Type *base, uint32_t pinIndex);
/* @} */
#if defined(__cplusplus)
}
#endif
/*! @} */
#endif /*_FSL_WUU_H_*/