204 lines
6.0 KiB
C
204 lines
6.0 KiB
C
|
/*******************************************************************************
|
|||
|
* @Copyright (c) :(C)2020, Qingdao ieslab Co., Ltd
|
|||
|
* @FileName :hc32_rtcc_driver.c
|
|||
|
* @Author :Kv-L
|
|||
|
* @Version :V1.0
|
|||
|
* @Date :2020-07-01 15:30:52
|
|||
|
* @Description :the function of the entity of GP22Gas_rtcc_driver.c
|
|||
|
*******************************************************************************/
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C"
|
|||
|
{
|
|||
|
#endif
|
|||
|
|
|||
|
/* Includes ------------------------------------------------------------------*/
|
|||
|
#include "UWater_lptimer_driver.h"
|
|||
|
|
|||
|
|
|||
|
/* Private variables ---------------------------------------------------------*/
|
|||
|
u8 lpTimer_flag = FALSE;
|
|||
|
|
|||
|
/* Private function prototypes -----------------------------------------------*/
|
|||
|
|
|||
|
//<2F><><EFBFBD>ڶ<EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>û<EFBFBD>ʱ2<CAB1><32>32.768CLK
|
|||
|
void LPTimer0Init(u8 Rtc_Clk_Source, u32 time)
|
|||
|
{
|
|||
|
stc_lptim_cfg_t stcLptCfg;
|
|||
|
|
|||
|
DDL_ZERO_STRUCT(stcLptCfg);
|
|||
|
|
|||
|
///< ʹ<><CAB9>LPTIM0 <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, TRUE);
|
|||
|
|
|||
|
stcLptCfg.enPrs = LptimPrsDiv256; //256<35><36>Ƶ 32768/256 = 128
|
|||
|
stcLptCfg.enGate = LptimGateLow;
|
|||
|
stcLptCfg.enGatep = LptimGatePLow;
|
|||
|
if(Rtc_Clk_Source)//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
{
|
|||
|
stcLptCfg.enTcksel = LptimRcl; //ѡ<><D1A1><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768(Clk_Init<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
}
|
|||
|
else//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
{
|
|||
|
stcLptCfg.enTcksel = LptimXtl; //ѡ<><D1A1><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768
|
|||
|
}
|
|||
|
//stcLptCfg.enTcksel = LptimXtl; //ѡ<><D1A1><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768
|
|||
|
//stcLptCfg.enTcksel = LptimRcl; //ѡ<><D1A1><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768
|
|||
|
stcLptCfg.enTogen = LptimTogEnLow;
|
|||
|
stcLptCfg.enCt = LptimTimerFun; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcLptCfg.enMd = LptimMode2; //<2F><><EFBFBD><EFBFBD>ģʽΪģʽ2<CABD><32><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װ<EFBFBD><D7B0>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ʱ<EFBFBD><CAB1>
|
|||
|
stcLptCfg.u16Arr = 65536 - time; //Ԥװ<D4A4>ؼĴ<D8BC><C4B4><EFBFBD>ֵ
|
|||
|
Lptim_Init(M0P_LPTIMER0, &stcLptCfg);
|
|||
|
|
|||
|
Lptim_ClrItStatus(M0P_LPTIMER0); //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
|||
|
Lptim_ConfIt(M0P_LPTIMER0, TRUE); //<2F><><EFBFBD><EFBFBD>LPTIMER<45>ж<EFBFBD>
|
|||
|
EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
|
|||
|
|
|||
|
Lptim_Cmd(M0P_LPTIMER0, TRUE);
|
|||
|
|
|||
|
// while (!M0P_LPTIMER0->CR_f.WT_FLAG)
|
|||
|
// {
|
|||
|
// ;
|
|||
|
// }
|
|||
|
// M0P_LPTIMER0->ARR = 65536 - time;
|
|||
|
// M0P_LPTIMER0->CNT = 0;
|
|||
|
// M0P_LPTIMER0->CR = 0x422; //<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9> ʱ<><CAB1>ѡ<EFBFBD><D1A1>XTL 16λ<36><CEBB>ʱ<EFBFBD><CAB1><EFBFBD>ط<EFBFBD>ʽ
|
|||
|
// M0P_LPTIMER0->CR_f.PRS = 2; //1
|
|||
|
// M0P_LPTIMER0->ICLR = 0;
|
|||
|
// EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
|
|||
|
}
|
|||
|
/****************************************************************************
|
|||
|
Function: LPTimer1Init
|
|||
|
Description: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
Input:
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*****************************************************************************/
|
|||
|
void LPTimer1Init(u8 Rtc_Clk_Source)
|
|||
|
{
|
|||
|
stc_lptim_cfg_t stcLptCfg;
|
|||
|
|
|||
|
DDL_ZERO_STRUCT(stcLptCfg);
|
|||
|
|
|||
|
///< ʹ<><CAB9>LPTIM1 <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim1, TRUE);
|
|||
|
|
|||
|
stcLptCfg.enPrs = LptimPrsDiv256; //256<35><36>Ƶ 32768/256 = 128
|
|||
|
stcLptCfg.enGate = LptimGateLow;
|
|||
|
stcLptCfg.enGatep = LptimGatePLow;
|
|||
|
|
|||
|
if(Rtc_Clk_Source)//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
{
|
|||
|
stcLptCfg.enTcksel = LptimRcl; //ѡ<><D1A1><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768(Clk_Init<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
}
|
|||
|
else//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
{
|
|||
|
stcLptCfg.enTcksel = LptimXtl; //ѡ<><D1A1><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> RC ʱ<><CAB1> RCL 32768 <20><> 38400 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>32768
|
|||
|
}
|
|||
|
stcLptCfg.enTogen = LptimTogEnLow;
|
|||
|
stcLptCfg.enCt = LptimTimerFun; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stcLptCfg.enMd = LptimMode1; //<2F><><EFBFBD><EFBFBD>ģʽΪģʽ1<CABD><31>16 λ<><CEBB><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ģʽ
|
|||
|
stcLptCfg.u16Arr = 0; //Ԥװ<D4A4>ؼĴ<D8BC><C4B4><EFBFBD>ֵ
|
|||
|
Lptim_Init(M0P_LPTIMER1, &stcLptCfg);
|
|||
|
|
|||
|
Lptim_ClrItStatus(M0P_LPTIMER1); //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
|||
|
Lptim_ConfIt(M0P_LPTIMER1, FALSE); //ȡ<><C8A1>LPTIMER1<52>ж<EFBFBD>
|
|||
|
EnableNvic(LPTIM_0_1_IRQn, IrqLevel3, TRUE);
|
|||
|
|
|||
|
Lptim_Cmd(M0P_LPTIMER1, TRUE);
|
|||
|
}
|
|||
|
/*************************************************
|
|||
|
Function: u32 LPTimerGetTick(u8 timerNum)
|
|||
|
Description: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
Input<EFBFBD><EFBFBD>
|
|||
|
Return:
|
|||
|
Others:
|
|||
|
*************************************************/
|
|||
|
u16 LPTimer1GetTick()
|
|||
|
{
|
|||
|
u16 b;
|
|||
|
b = M0P_LPTIMER1->CNT;
|
|||
|
return b ;
|
|||
|
}
|
|||
|
|
|||
|
void LPTimer0_Work(u8 enCmd)
|
|||
|
{
|
|||
|
if (enCmd == TRUE)
|
|||
|
{
|
|||
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, TRUE);
|
|||
|
Lptim_Cmd(M0P_LPTIMER0, TRUE);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, FALSE); //<2F><>ʱ<EFBFBD><CAB1>
|
|||
|
Lptim_Cmd(M0P_LPTIMER0, FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
u8 GetLpTimerFlag(void)
|
|||
|
{
|
|||
|
return lpTimer_flag;
|
|||
|
}
|
|||
|
|
|||
|
void ClearLpTimerFlag(void)
|
|||
|
{
|
|||
|
lpTimer_flag = FALSE;
|
|||
|
}
|
|||
|
/*******************************************************************************
|
|||
|
* @fun_name LpTim0_IRQHandler
|
|||
|
* @brief
|
|||
|
* @param[in] None
|
|||
|
* @param[out] None
|
|||
|
* @retval None
|
|||
|
* @other None
|
|||
|
*******************************************************************************/
|
|||
|
void LpTim0_IRQHandler(void)
|
|||
|
{
|
|||
|
if(Lptim_GetItStatus(M0P_LPTIMER0))
|
|||
|
{
|
|||
|
Lptim_ClrItStatus(M0P_LPTIMER0);
|
|||
|
lpTimer_flag = TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* @fun_name LpTim0WakeSleep
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] None
|
|||
|
* @param[out] None
|
|||
|
* @retval None
|
|||
|
* @other None
|
|||
|
*******************************************************************************/
|
|||
|
void LpTim0WakeSleep(void)
|
|||
|
{
|
|||
|
;//<2F><><EFBFBD>Ѳ<EFBFBD><D1B2><EFBFBD><EFBFBD><EFBFBD>LpTime0<65><30>ʹ<EFBFBD><CAB9>ǰ<EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
* @fun_name LPTPreSleep
|
|||
|
* @brief LPT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] None
|
|||
|
* @param[out] None
|
|||
|
* @retval None
|
|||
|
* @other None
|
|||
|
*******************************************************************************/
|
|||
|
void LpTime0PreSleep(void)
|
|||
|
{
|
|||
|
Lptim_Cmd(M0P_LPTIMER0, FALSE);
|
|||
|
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim0, FALSE); //<2F><>ʱ<EFBFBD><CAB1>
|
|||
|
}
|
|||
|
/*******************************************************************************
|
|||
|
* @fun_name LpTim0IfSleep
|
|||
|
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] None
|
|||
|
* @param[out] None
|
|||
|
* @retval None
|
|||
|
* @other None
|
|||
|
*******************************************************************************/
|
|||
|
u8 LpTime0IfSleep(void)
|
|||
|
{
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|