/**
*********************************************************************************************************
* Copyright(c) 2020, Realtek Semiconductor Corporation. All rights reserved.
*********************************************************************************************************
* \file rtl876x_lpc.h
* \brief The header file of the peripheral LPC driver.
* \details This file provides all LPC firmware functions.
* \author yuan
* \date 2020-11-16
* \version v2.1.1
* *********************************************************************************************************
*/
#ifndef _RTL876X_LPC_H_
#define _RTL876X_LPC_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* \addtogroup IO Peripheral Drivers
* \defgroup LPC LPC
*
* \brief Manage the LPC peripheral functions.
*
* \ingroup IO
*/
/*============================================================================*
* Includes
*============================================================================*/
#include "rtl876x.h"
/*============================================================================*
* Types
*============================================================================*/
/**
* \defgroup LPC_Exported_Types Init Params Struct
*
* \ingroup LPC
*/
/**
* \brief LPC init structure definition
*
* \ingroup LPC_Exported_Types
*/
typedef struct
{
uint16_t LPC_Channel; /*!< Specifies the input pin.
This parameter can be a value of ADC_0 to ADC_7. */
uint32_t LPC_Edge; /*!< Specifies the comparator output edge. */
uint32_t LPC_Threshold; /*!< Specifies the threshold value of comparator voltage. */
} LPC_InitTypeDef;
/*============================================================================*
* Register Defines
*============================================================================*/
/* Peripheral: LPC */
/* Description: Low Power Comparator register defines */
/* Register: LPC_AON_52 */
/* Description: LPC AON Register for threshold voltage configuration */
/* LPC_AON_52[5:0] :LPC_Threshold. Specified the threshold value of comparator voltage */
#define LPC_AON_52_THRESHOLD_Pos (0UL)
#define LPC_AON_52_THRESHOLD_Msk (0x3FUL << LPC_AON_52_THRESHOLD_Pos)
#define LPC_AON_52_THRESHOLD_Clr (~LPC_AON_52_THRESHOLD_Msk)
/* Register: LPC_AON_114 */
/* Description: LPC AON Register for parameters configuration */
/* LPC_AON_114[5] :LPC_Edge. Specified the cmp output edge */
#define LPC_AON_114_POSEDGE_Pos (5UL)
#define LPC_AON_114_POSEDGE_Msk (0x1UL << LPC_AON_114_POSEDGE_Pos)
/* LPC_AON_114[4:1] :LPC_Channel. Specified the input pin */
#define LPC_AON_114_CH_NUM_Pos (1UL)
#define LPC_AON_114_CH_NUM_Msk (0xFUL << LPC_AON_114_CH_NUM_Pos)
/* LPC_AON_114[0] : LPC_POWER. 1: Enable power of low power cmp */
#define LPC_AON_114_POWER_EN_Pos (0UL)
#define LPC_AON_114_POWER_EN_Msk (0x1UL << LPC_AON_114_POWER_EN_Pos)
#define LPC_AON_114_POWER_EN_CLR (~LPC_AON_114_POWER_EN_Msk)
#define LPC_AON_114_DEFAULT_Msk (0x3F)
#define LPC_AON_114_DEFAULT_Clr (~LPC_AON_114_DEFAULT_Msk)
/* Register: LPC_CR0 */
/* Description: Control Register 0 */
/* LPC_CR0[20] :LPC_LPCOMP_OUTPUT_EN. 1: Enable lpcomp out to NVIC and power sequence. */
#define LPC_LPCOMP_OUTPUT_EN_Pos (20UL)
#define LPC_LPCOMP_OUTPUT_EN_Msk (0x1UL << LPC_LPCOMP_OUTPUT_EN_Pos)
#define LPC_LPCOMP_OUTPUT_EN_CLR (~(LPC_LPCOMP_OUTPUT_EN_Msk))
/* LPC_CR0[19] :LPC_SRC_INT_EN. 1: Enable lpcomp out sync signal to AON interrupt */
#define LPC_INT_LPCOMP_AON_EN_Pos (19UL)
#define LPC_INT_LPCOMP_AON_EN_Msk (0x1UL << LPC_INT_LPCOMP_AON_EN_Pos)
#define LPC_INT_LPCOMP_AON_EN_CLR (~(LPC_INT_LPCOMP_AON_EN_Msk))
/* LPC_CR0[9] :LPC_NV_EN. 1: Enable lpcomp out sync signal to CPU interrupt */
#define LPC_INT_LPCOMP_NV_EN_Pos (9UL)
#define LPC_INT_LPCOMP_NV_EN_Msk (0x1UL << LPC_INT_LPCOMP_NV_EN_Pos)
#define LPC_INT_LPCOMP_NV_EN_CLR (~(LPC_INT_LPCOMP_NV_EN_Msk))
/* LPC_CR0[8] :LPC_EVENT_EN. 1: Enable or disable LPCOMP event */
#define LPC_INT_LPCOMP_CNT_EN_Pos (8UL)
#define LPC_INT_LPCOMP_CNT_EN_Msk (0x1UL << LPC_INT_LPCOMP_CNT_EN_Pos)
#define LPC_INT_LPCOMP_CNT_EN_CLR (~(LPC_INT_LPCOMP_CNT_EN_Msk))
/* LPC_CR0[2] :LPC_FLAG_CLEAR. 1: Clear Event Status of LPCOMP */
#define LPC_LPCOMP_CNT_CLEAR_Pos (2UL)
#define LPC_LPCOMP_CNT_CLEAR_Msk (0x1UL << LPC_LPCOMP_CNT_CLEAR_Pos)
#define LPC_LPCOMP_CNT_CLEAR_CLR (~(LPC_LPCOMP_CNT_CLEAR_Msk))
/* LPC_CR0[1] :LPC_COUNTER_START. 1: Start LPCOMP counter. */
#define LPC_COUNTER_START_Pos (1UL)
#define LPC_COUNTER_START_Msk (0x1UL << LPC_COUNTER_START_Pos)
#define LPC_COUNTER_START_CLR (~(LPC_COUNTER_START_Msk))
/* LPC_CR0[0] :LPC_COUNTER_RESET. 1: Reset LPCOMP Counter */
#define LPC_COUNTER_RESET_Pos (0UL)
#define LPC_COUNTER_RESET_Msk (0x1UL << LPC_COUNTER_RESET_Pos)
#define LPC_COUNTER_RESET_CLR (~(LPC_COUNTER_RESET_Msk))
/* Register: LPC_SR */
/* Description: Status Register */
/* LPC_SR[1] :LPC_COMP_OUTPUT. Event Status of LPCOMP output signal */
#define LPC_LPCOMP_OUTPUT_AON_Pos (1UL) /*!< Position of */
#define LPC_LPCOMP_OUTPUT_AON_Msk (0x1UL << LPC_LPCOMP_OUTPUT_AON_Pos)
/* LPC_SR[0] :LPC_COMP. Event Status of LPCOMP */
#define LPC_LPCOMP_CNT_Pos (0UL) /*!< Position of */
#define LPC_LPCOMP_CNT_Msk (0x1UL << LPC_LPCOMP_CNT_Pos)
/*============================================================================*
* Constants
*============================================================================*/
/**
* \defgroup LPC_Exported_constants Marco Definitions
*
* \ingroup LPC
*/
/**
* \defgroup LPC_Channel LPC Channel
* \{
* \ingroup LPC_Exported_constants
*/
#define LPC_CHANNEL_P2_2 ((uint32_t)0)
#define LPC_CHANNEL_P2_3 ((uint32_t)1)
#define LPC_CHANNEL_P2_6 ((uint32_t)2)
#define LPC_CHANNEL_VBAT ((uint32_t)3)
/** \} */
#define IS_LPC_CHANNEL(CHANNEL) (((CHANNEL) == LPC_CHANNEL_P2_2) || \
((CHANNEL) == LPC_CHANNEL_P2_3) || \
((CHANNEL) == LPC_CHANNEL_P2_6) || \
((CHANNEL) == LPC_CHANNEL_P2_7) || \
((CHANNEL) == LPC_CHANNEL_VBAT))
/** \defgroup LPC_Edge LPC Edge
* \{
* \ingroup LPC_Exported_constants
*/
#define LPC_Vin_Below_Vth ((uint32_t)0)
#define LPC_Vin_Over_Vth ((uint32_t)(0x0001UL << LPC_AON_114_POSEDGE_Pos))
/** \} */
#define IS_LPC_EDGE(EDGE) (((EDGE) == LPC_Vin_Below_Vth) || \
((EDGE) == LPC_Vin_Over_Vth))
/** \defgroup LPC_Threshold LPC Threshold
* \{
* \ingroup LPC_Exported_constants
*/
#define LPC_80_mV ((uint32_t)(0x0000 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_160_mV ((uint32_t)(0x0001 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_240_mV ((uint32_t)(0x0002 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_320_mV ((uint32_t)(0x0003 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_400_mV ((uint32_t)(0x0004 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_480_mV ((uint32_t)(0x0005 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_560_mV ((uint32_t)(0x0006 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_640_mV ((uint32_t)(0x0007 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_680_mV ((uint32_t)(0x0008 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_720_mV ((uint32_t)(0x0009 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_760_mV ((uint32_t)(0x000a << LPC_AON_52_THRESHOLD_Pos))
#define LPC_800_mV ((uint32_t)(0x000b << LPC_AON_52_THRESHOLD_Pos))
#define LPC_840_mV ((uint32_t)(0x000c << LPC_AON_52_THRESHOLD_Pos))
#define LPC_880_mV ((uint32_t)(0x000d << LPC_AON_52_THRESHOLD_Pos))
#define LPC_920_mV ((uint32_t)(0x000e << LPC_AON_52_THRESHOLD_Pos))
#define LPC_960_mV ((uint32_t)(0x000f << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1000_mV ((uint32_t)(0x0010 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1040_mV ((uint32_t)(0x0011 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1080_mV ((uint32_t)(0x0012 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1120_mV ((uint32_t)(0x0013 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1160_mV ((uint32_t)(0x0014 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1200_mV ((uint32_t)(0x0015 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1240_mV ((uint32_t)(0x0016 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1280_mV ((uint32_t)(0x0017 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1320_mV ((uint32_t)(0x0018 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1360_mV ((uint32_t)(0x0019 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1400_mV ((uint32_t)(0x001a << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1440_mV ((uint32_t)(0x001b << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1480_mV ((uint32_t)(0x001c << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1520_mV ((uint32_t)(0x001d << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1560_mV ((uint32_t)(0x001e << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1600_mV ((uint32_t)(0x001f << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1640_mV ((uint32_t)(0x0020 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1680_mV ((uint32_t)(0x0021 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1720_mV ((uint32_t)(0x0022 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1760_mV ((uint32_t)(0x0023 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1800_mV ((uint32_t)(0x0024 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1840_mV ((uint32_t)(0x0025 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1880_mV ((uint32_t)(0x0026 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1920_mV ((uint32_t)(0x0027 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_1960_mV ((uint32_t)(0x0028 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2000_mV ((uint32_t)(0x0029 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2040_mV ((uint32_t)(0x002a << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2080_mV ((uint32_t)(0x002b << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2120_mV ((uint32_t)(0x002c << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2160_mV ((uint32_t)(0x002d << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2200_mV ((uint32_t)(0x002e << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2240_mV ((uint32_t)(0x002f << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2280_mV ((uint32_t)(0x0030 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2320_mV ((uint32_t)(0x0031 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2360_mV ((uint32_t)(0x0032 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2400_mV ((uint32_t)(0x0033 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2440_mV ((uint32_t)(0x0034 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2480_mV ((uint32_t)(0x0035 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2520_mV ((uint32_t)(0x0036 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2560_mV ((uint32_t)(0x0037 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2640_mV ((uint32_t)(0x0038 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2720_mV ((uint32_t)(0x0039 << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2800_mV ((uint32_t)(0x003a << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2880_mV ((uint32_t)(0x003b << LPC_AON_52_THRESHOLD_Pos))
#define LPC_2960_mV ((uint32_t)(0x003c << LPC_AON_52_THRESHOLD_Pos))
#define LPC_3040_mV ((uint32_t)(0x003d << LPC_AON_52_THRESHOLD_Pos))
#define LPC_3120_mV ((uint32_t)(0x003e << LPC_AON_52_THRESHOLD_Pos))
#define LPC_3200_mV ((uint32_t)(0x003f << LPC_AON_52_THRESHOLD_Pos))
/** \} */
#define IS_LPC_THRESHOLD(THRESHOLD) (((THRESHOLD) == LPC_80_mV) || ((THRESHOLD) == LPC_160_mV) || ((THRESHOLD) == LPC_240_mV) || \
((THRESHOLD) == LPC_320_mV) || ((THRESHOLD) == LPC_400_mV) || ((THRESHOLD) == LPC_480_mV) || \
((THRESHOLD) == LPC_560_mV) || ((THRESHOLD) == LPC_640_mV) || ((THRESHOLD) == LPC_680_mV) || \
((THRESHOLD) == LPC_720_mV) || ((THRESHOLD) == LPC_760_mV) || ((THRESHOLD) == LPC_800_mV) || \
((THRESHOLD) == LPC_840_mV) || ((THRESHOLD) == LPC_880_mV) || ((THRESHOLD) == LPC_920_mV) || \
((THRESHOLD) == LPC_960_mV) || ((THRESHOLD) == LPC_1000_mV) || ((THRESHOLD) == LPC_1040_mV) || \
((THRESHOLD) == LPC_1080_mV) || ((THRESHOLD) == LPC_1120_mV) || ((THRESHOLD) == LPC_1160_mV) || \
((THRESHOLD) == LPC_1200_mV) || ((THRESHOLD) == LPC_1240_mV) || ((THRESHOLD) == LPC_1280_mV) || \
((THRESHOLD) == LPC_1320_mV) || ((THRESHOLD) == LPC_1360_mV) || ((THRESHOLD) == LPC_1400_mV) || \
((THRESHOLD) == LPC_1440_mV) || ((THRESHOLD) == LPC_1480_mV) || ((THRESHOLD) == LPC_1520_mV) || \
((THRESHOLD) == LPC_1560_mV) || ((THRESHOLD) == LPC_1600_mV) || ((THRESHOLD) == LPC_1640_mV) || \
((THRESHOLD) == LPC_1680_mV) || ((THRESHOLD) == LPC_1720_mV) || ((THRESHOLD) == LPC_1760_mV) || \
((THRESHOLD) == LPC_1800_mV) || ((THRESHOLD) == LPC_1840_mV) || ((THRESHOLD) == LPC_1880_mV) || \
((THRESHOLD) == LPC_1920_mV) || ((THRESHOLD) == LPC_1960_mV) || ((THRESHOLD) == LPC_2000_mV) || \
((THRESHOLD) == LPC_2040_mV) || ((THRESHOLD) == LPC_2080_mV) || ((THRESHOLD) == LPC_2120_mV) || \
((THRESHOLD) == LPC_2160_mV) || ((THRESHOLD) == LPC_2200_mV) || ((THRESHOLD) == LPC_2240_mV) || \
((THRESHOLD) == LPC_2280_mV) || ((THRESHOLD) == LPC_2320_mV) || ((THRESHOLD) == LPC_2360_mV) || \
((THRESHOLD) == LPC_2400_mV) || ((THRESHOLD) == LPC_2440_mV) || ((THRESHOLD) == LPC_2480_mV) || \
((THRESHOLD) == LPC_2520_mV) || ((THRESHOLD) == LPC_2560_mV) || ((THRESHOLD) == LPC_2640_mV) || \
((THRESHOLD) == LPC_2720_mV) || ((THRESHOLD) == LPC_2800_mV) || ((THRESHOLD) == LPC_2880_mV) || \
((THRESHOLD) == LPC_2960_mV) || ((THRESHOLD) == LPC_3040_mV) || ((THRESHOLD) == LPC_3120_mV) || \
((THRESHOLD) == LPC_3200_mV))
/** \defgroup LPC_Interrupts_Definition LPC Interrupts Definition
* \{
* \ingroup LPC_Exported_constants
*/
#define LPC_INT_LPCOMP_VOL (LPC_LPCOMP_OUTPUT_EN_Msk)
#define LPC_INT_LPCOMP_CNT (LPC_INT_LPCOMP_CNT_EN_Msk)
/** \} */
#define IS_LPC_CONFIG_INT(INT) (((INT) == LPC_INT_LPCOMP_VOL) || \
((INT) == LPC_INT_LPCOMP_CNT))
#define IS_LPC_STATUS_INT(INT) ((INT) == LPC_INT_LPCOMP_CNT)
#define IS_LPC_CLEAR_INT(INT) ((INT) == LPC_INT_LPCOMP_CNT)
/** \defgroup LPC_Flags_Definition LPC Flags Definition
* \{
* \ingroup LPC_Exported_constants
*/
#define LPC_FLAG_LPCOMP_AON (LPC_INT_LPCOMP_AON_EN_Msk)
#define LPC_FLAG_LPCOMP_CNT (LPC_INT_LPCOMP_CNT_EN_Msk)
/** \} */
#define IS_LPC_FLAG(FLAG) (((FLAG) == LPC_FLAG_LPCOMP_AON) || \
((FLAG) == LPC_FLAG_LPCOMP_CNT))
#define IS_LPC_CLEAR_FLAG(FLAG) ((FLAG) == LPC_FLAG_LPCOMP_CNT)
/*============================================================================*
* Functions
*============================================================================*/
/**
* \defgroup LPC_Exported_Functions Peripheral APIs
* \{
* \ingroup LPC
*/
/**
* @brief Reset LPC.
* @param None
* @return None
*/
void LPC_DeInit(void);
/**
* \brief Initializes LPC peripheral according to
* the specified parameters in LPC_InitStruct.
* \param[in] LPC_InitStruct: Pointer to a LPC_InitTypeDef structure that contains
* the configuration information for the specified LPC peripheral.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* LPC_INTConfig(LPC_INT_LPCOMP_CNT, ENABLE);
*
* NVIC_InitTypeDef NVIC_InitStruct;
* NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
* NVIC_InitStruct.NVIC_IRQChannelPriority = 2;
* NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
* NVIC_Init(&NVIC_InitStruct);
* LPC_NvCmd(ENABLE);
* }
* \endcode
*/
void LPC_Init(LPC_InitTypeDef *LPC_InitStruct);
/**
* \brief Fills each LPC_InitStruct member with its default value.
* \param[in] LPC_InitStruct : Pointer to a LPC_InitTypeDef structure which will be initialized.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* }
* \endcode
*/
void LPC_StructInit(LPC_InitTypeDef *LPC_InitStruct);
/**
* \brief Enables or disables LPC peripheral.
* \param[in] NewState: New state of LPC peripheral.
* This parameter can be: ENABLE or DISABLE.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
* }
* \endcode
*/
void LPC_Cmd(FunctionalState NewState);
/**
* \brief Start or stop the LPC counter.
* \param[in] NewState: New state of the LPC counter.
* This parameter can be one of the following values:
* \arg ENABLE: Start LPCOMP counter.
* \arg DISABLE: Stop LPCOMP counter.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* }
* \endcode
*/
void LPC_CounterCmd(FunctionalState NewState);
/**
* \brief Enables or disables the specified LPC interrupts.
* \param[in] LPC_INT: Specifies the LPC interrupt source to be enabled or disabled.
* This parameter can be one of the following values:
* \arg LPC_INT_VOLTAGE_COMP: Voltage detection interrupt source.If VinExample usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* LPC_INTConfig(LPC_INT_LPCOMP_CNT, ENABLE);
*
* NVIC_InitTypeDef NVIC_InitStruct;
* NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
* NVIC_InitStruct.NVIC_IRQChannelPriority = 2;
* NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
* NVIC_Init(&NVIC_InitStruct);
* LPC_NvCmd(ENABLE);
* }
* \endcode
*/
void LPC_INTConfig(uint32_t LPC_INT, FunctionalState NewState);
/**
* \brief Enable LPC interrupt signal to CPU NVIC.
* \param[in] NewState: Enable or disable RTC interrupt signal to CCU.
* This parameter can be: ENABLE or DISABLE..
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* LPC_INTConfig(LPC_INT_LPCOMP_CNT, ENABLE);
* LPC_CompOutputConfig(ENABLE);
*
* NVIC_InitTypeDef NVIC_InitStruct;
* NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
* NVIC_InitStruct.NVIC_IRQChannelPriority = 2;
* NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
* NVIC_Init(&NVIC_InitStruct);
* }
* \endcode
*/
void LPC_INTCmd(FunctionalState NewState);
/**
* \brief Enable wakeup signal to power sequence.
* \param[in] NewState: Enable or disable LPC wakeup signal to power sequence.
* This parameter can be: ENABLE or DISABLE..
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* LPC_INTConfig(LPC_INT_LPCOMP_CNT, ENABLE);
* LPC_INTCmd(ENABLE);
* LPC_WKCmd(ENABLE);
*
* NVIC_InitTypeDef NVIC_InitStruct;
* NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
* NVIC_InitStruct.NVIC_IRQChannelPriority = 2;
* NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
* NVIC_Init(&NVIC_InitStruct);
* }
* \endcode
*/
void LPC_WKCmd(FunctionalState NewState);
/**
* \brief Configure LPCOMP counter's comparator value.
* \param[in] value: LPCOMP counter's comparator value which can be 0 to 0xfff.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* }
* \endcode
*/
void LPC_SetCompValue(uint32_t value);
/**
* \brief Reset the LPC counter.
* \param None.
* \return None.
*
* Example usage
* \code{.c}
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* }
* \endcode
*/
void LPC_ResetCounter(void);
/**
* @brief Checks whether the specified LPC interrupt is set or not.
* @param LPC_FLAG: specifies the LPC interrupt to check.
* This parameter can be one of the following values:
* @arg LPC_FLAG_LPCOMP_AON: couter comparator AON flag.
* @arg LPC_FLAG_LPCOMP_CNT: couter comparator flag.
* @retval The new state of SPI_IT (SET or RESET).
*/
FlagStatus LPC_GetFlagStatus(uint32_t LPC_FLAG);
/**
* @brief Clear the specified LPC flag.
* @param LPC_FLAG: specifies the LPC flag to clear.
* This parameter can be one of the following values:
* @arg LPC_FLAG_LPCOMP_CNT: couter comparator flag.
* @retval None
*/
void LPC_ClearFlag(uint32_t LPC_FLAG);
/**
* \brief Checks whether the specified LPC interrupt is set or not.
* \param[in] LPC_INT: specifies the LPC interrupt to check.
* This parameter can be one of the following values:
* \arg LPC_INT_COUNT_COMP: couter comparator interrupt.
* \return The new state of SPI_IT (SET or RESET).
*
* Example usage
* \code{.c}
*
* #define LPC_CAPTURE_PIN P2_3
* #define LPC_CAPTURE_CHANNEL LPC_CAPTURE_PIN - P2_0
* #define LPC_VOLTAGE_DETECT_EDGE LPC_Vin_Over_Vth;
* #define LPC_VOLTAGE_DETECT_THRESHOLD LPC_2400_mV;
* #define LPC_COMP_VALUE 0x0A//A LPC comparator interrupt occurs every ten times
*
* void board_lpc_init(void)
* {
* Pad_Config(LPC_CAPTURE_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
* PAD_OUT_HIGH);
* Pinmux_Config(LPC_CAPTURE_PIN, IDLE_MODE);
* }
*
* void driver_lpc_init(void)
* {
* LPC_InitTypeDef LPC_InitStruct;
*
* LPC_StructInit(&LPC_InitStruct);
* LPC_InitStruct.LPC_Channel = LPC_CAPTURE_CHANNEL;
* LPC_InitStruct.LPC_Edge = LPC_VOLTAGE_DETECT_EDGE;
* LPC_InitStruct.LPC_Threshold = LPC_VOLTAGE_DETECT_THRESHOLD;
* LPC_Init(&LPC_InitStruct);
* LPC_Cmd(ENABLE);
*
* LPC_ResetCounter();
* LPC_SetCompValue(LPC_COMP_VALUE);
* LPC_CounterCmd(ENABLE);
* LPC_INTConfig(LPC_INT_LPCOMP_CNT, ENABLE);
*
* NVIC_InitTypeDef NVIC_InitStruct;
* NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn;
* NVIC_InitStruct.NVIC_IRQChannelPriority = 2;
* NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
* NVIC_Init(&NVIC_InitStruct);
* LPC_NvCmd(ENABLE);
* }
*
* void lpc_demo(void)
* {
* board_lpc_init();
* driver_lpc_init();
* }
*
* void LPCOMP_Handler(void)
* {
* if (LPC_GetINTStatus(LPC_INT_LPCOMP_CNT) == SET)
* {
* LPC_SetCompValue(LPC_GetCounter() + LPC_COMP_VALUE);
* LPC_ClearINTPendingBit(LPC_INT_LPCOMP_CNT);
* }
* }
* \endcode
*/
ITStatus LPC_GetINTStatus(uint32_t LPC_INT);
/**
* \brief Clear the specified LPC interrupt pending bit.
* \param[in] LPC_INT: specifies the LPC interrupt to clear.
* This parameter can be one of the following values:
* \arg LPC_INT_COUNT_COMP: Couter comparator interrupt.
* \return None.
*
* Example usage
* \code{.c}
*
* void lpc_demo(void)
* {
* LPC_ClearINTPendingBit(LPC_INT_COUNT_COMP);
* }
* \endcode
*/
void LPC_ClearINTPendingBit(uint32_t LPC_INT);
/**
* \brief Read LPCOMP comparator value.
* \param None.
* \return LPCOMP comparator value.
*
* Example usage
* \code{.c}
*
* void lpc_demo(void)
* {
* uint16_t value = LPC_GetCompValue();
* }
* \endcode
*/
__STATIC_INLINE uint16_t LPC_GetCompValue(void)
{
return ((LPC->LPC_CMP) & 0xFFF);
}
/**
* \brief Read LPC counter value.
* \return LPCOMP counter value.
*
* Example usage
* \code{.c}
*
* void lpc_demo(void)
* {
* uint16_t counter = LPC_GetCounter();
* }
* \endcode
*/
__STATIC_INLINE uint16_t LPC_GetCounter(void)
{
return ((LPC->LPC_CNT) & 0xFFF);
}
/** \} */ /* End of group LPC_Exported_Functions */
#ifdef __cplusplus
}
#endif
#endif /* _RTL876X_LPC_H_ */
/******************* (C) COPYRIGHT 2020 Realtek Semiconductor Corporation *****END OF FILE****/