498 lines
12 KiB
C
Raw Normal View History

2021-12-02 16:00:09 +08:00
/*!
* @file apm32f0xx_rtc.h
*
* @brief This file contains all the functions prototypes for the RTC firmware library.
*
* @version V1.0.1
*
* @date 2021-07-01
*
*/
#ifndef __RTC_H
#define __RTC_H
#include "apm32f0xx.h"
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup Peripherals_Library Standard Peripheral Library
@{
*/
/** @addtogroup RTC_Driver RTC Driver
@{
*/
/** @addtogroup RTC_Enumerations Enumerations
@{
*/
/**
* @brief RTC Hour Formats
*/
typedef enum
{
RTC_HourFormat_24, //!< 24 hour/day format
RTC_HourFormat_12 //!< AM/PM hour format
} RTC_HOUR_FORMAT_T;
/**
* @brief RTC Input parameter format
*/
typedef enum
{
RTC_FORMAT_BIN,
RTC_FORMAT_BCD
} RTC_FORMAT_T;
/**
* @brief RTC_AM_PM
*/
typedef enum
{
RTC_H12_AM,
RTC_H12_PM
} RTC_H12_T;
/**
* @brief RTC DayLightSaving
*/
typedef enum
{
RTC_DLS_SUB1H,
RTC_DLS_ADD1H
} RTC_DAYLIGHT_SAVING_T;
/**
* @brief RTC DayLightSaving
*/
typedef enum
{
RTC_SO_RESET = BIT_RESET,
RTC_SO_SET = BIT_SET,
} RTC_STORE_OPERATION_T;
/**
* @brief RTC Output selection
*/
typedef enum
{
RTC_OPSEL_DISABLE = 0x00,
RTC_OPSEL_ALARMA = 0x01,
RTC_OPSEL_WAKEUP = 0x03, //!< Only for APM32F072 and APM32F091 devices
} RTC_OPSEL_T;
/**
* @brief RTC Output Polarity
*/
typedef enum
{
RTC_OPP_HIGH,
RTC_OPP_LOW
} RTC_OPP_T;
/**
* @brief RTC Calib Output selection
*/
typedef enum
{
RTC_CALIBOUTPUT_512Hz,
RTC_CALIBOUTPUT_1Hz
} RTC_CALIB_OUTPUT_T;
/**
* @brief RTC Smooth calib period
*/
typedef enum
{
RTC_SCP_16SEC,
RTC_SCP_8SEC
} RTC_SCP_T;
/**
* @brief RTC Smooth calib period
*/
typedef enum
{
RTC_SCPP_RESET,
RTC_SCPP_SET
} RTC_SCPP_T;
/**
* @brief RTC Time Stamp Edges
*/
typedef enum
{
RTC_TIME_STAMPEDGE_RISING,
RTC_TIME_STAMPEDGE_FALLING
} RTC_TIMESTAMP_EDGE_T;
/**
* @brief RTC Tamper Trigger
*/
typedef enum
{
RTC_TAMPER_TRIGGER_RISINGEDGE = 0x00,
RTC_TAMPER_TRIGGER_FALLINGEDGE = 0x01,
RTC_TAMPER_TRIGGER_LOWLEVEL = 0x00,
RTC_TAMPER_TRIGGER_HIGHLEVEL = 0x01,
} RTC_TAMPER_TRIGGER_T;
/**
* @brief RTC Tamper Pins
*/
typedef enum
{
RTC_TAMPER_1,
RTC_TAMPER_2,
RTC_TAMPER_3 //!< Only for APM32F072 and APM32F091 devices
} RTC_TAMPER_T;
/**
* @brief Tampers Sampling Frequency
*/
typedef enum
{
RTC_TAMPER_FILTER_DISABLE,
RTC_TAMPER_FILTER_2SAMPLE,
RTC_TAMPER_FILTER_4SAMPLE,
RTC_TAMPER_FILTER_8SAMPLE
} RTC_TAMPER_FILTER_T;
/**
* @brief Tampers Sampling Frequency
*/
typedef enum
{
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV32768,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV16384,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV8192,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV4096,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV2048,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV1024,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV512,
RTC_TAMPERSAMPLINGFREQ_RTCCLK_DIV256
} RTC_TAMPER_SAMPLING_FREQ_T;
/**
* @brief Precharge Duration
*/
typedef enum
{
RTC_PRECHARGEDURATION_1RTCCLK,
RTC_PRECHARGEDURATION_2RTCCLK,
RTC_PRECHARGEDURATION_4RTCCLK,
RTC_PRECHARGEDURATION_8RTCCLK
} RTC_PRECHARGE_DURATION_T;
/**
* @brief RTC Add 1 Second Parameter
*/
typedef enum
{
RTC_SHIFTADD1S_RESET,
RTC_SHIFTADD1S_SET
} RTC_SHIFT_ADD1S_T;
/**
* @brief
*/
typedef enum
{
RTC_OPENDRAIN,
RTC_PUSHPULL
} RTC_OUTPUT_T;
/**
* @brief RTC AlarmDateWeekDay
*/
typedef enum
{
RTC_WEEKDAY_SEL_DATE,
RTC_WEEKDAY_SEL_WEEKDAY
} RTC_WEEKDAY_SEL_T;
/**
* @brief RTC Interrupts Soure
*/
typedef enum
{
RTC_INT_ALR = 0x00001000,
RTC_INT_WT = 0x00004000,
RTC_INT_TS = 0x00008000,
RTC_INT_TAMP = 0x00000004,
} RTC_INT_T;
/**
* @brief RTC Interrupts Flag
*/
typedef enum
{
RTC_INT_FLAG_ALR = 0x00001000,
RTC_INT_FLAG_WT = 0x00004000, //!< Only for APM32F072 and APM32F091 devices
RTC_INT_FLAG_TS = 0x00008000,
RTC_INT_FLAG_TAMP1 = 0x00020004,
RTC_INT_FLAG_TAMP2 = 0x00040004,
RTC_INT_FLAG_TAMP3 = 0x00080004, //!< Only for APM32F072 and APM32F091 devices
} RTC_INT_FLAG_T;
/**
* @brief RTC flag
*/
typedef enum
{
RTC_FLAG_AWF = BIT0,
RTC_FLAG_WTWF = BIT2, //!< Only for APM32F072 and APM32F091 devices
RTC_FLAG_SOPF = BIT3,
RTC_FLAG_ISF = BIT4,
RTC_FLAG_RSF = BIT5,
RTC_FLAG_INTF = BIT6,
RTC_FLAG_ALRF = BIT8,
RTC_FLAG_WTF = BIT10, //!< Only for APM32F072 and APM32F091 devices
RTC_FLAG_TSF = BIT11,
RTC_FLAG_TSOF = BIT12,
RTC_FLAG_TP1F = BIT13,
RTC_FLAG_TP2F = BIT14,
RTC_FLAG_TP3F = BIT15, //!< Only for APM32F072 and APM32F091 devices
RTC_FLAG_RPF = BIT16,
} RTC_FLAG_T;
/**
* @brief RTC_Backup
*/
typedef enum
{
RTC_BAKP_DATA0,
RTC_BAKP_DATA1,
RTC_BAKP_DATA2,
RTC_BAKP_DATA3,
RTC_BAKP_DATA4
} RTC_BAKP_DATA_T;
/**
* @brief RTC_AlarmMask
*/
typedef enum
{
RTC_MASK_NONE = 0x00000000,
RTC_MASK_DATEWEEK = (int)0x80000000,
RTC_MASK_HOURS = 0x00800000,
RTC_MASK_MINUTES = 0x00008000,
RTC_MASK_SECONDS = 0x00000080,
RTC_MASK_ALL = (int)0x80808080,
} RTC_MASK_T;
/**
* @brief RTC Wakeup clock select (only APM32F072 and APM32F091 devices)
*/
typedef enum
{
RTC_WAKEUP_CLOCK_RTCDIV16 = 0x00,
RTC_WAKEUP_CLOCK_RTCDIV8,
RTC_WAKEUP_CLOCK_RTCDIV4,
RTC_WAKEUP_CLOCK_RTCDIV2,
RTC_WAKEUP_CLOCK_CK_SPRE_16B,
RTC_WAKEUP_CLOCK_CK_SPRE_17B,
} RTC_WAKEUP_CLOCK_T;
/**@} end of group RTC_Enumerations*/
/** @addtogroup RTC_Macros Macros
@{
*/
/** Macros description */
#define RTC_INITMODE_TIMEOUT ((uint32_t) 0x00004000)
#define RTC_SYNCHRO_TIMEOUT ((uint32_t) 0x00008000)
#define RTC_RECALPF_TIMEOUT ((uint32_t) 0x00001000)
#define RTC_SHPF_TIMEOUT ((uint32_t) 0x00001000)
#define RTC_CTRL_INT ((uint32_t) 0x0000D000)
#define RTC_TAFCFG_INT ((uint32_t) 0x00000004)
#define RTC_CTRL_INT ((uint32_t) 0x0000D000)
#define RTC_TAFCFG_INT ((uint32_t) 0x00000004)
#define RTC_MONTH_JANUARY ((uint8_t)0x01)
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02)
#define RTC_MONTH_MARCH ((uint8_t)0x03)
#define RTC_MONTH_APRIL ((uint8_t)0x04)
#define RTC_MONTH_MAY ((uint8_t)0x05)
#define RTC_MONTH_JUNE ((uint8_t)0x06)
#define RTC_MONTH_JULY ((uint8_t)0x07)
#define RTC_MONTH_AUGUST ((uint8_t)0x08)
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09)
#define RTC_MONTH_OCTOBER ((uint8_t)0x0A)
#define RTC_MONTH_NOVEMBER ((uint8_t)0x0B)
#define RTC_MONTH_DECEMBER ((uint8_t)0x0C)
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01)
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02)
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03)
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04)
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05)
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06)
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x07)
/**@} end of group RTC_Macros*/
/** @addtogroup RTC_Structure Data Structure
@{
*/
/**
* @brief RTC Init structures definition
*/
typedef struct
{
RTC_HOUR_FORMAT_T format;
uint32_t AsynchPrediv; //!< AsynchPrediv<= 0x7F
uint32_t SynchPrediv; //!< SynchPrediv<= 0x7FFF
} RTC_Config_T;
/**
* @brief RTC Time structure definition
*/
typedef struct
{
uint8_t hours;
uint8_t minutes;
uint8_t seconds;
uint8_t H12;
} RTC_TIME_T;
/**
* @brief RTC Date structure definition
*/
typedef struct
{
uint8_t weekday;
uint8_t month;
uint8_t date;
uint8_t year;
} RTC_DATE_T;
/**
* @brief RTC ALRMA structure definition
*/
typedef struct
{
RTC_TIME_T time;
uint32_t AlarmMask;
RTC_WEEKDAY_SEL_T AlarmDateWeekDaySel;
uint8_t AlarmDateWeekDay;
} RTC_ALARM_T;
/**@} end of group RTC_Structure*/
/** @addtogroup RTC_Fuctions Fuctions
@{
*/
/** Initialization and Configuration functions */
uint8_t RTC_Reset(void);
uint8_t RTC_Config(RTC_Config_T* Struct);
void RTC_ConfigStructInit(RTC_Config_T* Struct);
void RTC_EnableWriteProtection(void);
void RTC_DisableWriteProtection(void);
uint8_t RTC_EnableInit(void);
void RTC_DisableInit(void);
uint8_t RTC_WaitForSynchro(void);
uint8_t RTC_EnableRefClock(void);
uint8_t RTC_DisableRefClock(void);
void RTC_EnableBypassShadow(void);
void RTC_DisableBypassShadow(void);
/** Time and Date configuration functions */
uint8_t RTC_ConfigTime(RTC_FORMAT_T format, RTC_TIME_T* timeStruct);
void RTC_ConfigTimeStructInit(RTC_TIME_T* timeStruct);
void RTC_ReadTime(RTC_FORMAT_T format, RTC_TIME_T* timeStruct);
uint32_t RTC_ReadSubSecond(void);
uint8_t RTC_ConfigDate(RTC_FORMAT_T format, RTC_DATE_T* dateStruct);
void RTC_ConfigDateStructInit(RTC_DATE_T* dateStruct);
void RTC_ReadDate(RTC_FORMAT_T format, RTC_DATE_T* dateStruct);
/** Alarms (ALRMA A) configuration functions */
void RTC_ConfigAlarm(RTC_FORMAT_T format, RTC_ALARM_T* alarmStruct);
void RTC_ConfigAlarmStructInit(RTC_ALARM_T* alarmStruct);
void RTC_ReadAlarm(RTC_FORMAT_T format, RTC_ALARM_T* alarmStruct);
void RTC_EnableAlarm(void);
uint8_t RTC_DisableAlarm(void);
void RTC_ConfigAlarmSubSecond(uint32_t val, uint8_t mask);
uint32_t RTC_ReadAlarmSubSecond(void);
/** WakeUp Timer configuration functions */
void RTC_ConfigWakeUpClock(RTC_WAKEUP_CLOCK_T wakeUpClock); //!< Only for APM32F072 and APM32F091 devices
void RTC_SetWakeUpValue(uint32_t wakeUpValue); //!< Only for APM32F072 and APM32F091 devices
uint32_t RTC_ReadWakeUpValue(void); //!< Only for APM32F072 and APM32F091 devices
void RTC_EnableWakeUp(void); //!< Only for APM32F072 and APM32F091 devices
uint8_t RTC_DisableWakeUp(void); //!< Only for APM32F072 and APM32F091 devices
/* Daylight Saving configuration functions */
void RTC_ConfigDayLightSaving(RTC_DAYLIGHT_SAVING_T sav, RTC_STORE_OPERATION_T bit);
uint32_t RTC_ReadStoreOperation(void);
/** Output pin Configuration function */
void RTC_ConfigOutput(RTC_OPSEL_T opsel, RTC_OPP_T opp);
/** Digital Calibration configuration functions */
void RTC_EnableCalibOutput(void);
void RTC_DisableCalibOutput(void);
void RTC_ConfigCalibOutput(RTC_CALIB_OUTPUT_T calib);
uint8_t RTC_ConfigSmoothCalib(RTC_SCP_T period, RTC_SCPP_T bit, uint32_t value);
/** TimeStamp configuration functions */
void RTC_EnableTimeStamp(RTC_TIMESTAMP_EDGE_T edge);
void RTC_DisableTimeStamp(RTC_TIMESTAMP_EDGE_T edge);
void RTC_ReadTimeDate(RTC_FORMAT_T format, RTC_TIME_T* timeStruct,
RTC_DATE_T* dateStruct);
uint32_t RTC_ReadTimeStampSubSecond(void);
/** Tampers configuration functions */
void RTC_ConfigTamperTrigger(RTC_TAMPER_T tamper, RTC_TAMPER_TRIGGER_T trigger);
void RTC_EnableTamper(RTC_TAMPER_T tamper);
void RTC_DisableTamper(RTC_TAMPER_T tamper);
void RTC_ConfigFilter(RTC_TAMPER_FILTER_T filter);
void RTC_ConfigSamplingFreq(RTC_TAMPER_SAMPLING_FREQ_T freq);
void RTC_PinsPrechargeDuration(RTC_PRECHARGE_DURATION_T duration);
void RTC_EnableTDE(void);
void RTC_DisableTDE(void);
void RTC_EnablePullUp(void);
void RTC_DisablePullUp(void);
/* Backup Data Registers configuration functions */
void RTC_WriteBackup(RTC_BAKP_DATA_T backup, uint32_t data);
uint32_t RTC_ReadBackup(RTC_BAKP_DATA_T backup);
/* Output Type Config configuration functions */
void RTC_ConfigOutputType(RTC_OUTPUT_T output);
/** RTC Shift control synchonisation functions */
uint8_t RTC_ConfigSynchroShift(RTC_SHIFT_ADD1S_T add1S, uint32_t subFS);
/** Interrupts and flags management functions */
void RTC_EnableInterrupt(uint32_t interrupt);
void RTC_DisableInterrupt(uint32_t interrupt);
uint8_t RTC_ReadStatusFlag(RTC_FLAG_T flag);
void RTC_ClearStatusFlag(uint32_t flag);
uint8_t RTC_ReadIntFlag(RTC_INT_FLAG_T flag);
void RTC_ClearIntFlag(uint32_t flag);
/**@} end of group RTC_Fuctions*/
/**@} end of group RTC_Driver*/
/**@} end of group Peripherals_Library*/
#ifdef __cplusplus
}
#endif
#endif /* __RTC_H */