217 lines
5.4 KiB
C
217 lines
5.4 KiB
C
/**
|
|
* @file HwA_wku.h
|
|
* @author Flagchip
|
|
* @brief WKU hardware access layer
|
|
* @version 2.0.0
|
|
* @date 2024-08-20
|
|
*
|
|
* SDK Version: 2.6.0
|
|
*
|
|
|
|
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
|
|
*
|
|
* @details
|
|
*/
|
|
/* ********************************************************************************
|
|
* Revision History:
|
|
*
|
|
* Version Date Initials CR# Descriptions
|
|
* --------- ---------- ------------ ---------- ---------------
|
|
* 0.1.0 2023-12-15 Flagchip084 N/A First version for FC7300
|
|
* 2.0.0 2024-10-12 Flagchip084 N/A Change version and release
|
|
******************************************************************************** */
|
|
#ifndef _HWA_WKU_H_
|
|
#define _HWA_WKU_H_
|
|
|
|
#include "device_header.h"
|
|
|
|
#if WKU_INSTANCE_COUNT > 0U
|
|
|
|
/**
|
|
* @defgroup HwA_wku HwA_wku
|
|
* @ingroup module_driver_wku
|
|
* @{
|
|
*/
|
|
|
|
/********* Local typedef ************/
|
|
#define WKU_MWR0 0x0000100U
|
|
#define WKU_MWR1 0x0010000U
|
|
#define WKU_MWR2 0x1000000U
|
|
|
|
/** @brief Wku input */
|
|
typedef enum
|
|
{
|
|
#if (WKU_GPIO_TYPE_0_SUPPORT || WKU_GPIO_TYPE_1_SUPPORT)
|
|
WKU_INPUT_FCSPI0 = 0x000040U,
|
|
WKU_INPUT_FCUART = 0x000080U,
|
|
WKU_INPUT_CMP0 = 0x000400U,
|
|
WKU_INPUT_CMP1 = 0x000800U,
|
|
WKU_INPUT_TSTMP0 = 0x002000U,
|
|
WKU_INPUT_RTC_ALARM = 0x004000U,
|
|
WKU_INPUT_RTC_SECONDS = 0x008000U,
|
|
WKU_INPUT_FCPIT0 = 0x010000U,
|
|
WKU_INPUT_CMU0 = 0x020000U,
|
|
WKU_INPUT_AONTIMER = 0x040000U,
|
|
WKU_INPUT_GPIOA = 0x080000U,
|
|
|
|
#if WKU_GPIO_TYPE_0_SUPPORT
|
|
WKU_INPUT_GPIOC = 0x100000U,
|
|
WKU_INPUT_GPIOE = 0x200000U,
|
|
WKU_INPUT_GPIOF = 0x400000U,
|
|
WKU_INPUT_GPIOG = 0x800000U,
|
|
#else
|
|
WKU_INPUT_GPIOC = 0x200000U,
|
|
WKU_INPUT_GPIOD = 0x400000U,
|
|
WKU_INPUT_GPIOE = 0x800000U,
|
|
#endif /* WKU_GPIO_TYPE_0_SUPPORT */
|
|
|
|
#elif WKU_GPIO_TYPE_2_SUPPORT
|
|
WKU_INPUT_GPIOB = 0x000001U,
|
|
WKU_INPUT_GPIOD = 0x000002U,
|
|
WKU_INPUT_GPIOF = 0x000004U,
|
|
WKU_INPUT_GPIOG = 0x000008U,
|
|
WKU_INPUT_GPIOH = 0x000010U,
|
|
WKU_INPUT_GPIOI = 0x000020U,
|
|
|
|
#if WKU_GPIO_TYPE_2_ADC2_SUPPORT
|
|
WKU_INPUT_ADC1_LPWAKE = 0x000100U,
|
|
WKU_INPUT_ADC2_LPWAKE = 0x000200U,
|
|
#else
|
|
WKU_INPUT_ADC0_LPWAKE = 0x000100U,
|
|
WKU_INPUT_ADC1_LPWAKE = 0x000200U,
|
|
#endif /* WKU_GPIO_TYPE_2_ADC2_SUPPORT */
|
|
|
|
#if WKU_GPIO_TYPE_2_CMP0_SUPPORT
|
|
WKU_INPUT_CMP0 = 0x000400U,
|
|
#endif /* WKU_GPIO_TYPE_2_CMP0_SUPPORT */
|
|
|
|
WKU_INPUT_TSTMP0 = 0x002000U,
|
|
WKU_INPUT_RTC_ALARM = 0x004000U,
|
|
WKU_INPUT_RTC_SECONDS = 0x008000U,
|
|
WKU_INPUT_AONTIMER0 = 0x040000U,
|
|
WKU_INPUT_GPIOA = 0x080000U,
|
|
WKU_INPUT_GPIOC = 0x100000U,
|
|
WKU_INPUT_GPIOE = 0x200000U,
|
|
#else
|
|
/* More supoort */
|
|
#endif /* (WKU_GPIO_TYPE_0_SUPPORT || WKU_GPIO_TYPE_1_SUPPORT) */
|
|
WKU_INPUT_MAX = 0xFFFFFFU
|
|
} WKU_WakeupInputType;
|
|
|
|
/********* Local inline function ************/
|
|
/**
|
|
* @brief Enable wakeup source
|
|
*
|
|
* @param eWakeup Wakeup source type
|
|
*/
|
|
LOCAL_INLINE void WKU_HWA_EnableWakeupSource(const WKU_WakeupInputType eWakeup)
|
|
{
|
|
if (eWakeup < WKU_MWR0)
|
|
{
|
|
WKU->MWER0 |= (uint32_t)eWakeup;
|
|
}
|
|
else if ((eWakeup < WKU_MWR1) && (eWakeup >= WKU_MWR0))
|
|
{
|
|
WKU->MWER1 |= ((uint32_t)eWakeup >> 8U);
|
|
}
|
|
else
|
|
{
|
|
WKU->MWER2 |= ((uint32_t)eWakeup >> 16U);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Disable wakeup source
|
|
*
|
|
* @param eWakeup Wakeup source type
|
|
*/
|
|
LOCAL_INLINE void WKU_HWA_DisableWakeupSource(const WKU_WakeupInputType eWakeup)
|
|
{
|
|
if (eWakeup < WKU_MWR0)
|
|
{
|
|
WKU->MWER0 &= ((~((uint32_t)eWakeup)) & (uint32_t)0xFF);
|
|
}
|
|
else if ((eWakeup < WKU_MWR1) && (eWakeup >= WKU_MWR0))
|
|
{
|
|
WKU->MWER1 &= ((~(uint32_t)((uint32_t)eWakeup >> 8U)) & (uint32_t)0xFF);
|
|
}
|
|
else
|
|
{
|
|
WKU->MWER2 &= ((~(uint32_t)((uint32_t)eWakeup >> 16U)) & (uint32_t)0xFF);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Read WKU wakeup source
|
|
*
|
|
* @return WKU wakeup source value
|
|
*/
|
|
LOCAL_INLINE uint32_t WKU_HWA_ReadWakeupSource(void)
|
|
{
|
|
uint32_t u32WakeupSource = 0U;
|
|
|
|
u32WakeupSource = (uint32_t)(WKU->MWER0);
|
|
u32WakeupSource |= (uint32_t)((uint32_t)(WKU->MWER1) << 8U);
|
|
u32WakeupSource |= (uint32_t)((uint32_t)(WKU->MWER2) << 16U);
|
|
|
|
return u32WakeupSource;
|
|
}
|
|
|
|
#if WKU_GPIO_TYPE_2_SUPPORT
|
|
/**
|
|
* @brief Get wakeup flag
|
|
*
|
|
* @param eWakeup
|
|
* @return
|
|
*/
|
|
LOCAL_INLINE bool WKU_HWA_CheckWakeupFlag(const WKU_WakeupInputType eWakeup)
|
|
{
|
|
uint32_t u32WakeupFlag = 0U;
|
|
|
|
if (eWakeup < WKU_MWR0)
|
|
{
|
|
u32WakeupFlag = WKU->MWFR0 & (((uint32_t)eWakeup) & (uint32_t)0xFF);
|
|
}
|
|
else if ((eWakeup < WKU_MWR1) && (eWakeup >= WKU_MWR0))
|
|
{
|
|
u32WakeupFlag = WKU->MWFR1 & (((uint32_t)((uint32_t)eWakeup >> 8U)) & (uint32_t)0xFF);
|
|
}
|
|
else
|
|
{
|
|
u32WakeupFlag = WKU->MWFR2 & (((uint32_t)((uint32_t)eWakeup >> 16U)) & (uint32_t)0xFF);
|
|
}
|
|
|
|
if (u32WakeupFlag != 0U)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Get all wakeup flag
|
|
*
|
|
* @param void
|
|
* @return
|
|
*/
|
|
LOCAL_INLINE uint32_t WKU_HWA_GetAllWakeupFlag(void)
|
|
{
|
|
uint32_t u32WakeupFlag = 0U;
|
|
|
|
u32WakeupFlag = (uint32_t)(WKU->MWFR0);
|
|
u32WakeupFlag |= (uint32_t)((uint32_t)(WKU->MWFR1) << 8U);
|
|
u32WakeupFlag |= (uint32_t)((uint32_t)(WKU->MWFR2) << 16U);
|
|
|
|
return u32WakeupFlag;
|
|
}
|
|
#endif /* WKU_GPIO_TYPE_2_SUPPORT */
|
|
|
|
/** @}*/
|
|
|
|
#endif /* #if WKU_INSTANCE_COUNT > 0U */
|
|
|
|
#endif /* #ifndef _HWA_WKU_H_ */
|