/**
|
******************************************************************************
|
* @file xl_rtc.h
|
* @author software group
|
* @brief This file contains all the functions prototypes for the RTC
|
* firmware library.
|
******************************************************************************
|
* @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>
|
******************************************************************************
|
*/
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
#ifndef __XL_RTC_H_
|
#define __XL_RTC_H_
|
|
#ifdef __cplusplus
|
extern "C"{
|
#endif
|
|
/* Includes ---------------------------------------------------------------*/
|
#include "XL6600.h"
|
|
/* Register define ------------------------------------------------------------*/
|
|
/* SC Bit Fields */
|
#define RTC_SC_RTCEN_MASK 0x01u
|
#define RTC_SC_RTCEN_SHIFT 0
|
#define RTC_SC_RTCO_MASK 0x10u
|
#define RTC_SC_RTCO_SHIFT 4
|
#define RTC_SC_RTIE_MASK 0x40u
|
#define RTC_SC_RTIE_SHIFT 6
|
#define RTC_SC_RTIF_MASK 0x80u
|
#define RTC_SC_RTIF_SHIFT 7
|
#define RTC_SC_RTCPS_MASK 0x700u
|
#define RTC_SC_RTCPS_SHIFT 8
|
#define RTC_SC_RTCLKS_MASK 0xC000u
|
#define RTC_SC_RTCLKS_SHIFT 14
|
|
/* MOD Bit Fields */
|
#define RTC_MOD_MOD_MASK 0xFFFFu
|
#define RTC_MOD_MOD_SHIFT 0
|
|
/* CNT Bit Fields */
|
#define RTC_CNT_CNT_MASK 0xFFFFu
|
#define RTC_CNT_CNT_SHIFT 0
|
|
/* STAMP CFG Bit Fields */
|
#define RTC_STAMP_CFG_CNTEN_MASK 0x01u
|
#define RTC_STAMP_CFG_CNTEN_SHIFT 0
|
|
/* STAMP CNT Bit Fields */
|
#define RTC_STAMP_CNT_CNTH_MASK 0x00000000FFFFFFFFu
|
#define RTC_STAMP_CNT_CNTH_SHIFT 0
|
|
#define RTC_STAMP_CNT_CNTL_MASK 0xFFFFFFFF00000000u
|
#define RTC_STAMP_CNT_CNTL_SHIFT 31
|
|
/** RTC - Register Layout Typedef */
|
typedef struct {
|
__IO uint32_t SC; /*!< RTC״̬ºÍ¿ØÖƼĴæÆ÷, offset: 0x0 */
|
__IO uint32_t MOD; /*!< RTCÄ£Êý¼Ä´æÆ÷, offset: 0x4 */
|
__I uint32_t CNT; /*!< RTC¼ÆÊýÆ÷¼Ä´æÆ÷, offset: 0x8 */
|
uint32_t RESERVED0[0x39];
|
__IO uint32_t STAMP_CFG; /*!< STAMPÅäÖüĴæÆ÷, offset: 0xF0 */
|
uint32_t RESERVED1;
|
__IO uint64_t STAMP_CNT; /*!< STAMP¼ÆÊý¼Ä´æÆ÷, offset: 0xF8 */
|
} RTC_Type, *RTC_MemMapPtr;
|
extern RTC_Type* RTC;
|
|
/** @addtogroup XL6600_StdPeriph_Driver
|
* @{
|
*/
|
|
/** @addtogroup RTC
|
* @{
|
*/
|
|
|
/* Exported types ------------------------------------------------------------*/
|
|
/**
|
* @brief RTC ³õʼ»¯½á¹¹Ì嶨Òå
|
*/
|
typedef struct
|
{
|
uint8_t RTC_ClkSrc; /*!< ʵʱʱÖÓÔ´Ñ¡Ôñ */
|
uint8_t RTC_ClkPres; /*!< ʵʱʱÖÓÔ¤·ÖƵÆ÷Ñ¡Ôñ */
|
|
}RTC_InitTypeDef, *RTC_MsgConfigPtr;
|
|
|
/* Exported constants --------------------------------------------------------*/
|
/** @defgroup RTC_Exported_Constants RTCÄ£¿éʹÓòÎÊý¶¨Òå
|
* @{
|
*/
|
|
/** @defgroup RTC_Clocks_SourceSelect RTCʱÖÓÔ´Ñ¡Ôñ
|
* @{
|
*/
|
#define RTC_External_Clock ((uint8_t)0x0) /*!< OSCCLK×÷ΪʱÖÓÔ´ */
|
#define RTC_Realtime_Clock ((uint8_t)0x1) /*!< LPOCLK×÷ΪʱÖÓÔ´ */
|
#define RTC_Internal_Clock ((uint8_t)0x2) /*!< ICSIRCLK×÷ΪʱÖÓÔ´ */
|
#define RTC_Bus_Clock ((uint8_t)0x3) /*!< APBCLK×÷ΪʱÖÓÔ´ */
|
/**
|
* @}
|
*/
|
|
|
/**
|
* @defgroup RTC_Clock_Prescaler_Select RTCʱÖÓ·ÖÆµÑ¡Ôñ
|
* @{
|
*/
|
#define RTC_Clk_Prescaler_off ((uint8_t)0x0) /*!< ¹Ø±Õ */
|
#define RTC_Clk_Prescaler_1or128 ((uint8_t)0x1) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ1£»Èç¹ûRTCLKS=x1£¬ËüΪ128 */
|
#define RTC_Clk_Prescaler_2or256 ((uint8_t)0x2) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ2£»Èç¹ûRTCLKS=x1£¬ËüΪ256 */
|
#define RTC_Clk_Prescaler_4or512 ((uint8_t)0x3) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ4£»Èç¹ûRTCLKS=x1£¬ËüΪ512 */
|
#define RTC_Clk_Prescaler_8or1024 ((uint8_t)0x4) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ8£»Èç¹ûRTCLKS=x1£¬ËüΪ1024 */
|
#define RTC_Clk_Prescaler_16or2048 ((uint8_t)0x5) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ16£»Èç¹ûRTCLKS=x1£¬ËüΪ2048 */
|
#define RTC_Clk_Prescaler_32or100 ((uint8_t)0x6) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ32£»Èç¹ûRTCLKS=x1£¬ËüΪ100 */
|
#define RTC_Clk_Prescaler_64or1000 ((uint8_t)0x7) /*!< Èç¹ûRTCLKS=x0£¬ËüΪ64£»Èç¹ûRTCLKS=x1£¬ËüΪ1000 */
|
/**
|
* @}
|
*/
|
|
|
/**
|
* @}
|
*/
|
|
|
/* Exported macro ------------------------------------------------------------*/
|
/* Exported functions --------------------------------------------------------*/
|
void RTC_DeInit(RTC_Type *RTCx);
|
void RTC_Init(RTC_Type *RTCx, const RTC_InitTypeDef *RTC_InitStruct);
|
void RTC_InterruptEn(RTC_Type *RTCx,FunctionalState NewState);
|
void RTC_CountOutputEn(RTC_Type *RTCx,FunctionalState NewState);
|
ITStatus RTC_GetInterruptFlag(const RTC_Type *RTCx);
|
void RTC_ClrInterruptFlag(RTC_Type *RTCx);
|
void RTC_SetModValue(RTC_Type *RTCx,uint16_t RTC_ModValue);
|
uint16_t RTC_GetCountValue(const RTC_Type *RTCx);
|
void RTC_EnableCmd(RTC_Type *RTCx, FunctionalState NewState);
|
void RTC_TimeStampEnableCmd(RTC_Type *RTCx, FunctionalState NewState);
|
uint64_t RTC_GetStampCountValue(const RTC_Type *RTCx);
|
#ifdef __cplusplus
|
}
|
#endif
|
#endif /*__XL_RTC_H__ */
|
|
/**
|
* @}
|
*/
|
|
/**
|
* @}
|
*/
|