CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_rtc.h

1037 lines
33 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_rtc.h
* @author MCU Ecosystem Development Team
* @brief RTC STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>RTC<EFBFBD><EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/* <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD> */
#ifndef CIU32L051_STD_RTC_H
#define CIU32L051_STD_RTC_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup RTC RTC
* @brief ʵʱʱ<EFBFBD>ӵ<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup RTC_Types RTC Types
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
/**
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
uint8_t hours; /**< RTC <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>BCD<43><44>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>24Сʱ<D0A1>ƣ<EFBFBD>ȡֵ0~23 */
uint8_t minutes; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<43><44>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȡֵ0~59 */
uint8_t seconds; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD>루BCD<43><44>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȡֵ0~59 */
} std_rtc_time_t;
/**
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
uint8_t weekday; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@arg RTC_WEEKDAY_MONDAY ... */
uint8_t month; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD>·ݣ<C2B7>BCD<43><44>ʽ<EFBFBD><CABD>
@arg RTC_MONTH_JANUARY ... */
uint8_t day; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<43><44>ʽ<EFBFBD><CABD> */
uint8_t year; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>BCD<43><44>ʽ<EFBFBD><CABD> */
} std_rtc_date_t;
/**
* @brief RTC<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
typedef struct
{
std_rtc_time_t time; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1> */
uint32_t time_mask; /**< RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@arg RTC_ALARM_MASK_NONE ...*/
} std_rtc_alarm_t;
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup RTC_Constants RTC Constants
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/* RTC<54><43>ʱ<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> */
#define RTC_INITMODE_TIMEOUT (1000U)
/* RTCģʽ */
#define RTC_MODE_RUNNING (0x00000000U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
#define RTC_MODE_INIT RTC_CSR_MODSTA /**< <20><>ʼ<EFBFBD><CABC>ģʽ */
/* RTC_OUT<55><54><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
#define RTC_OUTPUT_APRE_256HZ RTC_CR_OUT_SEL_APRE /**< <20><><EFBFBD><EFBFBD><EFBFBD>첽Ԥ<ECB2BD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>256Hz */
#define RTC_OUTPUT_SPRE_1HZ RTC_CR_OUT_SEL_SPRE /**< <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1Hz */
#define RTC_OUTPUT_ALARM RTC_CR_OUT_SEL_ALARMF /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5>״̬ */
#define RTC_OUTPUT_MINUTE RTC_CR_OUT_SEL_MIN /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>λ<EFBFBD>ź<EFBFBD> */
#define RTC_OUTPUT_HOUR RTC_CR_OUT_SEL_HOUR /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>λ<EFBFBD>ź<EFBFBD> */
#define RTC_OUTPUT_DAY RTC_CR_OUT_SEL_DAY /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ź<EFBFBD> */
#define RTC_OUTPUT_CALIB_CYCLE RTC_CR_OUT_SEL_CAL /**< <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
/* RTC_OUT<55>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_OUT_POLARITY_NORMAL (0x00000000U) /**< <20>б<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ */
#define RTC_OUT_POLARITY_REVERSE RTC_CR_POL /**< <20>б<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ */
/* RTC_OUT<55>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD> */
#define RTC_OUT_DISABLE (0x00000000U) /**< RTC_OUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ */
#define RTC_OUT_ENABLE RTC_CR_OUTEN /**< RTC_OUT<55><54><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> */
/* RTC<54><43><EFBFBD><EFBFBD><EFBFBD>·ݣ<C2B7>BCD<43><44>ʽ<EFBFBD><CABD> */
#define RTC_MONTH_JANUARY ((uint8_t)0x01U) /**< 1<><31> */
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02U) /**< 2<><32> */
#define RTC_MONTH_MARCH ((uint8_t)0x03U) /**< 3<><33> */
#define RTC_MONTH_APRIL ((uint8_t)0x04U) /**< 4<><34> */
#define RTC_MONTH_MAY ((uint8_t)0x05U) /**< 5<><35> */
#define RTC_MONTH_JUNE ((uint8_t)0x06U) /**< 6<><36> */
#define RTC_MONTH_JULY ((uint8_t)0x07U) /**< 7<><37> */
#define RTC_MONTH_AUGUST ((uint8_t)0x08U) /**< 8<><38> */
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09U) /**< 9<><39> */
#define RTC_MONTH_OCTOBER ((uint8_t)0x10U) /**< 10<31><30> */
#define RTC_MONTH_NOVEMBER ((uint8_t)0x11U) /**< 11<31><31> */
#define RTC_MONTH_DECEMBER ((uint8_t)0x12U) /**< 12<31><32> */
/* RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01U) /**< <20><><EFBFBD><EFBFBD>һ */
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02U) /**< <20><><EFBFBD>ڶ<EFBFBD> */
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x07U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* <20><><EFBFBD><EFBFBD><><CAB1>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> */
#define RTC_OFFSET_YEAR ((uint32_t)16U)
#define RTC_OFFSET_MONTH ((uint32_t)8U)
#define RTC_OFFSET_HOUR ((uint32_t)16U)
#define RTC_OFFSET_MINUTE ((uint32_t)8U)
/* <20><><EFBFBD><EFBFBD><><CAB1> */
#define RTC_DAY_MASK (RTC_DR_DT | RTC_DR_DU) /**< <20><><EFBFBD><EFBFBD> */
#define RTC_MONTH_MASK (RTC_DR_MT | RTC_DR_MU) /**< <20>·<EFBFBD> */
#define RTC_YEAR_MASK (RTC_DR_YT | RTC_DR_YU) /**< <20><><EFBFBD><EFBFBD> */
#define RTC_HOUR_MASK (RTC_TR_HT | RTC_TR_HU) /**< Сʱ */
#define RTC_MINUTE_MASK (RTC_TR_MNT | RTC_TR_MNU) /**< <20><><EFBFBD><EFBFBD> */
#define RTC_SECOND_MASK (RTC_TR_ST | RTC_TR_SU) /**< <20><><EFBFBD><EFBFBD> */
/* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
#define RTC_ALARM_HOUR_MASK (RTC_ALARMR_HT | RTC_ALARMR_HU) /**< <20><><EFBFBD><EFBFBD>Сʱ */
#define RTC_ALARM_MINUTE_MASK (RTC_ALARMR_MNT | RTC_ALARMR_MNU) /**< <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> */
#define RTC_ALARM_SECOND_MASK (RTC_ALARMR_ST | RTC_ALARMR_SU) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* RTC<54><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_ALARM_MASK_NONE (0x00000000U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_HOURS RTC_ALARMR_MSK3 /**< <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_MINUTES RTC_ALARMR_MSK2 /**< <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_SECONDS RTC_ALARMR_MSK1 /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_ALL RTC_ALARMR_MSKALL /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_HOURMIN (RTC_ALARM_MASK_HOURS \
| RTC_ALARM_MASK_MINUTES) /**< <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_HOURSEC (RTC_ALARM_MASK_HOURS \
| RTC_ALARM_MASK_SECONDS) /**< <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
#define RTC_ALARM_MASK_MINSEC (RTC_ALARM_MASK_MINUTES \
| RTC_ALARM_MASK_SECONDS) /**< <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD> */
/* RTC<54><43><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_DAY RTC_WUT_DAYIE /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_HOUR RTC_WUT_HOURIE /**< Сʱ<D0A1><CAB1>λ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_MIN RTC_WUT_MINIE /**< <20><><EFBFBD>ӽ<EFBFBD>λ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_SEC RTC_WUT_SECIE /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_2HZ RTC_WUT_2HZIE /**< 2Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_4HZ RTC_WUT_4HZIE /**< 4Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_8HZ RTC_WUT_8HZIE /**< 8Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_16HZ RTC_WUT_16HZIE /**< 16Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_64HZ RTC_WUT_64HZIE /**< 64Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_256HZ RTC_WUT_256HZIE /**< 256Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
#define RTC_WUT_INTERRUPT_1024HZ RTC_WUT_1024HZIE /**< 1024Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9> */
/* RTC<54>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_ALARM RTC_ISR_ALARMIF /**< <20><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_CALIBRATION RTC_ISR_CALIIF /**< У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_DAY RTC_ISR_DAYIF /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_HOUR RTC_ISR_HOURIF /**< Сʱ<D0A1><CAB1>λ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_MIN RTC_ISR_MINIF /**< <20><><EFBFBD>ӽ<EFBFBD>λ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_SEC RTC_ISR_SECIF /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_2HZ RTC_ISR_2HZIF /**< 2Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_4HZ RTC_ISR_4HZIF /**< 4Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_8HZ RTC_ISR_8HZIF /**< 8Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_16HZ RTC_ISR_16HZIF /**< 16Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_64HZ RTC_ISR_64HZIF /**< 64Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_256HZ RTC_ISR_256HZIF /**< 256Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
#define RTC_INTERRUPT_FLAG_1024HZ RTC_ISR_1024HZIF /**< 1024Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־ */
/* RTC<54><43>־ */
#define RTC_FLAG_ALARM RTC_SR_ALARMF /**< <20><><EFBFBD>ӱ<EFBFBD>־ */
#define RTC_FLAG_CALIBRATION RTC_SR_CALF /**< У׼<D0A3><D7BC><EFBFBD>ڱ<EFBFBD>־ */
#define RTC_FLAG_TIMESTAMP RTC_SR_TSF /**< ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
#define RTC_FLAG_DAY RTC_SR_DAYF /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_FLAG_HOUR RTC_SR_HOURF /**< Сʱ<D0A1><CAB1>λ<EFBFBD><CEBB>־ */
#define RTC_FLAG_MIN RTC_SR_MINF /**< <20><><EFBFBD>ӽ<EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_FLAG_SEC RTC_SR_SECF /**< <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_FLAG_2HZ RTC_SR_2HZF /**< 2Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_4HZ RTC_SR_4HZF /**< 4Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_8HZ RTC_SR_8HZF /**< 8Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_16HZ RTC_SR_16HZF /**< 16Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_64HZ RTC_SR_64HZF /**< 64Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_256HZ RTC_SR_256HZF /**< 256Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
#define RTC_FLAG_1024HZ RTC_SR_1024HZF /**< 1024Hz<48><7A><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD><CAB1>־ */
/* RTC<54><43>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ */
#define RTC_CLEAR_ALARM RTC_CLR_CALARMF /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD>־ */
#define RTC_CLEAR_CALIBRATION RTC_CLR_CCALF /**< <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD>ڱ<EFBFBD>־ */
#define RTC_CLEAR_TIMESTAMP RTC_CLR_CTSF /**< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
#define RTC_CLEAR_DAY RTC_CLR_CDAYF /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_HOUR RTC_CLR_CHOURF /**< <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_MIN RTC_CLR_CMINF /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_SEC RTC_CLR_CSECF /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_2HZ RTC_CLR_C2HZF /**< <20><><EFBFBD><EFBFBD>2Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_4HZ RTC_CLR_C4HZF /**< <20><><EFBFBD><EFBFBD>4Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_8HZ RTC_CLR_C8HZF /**< <20><><EFBFBD><EFBFBD>8Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_16HZ RTC_CLR_C16HZF /**< <20><><EFBFBD><EFBFBD>16Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_64HZ RTC_CLR_C64HZF /**< <20><><EFBFBD><EFBFBD>64Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_256HZ RTC_CLR_C256HZF /**< <20><><EFBFBD><EFBFBD>256Hz<48><7A>λ<EFBFBD><CEBB>־ */
#define RTC_CLEAR_1024HZ RTC_CLR_C1024HZF /**< <20><><EFBFBD><EFBFBD>1024Hz<48><7A>λ<EFBFBD><CEBB>־ */
/* RTCƽ<43><C6BD>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_SMOOTH_CALIB_PLUS_PULSES_RESET (0x00000000U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define RTC_SMOOTH_CALIB_PLUS_PULSES_SET RTC_CALR_CALP /**< ÿ<><C3BF>2^11<31><31>RTCLK<4C><4B><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup RTC_External_Functions RTC External Functions
* @brief RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/**
*@brief BINתBCD
*@param value BIN<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*@retval uint8_t BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint8_t std_rtc_convert_bin2bcd(uint8_t value)
{
return (uint8_t)((((value) / 10U) << 4U) | ((value) % 10U));
}
/**
*@brief BCDתBIN
*@param value BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*@retval uint8_t BIN<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint8_t std_rtc_convert_bcd2bin(uint8_t value)
{
return (uint8_t)(((((value) & 0xF0U) >> 0x4U) * 10U ) + ((value) & 0x0FU));
}
/**
* @brief ʹ<EFBFBD><EFBFBD>RTC<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_write_protection_enable(void)
{
RTC->WPR = 0x00U;
}
/**
* @brief <EFBFBD><EFBFBD>ֹRTC<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_write_protection_disable(void)
{
RTC->WPR = 0xCAU;
RTC->WPR = 0x53U;
}
/**
* @brief ʹ<EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_init_mode_enable(void)
{
RTC->CSR |= RTC_CSR_MODSEL;
}
/**
* @brief <EFBFBD><EFBFBD>ֹRTC<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_init_mode_disable(void)
{
RTC->CSR &= (~RTC_CSR_MODSEL);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTCģʽ״̬
* @retval uint32_t RTCģʽ״̬
* @arg RTC_MODE_RUNNING
* @arg RTC_MODE_INIT
*/
__STATIC_INLINE uint32_t std_rtc_get_mode(void)
{
return (RTC->CSR & RTC_CSR_MODSTA);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param weekday <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_WEEKDAY_MONDAY
* @arg RTC_WEEKDAY_TUESDAY
* @arg ...
* @arg RTC_WEEKDAY_SUNDAY
* @param day <EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>С0x01<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x31<EFBFBD><EFBFBD>
* @param month <EFBFBD>·<EFBFBD>
* @arg RTC_MONTH_JANUARY
* @arg RTC_MONTH_FEBRUARY
* @arg ...
* @arg RTC_MONTH_DECEMBER
* @param year <EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x99<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_date_config(uint32_t weekday, uint32_t day, uint32_t month, uint32_t year)
{
uint32_t temp;
temp = (weekday << RTC_DR_WDU_POS) \
| (((year & 0xF0U) << (RTC_DR_YT_POS - 4U)) | ((year & 0x0FU) << RTC_DR_YU_POS)) \
| (((month & 0xF0U) << (RTC_DR_MT_POS - 4U)) | ((month & 0x0FU) << RTC_DR_MU_POS)) \
| (((day & 0xF0U) << (RTC_DR_DT_POS - 4U)) | ((day & 0x0FU) << RTC_DR_DU_POS));
RTC->DR = temp;
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<EFBFBD><EFBFBD>+<EFBFBD><EFBFBD>+<EFBFBD>գ<EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_date_get_date(void)
{
uint32_t temp;
temp = RTC->DR;
return (uint32_t)((temp & (~RTC_DR_WDU)) | ((temp & RTC_DR_WDU) << 11));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param day <EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>С0x01<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x31<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_date_set_day(uint32_t day)
{
MODIFY_REG(RTC->DR, RTC_DAY_MASK,
(((day & 0xF0U) << (RTC_DR_DT_POS - 4U)) | ((day & 0x0FU) << RTC_DR_DU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x01<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x31<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_date_get_day(void)
{
return ((RTC->DR & RTC_DAY_MASK) >> RTC_DR_DU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ݣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param month <EFBFBD>·<EFBFBD>
* @arg RTC_MONTH_JANUARY
* @arg RTC_MONTH_FEBRUARY
* @arg ...
* @arg RTC_MONTH_DECEMBER
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_date_set_month(uint32_t month)
{
MODIFY_REG(RTC->DR, RTC_MONTH_MASK,
(((month & 0xF0U) << (RTC_DR_MT_POS - 4U)) | ((month & 0x0FU) << RTC_DR_MU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ݣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD>·<EFBFBD>
* @arg RTC_MONTH_JANUARY
* @arg RTC_MONTH_FEBRUARY
* @arg ...
* @arg RTC_MONTH_DECEMBER
*/
__STATIC_INLINE uint32_t std_rtc_date_get_month(void)
{
return ((RTC->DR & RTC_MONTH_MASK) >> RTC_DR_MU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param weekday <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_WEEKDAY_MONDAY
* @arg RTC_WEEKDAY_TUESDAY
* @arg ...
* @arg RTC_WEEKDAY_SUNDAY
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_date_set_weekday(uint32_t weekday)
{
MODIFY_REG(RTC->DR, RTC_DR_WDU, (weekday << RTC_DR_WDU_POS));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_WEEKDAY_MONDAY
* @arg RTC_WEEKDAY_TUESDAY
* @arg ...
* @arg RTC_WEEKDAY_SUNDAY
*/
__STATIC_INLINE uint32_t std_rtc_date_get_weekday(void)
{
return ((RTC->DR & RTC_DR_WDU) >> RTC_DR_WDU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param year <EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x99<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_date_set_year(uint32_t year)
{
MODIFY_REG(RTC->DR, RTC_YEAR_MASK,
(((year & 0xF0U) << (RTC_DR_YT_POS - 4U)) | ((year & 0x0FU) << RTC_DR_YU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x99<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_date_get_year(void)
{
return ((RTC->DR & RTC_YEAR_MASK) >> RTC_DR_YU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param hours Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
* @param minutes <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @param seconds <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_time_config(uint32_t hours, uint32_t minutes, uint32_t seconds)
{
uint32_t temp;
temp = (((hours & 0xF0U) << (RTC_TR_HT_POS - 4U)) | ((hours & 0x0FU) << RTC_TR_HU_POS)) \
| (((minutes & 0xF0U) << (RTC_TR_MNT_POS - 4U)) | ((minutes & 0x0FU) << RTC_TR_MNU_POS)) \
| (((seconds & 0xF0U) << (RTC_TR_ST_POS - 4U)) | ((seconds & 0x0FU) << RTC_TR_SU_POS));
RTC->TR = temp;
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t ʱ<EFBFBD>ʱ<EFBFBD><EFBFBD>+<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_time_get_time(void)
{
return (RTC->TR);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param hours Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_time_set_hour(uint32_t hours)
{
MODIFY_REG(RTC->TR, RTC_HOUR_MASK,
(((hours & 0xF0U) << (RTC_TR_HT_POS - 4U)) | ((hours & 0x0FU) << RTC_TR_HU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param minutes <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_time_set_minute(uint32_t minutes)
{
MODIFY_REG(RTC->TR, RTC_MINUTE_MASK,
(((minutes & 0xF0U) << (RTC_TR_MNT_POS - 4U)) | ((minutes & 0x0FU) << RTC_TR_MNU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param seconds <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_time_set_second(uint32_t seconds)
{
MODIFY_REG(RTC->TR, RTC_SECOND_MASK,
(((seconds & 0xF0U) << (RTC_TR_ST_POS - 4U)) | ((seconds & 0x0FU) << RTC_TR_SU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param subseconds <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0xff<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ1/256 s<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_time_set_subsecond(uint32_t subseconds)
{
RTC->SSR = subseconds;
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_time_get_subsecond(void)
{
return (RTC->SSR);
}
/**
* @brief ѡ<EFBFBD><EFBFBD>RTCʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* @param rtc_out У׼ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* @arg RTC_OUTPUT_APRE_256HZ
* @arg RTC_OUTPUT_SPRE_1HZ
* @arg ...
* @arg RTC_OUTPUT_CALIB_CYCLE
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_out_config(uint32_t rtc_out)
{
MODIFY_REG(RTC->CR, RTC_CR_OUT_SEL, rtc_out);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTCʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* @retval uint32_t У׼ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* @arg RTC_OUTPUT_APRE_256HZ
* @arg RTC_OUTPUT_SPRE_1HZ
* @arg ...
* @arg RTC_OUTPUT_CALIB_CYCLE
*/
__STATIC_INLINE uint32_t std_rtc_get_rtc_out(void)
{
return (RTC->CR & RTC_CR_OUT_SEL);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC OUT<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param polarity <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_OUT_POLARITY_NORMAL
* @arg RTC_OUT_POLARITY_REVERSE
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_set_output_polarity(uint32_t polarity)
{
MODIFY_REG(RTC->CR, RTC_CR_POL, polarity);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTC OUT<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_OUT_POLARITY_NORMAL
* @arg RTC_OUT_POLARITY_REVERSE
*/
__STATIC_INLINE uint32_t std_rtc_get_output_polarity(void)
{
return (RTC->CR & RTC_CR_POL);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>RTC OUT<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_output_enable(void)
{
RTC->CR |= RTC_CR_OUTEN;
}
/**
* @brief <EFBFBD>ر<EFBFBD>RTC OUT<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_output_disable(void)
{
RTC->CR &= (~RTC_CR_OUTEN);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>RTC<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>
* @param wut_interrupt_sel
* @arg RTC_WUT_INTERRUPT_DAY
* @arg RTC_WUT_INTERRUPT_HOUR
* @arg ...
* @arg RTC_WUT_INTERRUPT_1024HZ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_wut_interrupt_enable(uint32_t wut_interrupt_sel)
{
RTC->WUT |= wut_interrupt_sel;
}
/**
* @brief <EFBFBD><EFBFBD>ֹRTC<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>
* @param wut_interrupt_sel
* @arg RTC_WUT_INTERRUPT_DAY
* @arg RTC_WUT_INTERRUPT_HOUR
* @arg ...
* @arg RTC_WUT_INTERRUPT_1024HZ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_wut_interrupt_disable(uint32_t wut_interrupt_sel)
{
RTC->WUT &= (~wut_interrupt_sel);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTC<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
* @param wut_interrupt_sel
* @arg RTC_WUT_INTERRUPT_DAY
* @arg RTC_WUT_INTERRUPT_HOUR
* @arg ...
* @arg RTC_WUT_INTERRUPT_1024HZ
* @retval bool <EFBFBD><EFBFBD>־״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʱ<EFBFBD>жϹر<EFBFBD>
*/
__STATIC_INLINE bool std_rtc_get_wut_interrupt_enable(uint32_t wut_interrupt_sel)
{
return ((RTC->WUT & wut_interrupt_sel) == wut_interrupt_sel);
}
/**
* @brief ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_enable(void)
{
RTC->CR |= RTC_CR_ALARME;
}
/**
* @brief <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_disable(void)
{
RTC->CR &= (~RTC_CR_ALARME);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param hours Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
* @param minutes <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @param seconds <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_config(uint32_t hours, uint32_t minutes, uint32_t seconds)
{
register uint32_t temp;
temp = (((hours & 0xF0U) << (RTC_ALARMR_HT_POS - 4U)) | ((hours & 0x0FU) << RTC_ALARMR_HU_POS))
| (((minutes & 0xF0U) << (RTC_ALARMR_MNT_POS - 4U)) | ((minutes & 0x0FU) << RTC_ALARMR_MNU_POS))
| (((seconds & 0xF0U) << (RTC_ALARMR_ST_POS - 4U)) | ((seconds & 0x0FU) << RTC_ALARMR_SU_POS));
MODIFY_REG(RTC->ALARMR, (RTC_ALARM_HOUR_MASK | RTC_ALARM_MINUTE_MASK | RTC_ALARM_SECOND_MASK), temp);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t ʱ<EFBFBD>ʱ+<EFBFBD><EFBFBD>+<EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_alarm_get_time(void)
{
return (uint32_t)(RTC->ALARMR & (RTC_ALARM_HOUR_MASK | RTC_ALARM_MINUTE_MASK | RTC_ALARM_SECOND_MASK));
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param hours Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_set_hour(uint32_t hours)
{
MODIFY_REG(RTC->ALARMR, RTC_ALARM_HOUR_MASK,
(((hours & 0xF0U) << (RTC_ALARMR_HT_POS - 4U)) | ((hours & 0x0FU) << RTC_ALARMR_HU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_alarm_get_hour(void)
{
return ((RTC->ALARMR & RTC_ALARM_HOUR_MASK) >> RTC_ALARMR_HU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param minutes <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_set_minute(uint32_t minutes)
{
MODIFY_REG(RTC->ALARMR, RTC_ALARM_MINUTE_MASK,
(((minutes & 0xF0U) << (RTC_ALARMR_MNT_POS - 4U)) | ((minutes & 0x0FU) << RTC_ALARMR_MNU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_alarm_get_minute(void)
{
return ((RTC->ALARMR & RTC_ALARM_MINUTE_MASK) >> RTC_ALARMR_MNU_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @param seconds <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_set_second(uint32_t seconds)
{
MODIFY_REG(RTC->ALARMR, RTC_ALARM_SECOND_MASK,
(((seconds & 0xF0U) << (RTC_ALARMR_ST_POS - 4U)) | ((seconds & 0x0FU) << RTC_ALARMR_SU_POS)));
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_alarm_get_second(void)
{
return ((RTC->ALARMR & RTC_ALARM_SECOND_MASK) >> RTC_ALARMR_SU_POS);
}
/**
* @brief ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_interrupt_enable(void)
{
RTC->CR |= RTC_CR_ALARMIE;
}
/**
* @brief <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_interrupt_disable(void)
{
RTC->CR &= (~RTC_CR_ALARMIE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
* @retval bool <EFBFBD><EFBFBD>־״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϹر<EFBFBD>
*/
__STATIC_INLINE bool std_rtc_get_alarm_interrupt_enable()
{
return ((RTC->CR & RTC_CR_ALARMIE) == RTC_CR_ALARMIE);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param alarm_mask ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_ALARM_MASK_NONE
* @arg RTC_ALARM_MASK_HOURS
* @arg ...
* @arg RTC_ALARM_MASK_MINSEC
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_alarm_set_mask(uint32_t alarm_mask)
{
MODIFY_REG(RTC->ALARMR, RTC_ALARMR_MSKALL, alarm_mask);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
* @arg RTC_ALARM_MASK_NONE
* @arg RTC_ALARM_MASK_HOURS
* @arg ...
* @arg RTC_ALARM_MASK_MINSEC
*/
__STATIC_INLINE uint32_t std_rtc_alarm_get_mask(void)
{
return (RTC->ALARMR & RTC_ALARM_MASK_ALL);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼״̬
* @retval bool ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼״̬
* @arg true <EFBFBD><EFBFBD>ʾУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD>Ч
* @arg false <EFBFBD><EFBFBD>ʾУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
__STATIC_INLINE bool std_rtc_cal_get_status(void)
{
return ((RTC->CSR & RTC_CSR_CALSTA) == RTC_CSR_CALSTA);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param calib_plus <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_SMOOTH_CALIB_PLUS_PULSES_RESET
* @arg RTC_SMOOTH_CALIB_PLUS_PULSES_SET
* @param calib_minus <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_cal_config(uint32_t calib_plus, uint32_t calib_minus)
{
RTC->CALR = (uint32_t)(calib_plus | calib_minus);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg RTC_SMOOTH_CALIB_PLUS_PULSES_RESET
* @arg RTC_SMOOTH_CALIB_PLUS_PULSES_SET
*/
__STATIC_INLINE uint32_t std_rtc_cal_get_plus(void)
{
return (RTC->CALR & RTC_CALR_CALP);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x1FF<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_cal_get_minus(void)
{
return (RTC->CALR & RTC_CALR_CALM);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_calib_interrupt_enable(void)
{
RTC->CR |= RTC_CR_CALIE;
}
/**
* @brief <EFBFBD><EFBFBD>ֹУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_calib_interrupt_disable(void)
{
RTC->CR &= (~RTC_CR_CALIE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡRTCУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
* @retval bool <EFBFBD><EFBFBD>־״̬
* @arg true <EFBFBD><EFBFBD>ʾRTCУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾRTCУ׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϹر<EFBFBD>
*/
__STATIC_INLINE bool std_rtc_get_calib_interrupt_enable()
{
return ((RTC->CR & RTC_CR_CALIE) == RTC_CR_CALIE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_day(void)
{
return (RTC->TSDR & (RTC_TSDR_DT | RTC_TSDR_DU));
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ݣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD>·<EFBFBD>
* @arg RTC_MONTH_JANUARY
* @arg RTC_MONTH_FEBRUARY
* @arg ...
* @arg RTC_MONTH_DECEMBER
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_month(void)
{
return ((RTC->TSDR & (RTC_TSDR_MT | RTC_TSDR_MU)) >> RTC_TSDR_MU_POS);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD>·<EFBFBD>+<EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_date(void)
{
return (RTC->TSDR);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x23<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_hour(void)
{
return ((RTC->TSTR & (RTC_TSTR_HT | RTC_TSTR_HU)) >> RTC_TSTR_HU_POS);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_minute(void)
{
return ((RTC->TSTR & (RTC_TSTR_MNT | RTC_TSTR_MNU)) >> RTC_TSTR_MNU_POS);
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>С0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x59<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_second(void)
{
return (RTC->TSTR & (RTC_TSTR_ST | RTC_TSTR_SU));
}
/**
* @brief <EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>BCD<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* @retval uint32_t ʱ<EFBFBD>ʱ<EFBFBD><EFBFBD>+<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
*/
__STATIC_INLINE uint32_t std_rtc_timestamp_get_time(void)
{
return (RTC->TSTR);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ״̬<EFBFBD><EFBFBD>־
* @param flag <EFBFBD><EFBFBD>־
* @arg RTC_FLAG_ALARM
* @arg RTC_FLAG_CALIBRATION
* @arg ...
* @arg RTC_FLAG_1024HZ
* @retval bool <EFBFBD><EFBFBD>־״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>1
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>0
*/
__STATIC_INLINE bool std_rtc_get_flag(uint32_t flag)
{
return ((RTC->SR & flag) == flag);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ж<EFBFBD>״̬<EFBFBD><EFBFBD>־
* @param interrupt <EFBFBD><EFBFBD>־
* @arg RTC_INTERRUPT_FLAG_ALARM
* @arg RTC_INTERRUPT_FLAG_CALIBRATION
* @arg ...
* @arg RTC_INTERRUPT_FLAG_1024HZ
* @retval bool <EFBFBD>ж<EFBFBD>״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD><EFBFBD>ѷ<EFBFBD><EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE bool std_rtc_get_interrupt_flag(uint32_t interrupt)
{
return ((RTC->ISR & interrupt) == interrupt);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>־
* @param flag <EFBFBD><EFBFBD>־
* @arg RTC_CLEAR_ALARM
* @arg RTC_CLEAR_CALIBRATION
* @arg ...
* @arg RTC_CLEAR_1024HZ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_rtc_clear_flag(uint32_t flag)
{
RTC->CLR = flag;
}
void std_rtc_deinit(void);
std_status_t std_rtc_date_init(std_rtc_date_t *rtc_date_init_param);
void std_rtc_date_struct_init(std_rtc_date_t *rtc_date_init_struct);
std_status_t std_rtc_time_init(std_rtc_time_t *rtc_time_init_param);
void std_rtc_time_struct_init(std_rtc_time_t *rtc_time_init_struct);
void std_rtc_alarm_init(std_rtc_alarm_t *rtc_alarm_init_param);
void std_rtc_alarm_struct_init(std_rtc_alarm_t *rtc_alarm_init_struct);
std_status_t std_rtc_init_mode_enter(void);
std_status_t std_rtc_init_mode_exit(void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_RTC_H */