#ifndef __LKS32MC09X_WAKE_H__
#define __LKS32MC09X_WAKE_H__

#include "lks32mc09x_reg.h"

/**
 * @brief 低功耗IO唤醒电平枚举成员
 */
typedef enum
{
    WAKE_TRIG_LOW,  ///< 输入IO低电平唤醒
    WAKE_TRIG_HIGH, ///< 输入IO高电平唤醒
} WAKE_TRIG_x;

///< 休眠唤醒间隔时间
#define SYS_WakeInterval_025s 0x00 ///< 休眠唤醒间隔时间0.25s
#define SYS_WakeInterval_05s  0x01 ///< 休眠唤醒间隔时间0.5s
#define SYS_WakeInterval_1s   0x02 ///< 休眠唤醒间隔时间1s
#define SYS_WakeInterval_2s   0x03 ///< 休眠唤醒间隔时间2s
#define SYS_WakeInterval_4s   0x04 ///< 休眠唤醒间隔时间4s
#define SYS_WakeInterval_8s   0x05 ///< 休眠唤醒间隔时间8s
#define SYS_WakeInterval_16s  0x06 ///< 休眠唤醒间隔时间16s
#define SYS_WakeInterval_32s  0x07 ///< 休眠唤醒间隔时间32s

///< 低功耗唤醒IO滤波
#define WAKE_FLT_EN 0x02 ///< 使能IO滤波
#define WAKE_FLT_DI 0x00 ///< 关闭IO滤波

///< 低功耗唤醒IO选择
#define WAKE_IO_P0_0    BIT0  ///< P0.0 作为唤醒IO
#define WAKE_IO_P0_2    BIT1  ///< P0.2 作为唤醒IO
#define WAKE_IO_P0_12   BIT2  ///< P0.12作为唤醒IO
#define WAKE_IO_P0_13   BIT3  ///< P0.13作为唤醒IO
#define WAKE_IO_P0_14   BIT4  ///< P0.14作为唤醒IO
#define WAKE_IO_P2_7    BIT5  ///< P2.7 作为唤醒IO
#define WAKE_IO_P2_4    BIT6  ///< P2.4 作为唤醒IO
#define WAKE_IO_P2_0    BIT7  ///< P2.0 作为唤醒IO
#define WAKE_IO_CLUOUT0 BIT8  ///< CLUOUT0 作为唤醒使能
#define WAKE_IO_CLUOUT1 BIT9  ///< CLUOUT1 作为唤醒使能
#define WAKE_IO_CLUOUT2 BIT10 ///< CLUOUT2 作为唤醒使能
#define WAKE_IO_CLUOUT3 BIT11 ///< CLUOUT3 作为唤醒使能

/**
 * @brief 清除休眠事件记录
 */
void WAKE_EVTCLRSleep(void);

/**
 * @brief 进入低功耗模式
 */
void WAKE_FallSleep(void);

/**
 * @brief 设置唤醒间隔时间
 * @param rth 唤醒复位阈值，由于计数器计数阈值是从复位阈值开始计数的，所有唤醒阈值必须大于复位阈值
 * @param wth 唤醒阈值
 * @param ena 使能标志
 */
void WAKE_SetWakeInterval(uint32_t rth, uint32_t wth, uint8_t ena);

/**
 * @brief 设置唤醒IO
 * @param WAKE_IO_x 唤醒IO选择
 * @param trigLevel 触发电平
 * @param flt 滤波使能
 * @param ena 使能标志
 */
void WAKE_SetWakeIO(uint32_t WAKE_IO_x, WAKE_TRIG_x trigLevel, uint32_t flt, uint8_t ena);

#endif
