R1UWaterRS485/hardinterface/src/UWater_lptimer_driver.c

204 lines
6.0 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
/*******************************************************************************
* @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