/**
|
******************************************************************************
|
* @file xl_rtc.c
|
* @author Kirk ,xu.wang
|
* @version 4.5.2
|
* @date Fri Mar 26 17:29:12 2021
|
* @brief This file provide function about RTC firmware program
|
******************************************************************************
|
* @attention
|
*
|
* 2019 by Chipways Communications,Inc. All Rights Reserved.
|
* This software is supplied under the terms of a license
|
* agreement or non-disclosure agreement with Chipways.
|
* Passing on and copying of this document,and communication
|
* of its contents is not permitted without prior written
|
* authorization.
|
*
|
* <h2><center>© COPYRIGHT 2019 Chipways</center></h2>
|
******************************************************************************
|
*/
|
|
#if defined(__cplusplus)
|
extern "C" {
|
#endif /* __cplusplus */
|
|
/* Includes ---------------------------------------------------------------*/
|
#include "xl_rtc.h"
|
|
/** @addtogroup XL6600_StdPeriph_Driver
|
* @{
|
*/
|
|
/** @defgroup RTC RTC Module
|
* @brief RTC Driver Modules Library
|
* @{
|
*/
|
|
/* Private typedef -----------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
/* Private macro -------------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
/* Private functions ---------------------------------------------------------*/
|
|
/** @defgroup RTC_Private_Functions
|
* @{
|
*/
|
|
/**
|
* @brief RTCĬÈϳõʼ»¯
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè
|
* @retval None
|
*/
|
void RTC_DeInit(RTC_Type *RTCx)
|
{
|
/* Deinitializes to default reset values */
|
RTCx->SC = 0x0000;
|
}
|
|
/**
|
* @brief ³õʼ»¯RTC
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @param RTC_InitStruct:RTC_InitTypeDefÀàÐ͵ÄÖ¸Õ룬°üº¬ÁËRTCÍâÉèµÄÉèÖÃÐÅÏ¢
|
* @retval None
|
*/
|
void RTC_Init(RTC_Type *RTCx, const RTC_InitTypeDef *RTC_InitStruct)
|
{
|
uint32_t tmpreg;
|
|
/*---------------------------- RTC SC Configuration ------------------------*/
|
/* Get the RTC SC value. */
|
tmpreg = RTCx->SC ;
|
|
/* Clear bits Value in SC register.*/
|
tmpreg &= ~(RTC_SC_RTCLKS_MASK | RTC_SC_RTCPS_MASK);
|
|
/* Set the bit RTCLKS,RTCPS in CR Register. */
|
|
tmpreg |= (uint32_t)((((uint32_t)(((uint32_t)(RTC_InitStruct->RTC_ClkSrc))<<RTC_SC_RTCLKS_SHIFT))&RTC_SC_RTCLKS_MASK) \
|
|(((uint32_t)(((uint32_t)(RTC_InitStruct->RTC_ClkPres))<<RTC_SC_RTCPS_SHIFT))&RTC_SC_RTCPS_MASK));
|
|
/* Write to RTC SC Register. */
|
RTCx->SC = tmpreg ;
|
}
|
|
/**
|
* @brief RTCʹÄÜ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @param NewState: RTCʹÄÜ״̬
|
* Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ:
|
* @arg ENABLE: RTCʹÄÜ
|
* @arg DISABLE: RTCʧÄÜ
|
* @retval None
|
*/
|
void RTC_EnableCmd(RTC_Type *RTCx, FunctionalState NewState)
|
{
|
if(NewState == ENABLE)
|
{
|
RTCx->SC |= RTC_SC_RTCEN_MASK;
|
}
|
else
|
{
|
RTCx->SC &= (~RTC_SC_RTCEN_MASK);
|
}
|
}
|
|
/**
|
* @brief RTCÖжÏʹÄÜ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @param NewState: RTCÖжÏʹÄÜ״̬
|
* Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ:
|
* @arg ENABLE: RTCÖжÏʹÄÜ
|
* @arg DISABLE: RTCÖжÏʧÄÜ
|
* @retval None
|
*/
|
void RTC_InterruptEn(RTC_Type *RTCx,FunctionalState NewState)
|
{
|
if(NewState != DISABLE )
|
{
|
/* Real-time interrupt requests are enabled. */
|
RTCx->SC |= RTC_SC_RTIE_MASK;
|
}
|
else
|
{
|
/* Real-time interrupt requests are disabled. */
|
RTCx->SC &= ~RTC_SC_RTIE_MASK;
|
}
|
}
|
|
/**
|
* @brief RTCʵʱÊä³öʹÄÜ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè
|
* @param NewState: RTCʵʱÊä³öʹÄÜ״̬
|
* Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ:
|
* @arg ENABLE: ʹÄÜRTCʵʱÊä³ö
|
* @arg DISABLE: ʧÄÜRTCʵʱÊä³ö
|
* @retval None
|
*/
|
void RTC_CountOutputEn(RTC_Type *RTCx,FunctionalState NewState)
|
{
|
if(NewState != DISABLE )
|
{
|
/* Real-time counter output enabled. */
|
RTCx->SC |= RTC_SC_RTCO_MASK;
|
}
|
else
|
{
|
/* Real-time counter output disabled. */
|
RTCx->SC &= ~RTC_SC_RTCO_MASK;
|
}
|
}
|
|
/**
|
* @brief »ñÈ¡RTCʵʱÖжϱê־λ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @retval ʵʱÖжϱê־λ
|
*/
|
ITStatus RTC_GetInterruptFlag(const RTC_Type *RTCx)
|
{
|
return ((RTCx->SC & RTC_SC_RTIF_MASK) == RTC_SC_RTIF_MASK);
|
}
|
|
/**
|
* @brief Çå¿ÕRTCʵʱÖжϱê־λ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @retval None
|
*/
|
void RTC_ClrInterruptFlag(RTC_Type *RTCx)
|
{
|
/* Writing a logic 1 clears the bit and the real-time interrupt request */
|
RTCx->SC |= RTC_SC_RTIF_MASK;
|
}
|
|
/**
|
* @brief ÉèÖÃRTCÄ£Êý¼Ä´æÆ÷
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè
|
* @param RTC_ModValue: RTCµÄÄ£ÊýÖµ
|
* @retval None
|
*/
|
void RTC_SetModValue(RTC_Type *RTCx,uint16_t RTC_ModValue)
|
{
|
/* modulo Value of RTC. */
|
RTCx->MOD = RTC_ModValue;
|
}
|
|
/**
|
* @brief »ñµÃRTC¼ÆÊýÆ÷µÄµ±Ç°Öµ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @retval None
|
*/
|
uint16_t RTC_GetCountValue(const RTC_Type *RTCx)
|
{
|
uint16_t countvalue;
|
|
/* the value of the current RTC count. */
|
countvalue= (uint16_t)RTCx->CNT ;
|
|
return countvalue;
|
}
|
|
|
/**
|
* @brief RTCʱ¼ä´Á¼ÆÊýÆ÷ʹÄÜ
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè
|
* @param NewState: RTCʱ¼ä´ÁʹÄÜ״̬
|
* Õâ¸ö²ÎÊý¿ÉÒÔÈ¡ÏÂÃæµÄÖµ:
|
* @arg ENABLE: ʹÄÜRTCʱ¼ä´Á¼ÆÊý
|
* @arg DISABLE: ʧÄÜRTCʱ¼ä´Á¼ÆÊý
|
* @retval None
|
*/
|
void RTC_TimeStampEnableCmd(RTC_Type *RTCx, FunctionalState NewState)
|
{
|
if(NewState == ENABLE)
|
{
|
RTCx->STAMP_CFG |= RTC_STAMP_CFG_CNTEN_MASK;
|
}
|
else
|
{
|
RTCx->STAMP_CFG &= ~RTC_STAMP_CFG_CNTEN_MASK;
|
}
|
}
|
|
/**
|
* @brief »ñÈ¡RTCʱ¼ä´Á¼ÆÊý
|
* @param RTCx: ÊäÈë¿ÉÓõÄRTCÍâÉè¡£
|
* @retval None
|
*/
|
uint64_t RTC_GetStampCountValue(const RTC_Type *RTCx)
|
{
|
uint64_t countvalue;
|
|
/* the value of the current RTC count. */
|
countvalue= (uint64_t)RTCx->STAMP_CNT ;
|
|
return countvalue;
|
}
|
|
/**
|
* @}
|
*/
|
|
/**
|
* @}
|
*/
|
|
/**
|
* @}
|
*/
|
|
#ifdef __cplusplus
|
}
|
#endif /* __cplusplus */
|