mirror of
https://github.com/jialexd/sdk-ameba-v4.0c_180328.git
synced 2024-11-28 09:10:28 +00:00
479 lines
16 KiB
C
Executable file
479 lines
16 KiB
C
Executable file
/**
|
|
******************************************************************************
|
|
* @file rtl8711b_rtc.h
|
|
* @author
|
|
* @version V1.0.0
|
|
* @date 2016-05-17
|
|
* @brief This file contains all the functions prototypes for the RTC firmware
|
|
* library.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* This module is a confidential and proprietary property of RealTek and
|
|
* possession or use of this module requires written permission of RealTek.
|
|
*
|
|
* Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
|
|
******************************************************************************
|
|
*/
|
|
|
|
#ifndef _RTL8711B_RTC_H_
|
|
#define _RTL8711B_RTC_H_
|
|
|
|
/** @addtogroup AmebaZ_Periph_Driver
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup RTC
|
|
* @brief RTC driver modules
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup RTC
|
|
* @verbatim
|
|
*****************************************************************************************
|
|
* Introduction
|
|
*****************************************************************************************
|
|
* The real-time clock (RTC) is an independent BCD timer/counter.
|
|
* One 32-bit register contains the seconds, minutes, hours (12 or 24-hour format)
|
|
* expressed in binary coded decimal format (BCD).
|
|
* One 32-bit register contains the days expressed in binary format.
|
|
* Daylight saving time compensation can also be performed.
|
|
* One programmable alarm contains seconds, minutes, hours and days with interrupt function,
|
|
* and can be triggered by any combination of the time fields.
|
|
* A digital calibration feature is available to compensate for some deviation.
|
|
* After backup domain reset, all RTC registers are protected against possible parasitic
|
|
* write accesses.
|
|
* As long as the supply voltage remains in the operating range, the RTC never stops,
|
|
* regardless of the device status (Run mode, low power mode or under reset).
|
|
*
|
|
*****************************************************************************************
|
|
* How to use RTC
|
|
*****************************************************************************************
|
|
* To use the RTC, the following steps are mandatory:
|
|
*
|
|
* 1. Initialize the RTC Clock Source.
|
|
* RTC_ClockSource()
|
|
*
|
|
* 2. Fill the variable RTC_InitStruct with default parameters, or set the desired parameters manually:
|
|
* RTC_StructInit(&RTC_InitStruct)
|
|
*
|
|
* 3. configure the RTC peripheral with the corresponding configurations contained in RTC_InitStruct:
|
|
* Call RTC_Init(&RTC_InitStruct)
|
|
*
|
|
* 4. Fill the variable RTC_TimeStruct with default parameters() (Time = 00d:00h:00min:00sec)
|
|
* RTC_TimeStructInit(&RTC_TimeStruct)
|
|
* setting the desired calendar time parameters manually.
|
|
*
|
|
* 5. Set calendar time:
|
|
* RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct).
|
|
*
|
|
* 6. If RTC_OUT output is needed, the pinmux configuration is as follows:
|
|
* Pinmux_Config(PinName, PINMUX_FUNCTION_RTCOUT)
|
|
*
|
|
* RTC_OUT output pinmux:
|
|
* S0: PA_30
|
|
* S1: PA_16
|
|
*
|
|
*****************************************************************************************
|
|
* How to use Alarm
|
|
*****************************************************************************************
|
|
* To use the Alarm, the following steps are mandatory:
|
|
*
|
|
* 1. Configure the RTC as described in the first part of this driver.
|
|
*
|
|
* 2. Fill the variable RTC_AlarmStruct of type RTC_AlarmTypeDef with default parameters
|
|
* RTC_AlarmStructInit(&RTC_AlarmStruct)
|
|
* or setting the desired Alarm time parameters manually.
|
|
*
|
|
* 3. configure Alarm:
|
|
* RTC_SetAlarm(RTC_Format_BIN, &RTC_AlarmStruct)
|
|
*
|
|
* 4. Enable alarm and alarm interrupt.
|
|
* RTC_AlarmCmd(ENABLE)
|
|
*
|
|
* 5. Enable IRQ as follows:
|
|
* InterruptRegister(RTC_IntHandler, RTC_IRQ, NULL, 4);
|
|
* InterruptEn(RTC_IRQ, 4);
|
|
*
|
|
* @endverbatim
|
|
*/
|
|
|
|
/* Exported types ------------------------------------------------------------*/
|
|
|
|
/** @defgroup RTC_Exported_Types RTC Exported Types
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief RTC Init structure definition
|
|
*/
|
|
typedef struct {
|
|
u32 RTC_HourFormat; /*!< Specifies the RTC Hour Format.
|
|
This parameter can be a value of @ref RTC_Hour_Formats */
|
|
|
|
u32 RTC_AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value.
|
|
This parameter must be a value of @ref RTC_Asynchronous_Predivider */
|
|
|
|
u32 RTC_SynchPrediv; /*!< Specifies the RTC Synchronous Predivider value.
|
|
This parameter must be a value of @ref RTC_Synchronous_Predivider */
|
|
} RTC_InitTypeDef;
|
|
|
|
/**
|
|
* @brief RTC Time structure definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
u16 RTC_Days; /*!< Day in binary format 9bits 0~0x1FF */
|
|
|
|
u8 RTC_Hours; /*!< Specifies the RTC Time Hour.
|
|
This parameter must be set to a value in the 1-12 range
|
|
if the RTC_HourFormat_12 is selected or 0-23 range if
|
|
the RTC_HourFormat_24 is selected. */
|
|
|
|
u8 RTC_Minutes; /*!< Specifies the RTC Time Minutes.
|
|
This parameter must be set to a value in the 0-59 range. */
|
|
|
|
u8 RTC_Seconds; /*!< Specifies the RTC Time Seconds.
|
|
This parameter must be set to a value in the 0-59 range. */
|
|
|
|
u8 RTC_H12_PMAM; /*!< Specifies the RTC AM/PM Time.
|
|
This parameter can be a value of @ref RTC_AM_PM_Definitions */
|
|
}RTC_TimeTypeDef;
|
|
|
|
/**
|
|
* @brief RTC Alarm structure definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
RTC_TimeTypeDef RTC_AlarmTime; /*!< Specifies the RTC Alarm Time members. */
|
|
|
|
u32 RTC_AlarmMask; /*!< Specifies the RTC Alarm1 Masks(H:M:S).
|
|
This parameter can be a value of @ref RTC_AlarmMask1_Definitions */
|
|
u32 RTC_Alarm2Mask; /*!< Specifies the RTC Alarm2 Masks Day).
|
|
This parameter can be a value of @ref RTC_AlarmMask2_Definitions */
|
|
}RTC_AlarmTypeDef;
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Exported constants --------------------------------------------------------*/
|
|
|
|
/** @defgroup RTC_Exported_Constants RTC Exported Constants
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup RTC_Input_parameter_format_definitions
|
|
* @{
|
|
*/
|
|
#define RTC_Format_BIN ((u32)0x000000000)
|
|
#define RTC_Format_BCD ((u32)0x000000001)
|
|
#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_Format_BIN) || ((FORMAT) == RTC_Format_BCD))
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Hour_Formats
|
|
* @{
|
|
*/
|
|
#define RTC_HourFormat_24 ((u32)0x00000000)
|
|
#define RTC_HourFormat_12 ((u32)0x00000080)
|
|
#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HourFormat_12) || \
|
|
((FORMAT) == RTC_HourFormat_24))
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Asynchronous_Predivider
|
|
* @{
|
|
*/
|
|
#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x1FF)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Synchronous_Predivider
|
|
* @{
|
|
*/
|
|
#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= 0x1FF)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Time_Definitions
|
|
* @{
|
|
*/
|
|
#define IS_RTC_HOUR12(HOUR) (((HOUR) > 0) && ((HOUR) <= 12))
|
|
#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23)
|
|
#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59)
|
|
#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_AM_PM_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_H12_AM ((u8)0x00) //AM or 24-hour format
|
|
#define RTC_H12_PM ((u8)0x01) //PM
|
|
#define IS_RTC_H12_AMPM(PM) (((PM) == RTC_H12_AM) || ((PM) == RTC_H12_PM))
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_AlarmMask1_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_AlarmMask_None ((u32)0x00000000)
|
|
#define RTC_AlarmMask_Hours ((u32)0x00800000)
|
|
#define RTC_AlarmMask_Minutes ((u32)0x00008000)
|
|
#define RTC_AlarmMask_Seconds ((u32)0x00000080)
|
|
#define RTC_AlarmMask_All ((u32)0x00808080)
|
|
#define IS_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F) == 0)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_AlarmMask2_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_Alarm2Mask_None ((u32)0x00000000)
|
|
#define RTC_Alarm2Mask_Days ((u32)0x00000200)
|
|
#define IS_ALARM2_MASK(MASK) (((MASK) & ~RTC_Alarm2Mask_Days) == 0)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Alarms_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_Alarm ((u32)0x00000100)
|
|
#define IS_RTC_ALARM(ALARM) ((ALARM) == RTC_Alarm)
|
|
#define IS_RTC_CMD_ALARM(ALARM) (((ALARM) & RTC_Alarm) != (u32)0)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Alarms_Interrupt_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_Alarm_IntEn ((u32)0x00001000)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_DayLightSaving_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_DayLightSaving_SUB1H ((u32)0x00000002)
|
|
#define RTC_DayLightSaving_ADD1H ((u32)0x00000001)
|
|
#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DayLightSaving_SUB1H) || \
|
|
((SAVE) == RTC_DayLightSaving_ADD1H))
|
|
|
|
#define RTC_StoreOperation_Reset ((u32)0x00000000)
|
|
#define RTC_StoreOperation_Set ((u32)0x00000004)
|
|
#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_StoreOperation_Reset) || \
|
|
((OPERATION) == RTC_StoreOperation_Set))
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Output_selection_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_Output_Disable ((u32)0x00000000)
|
|
#define RTC_Output_Alarm ((u32)0x00000020) ////wakeup
|
|
#define RTC_Output_clkspre ((u32)0x00000040) ////1Hz
|
|
#define RTC_Output_clkapre ((u32)0x00000060) ////256Hz
|
|
|
|
#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_Output_Disable) || \
|
|
((OUTPUT) == RTC_Output_Alarm) || \
|
|
((OUTPUT) == RTC_Output_clkspre) || \
|
|
((OUTPUT) == RTC_Output_clkapre))
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Smooth_Calibration_Definitions
|
|
* @{
|
|
*/
|
|
#define RTC_CalibPeriod_1MIN ((u32)0x00000000)
|
|
#define RTC_CalibPeriod_2MIN ((u32)0x00010000)
|
|
#define RTC_CalibPeriod_3MIN ((u32)0x00020000)
|
|
#define RTC_CalibPeriod_4MIN ((u32)0x00030000)
|
|
#define RTC_CalibPeriod_5MIN ((u32)0x00040000)
|
|
#define RTC_CalibPeriod_6MIN ((u32)0x00050000)
|
|
#define RTC_CalibPeriod_7MIN ((u32)0x00060000)
|
|
#define RTC_CalibPeriod_8MIN ((u32)0x00070000)
|
|
|
|
#define IS_RTC_CALIB_PERIOD(DCP) (((DCP) == RTC_CalibPeriod_1MIN) || \
|
|
((DCP) == RTC_CalibPeriod_2MIN) || \
|
|
((DCP) == RTC_CalibPeriod_3MIN) || \
|
|
((DCP) == RTC_CalibPeriod_4MIN) || \
|
|
((DCP) == RTC_CalibPeriod_5MIN) || \
|
|
((DCP) == RTC_CalibPeriod_6MIN) || \
|
|
((DCP) == RTC_CalibPeriod_7MIN) || \
|
|
((DCP) == RTC_CalibPeriod_8MIN))
|
|
|
|
#define RTC_Calib_Disable ((u32)0x00000000)
|
|
#define RTC_Calib_Enable ((u32)0x00008000)
|
|
|
|
#define IS_RTC_CALIB_ENABLE(DCE) (((DCE) == RTC_Calib_Disable) || \
|
|
((DCE) == RTC_Calib_Enable))
|
|
|
|
#define RTC_CalibSign_Positive ((u32)0x00000000)
|
|
#define RTC_CalibSign_Negative ((u32)0x00004000)
|
|
|
|
#define IS_RTC_CALIB_SIGN(SIGN) (((SIGN) == RTC_CalibSign_Positive) || \
|
|
((SIGN) == RTC_CalibSign_Negative))
|
|
|
|
#define IS_RTC_CALIB_VALUE(VALUE) ((VALUE) <= 0x7F)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTC_Exported_Functions RTC Exported Functions
|
|
* @{
|
|
*/
|
|
_LONG_CALL_ void RTC_BypassShadowCmd(u32 NewState);
|
|
_LONG_CALL_ void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct);
|
|
_LONG_CALL_ u32 RTC_Init(RTC_InitTypeDef* RTC_InitStruct);
|
|
_LONG_CALL_ void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct);
|
|
_LONG_CALL_ u32 RTC_SetTime(u32 RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct);
|
|
_LONG_CALL_ void RTC_GetTime(u32 RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct);
|
|
_LONG_CALL_ u32 RTC_SetAlarm(u32 RTC_Format, RTC_AlarmTypeDef* RTC_AlarmStruct);
|
|
_LONG_CALL_ void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct);
|
|
_LONG_CALL_ void RTC_GetAlarm(u32 RTC_Format, RTC_AlarmTypeDef* RTC_AlarmStruct);
|
|
_LONG_CALL_ void RTC_AlarmCmd(u32 NewState);
|
|
_LONG_CALL_ void RTC_AlarmClear(void);
|
|
_LONG_CALL_ void RTC_DayLightSavingConfig(u32 RTC_DayLightSaving, u32 RTC_StoreOperation);
|
|
_LONG_CALL_ u32 RTC_GetStoreOperation(void);
|
|
_LONG_CALL_ void RTC_OutputConfig(u32 RTC_Output);
|
|
_LONG_CALL_ u32 RTC_SmoothCalibConfig(u32 CalibSign, u32 Value, u32 CalibPeriod, u32 Calib_Enable);
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Registers Definitions --------------------------------------------------------*/
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_Register_Definitions RTC Register Definitions
|
|
* @{
|
|
*****************************************************************************/
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_TR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_TR_DAY ((u32)0xFF800000)
|
|
#define RTC_TR_PM ((u32)0x00400000)
|
|
#define RTC_TR_HT ((u32)0x00300000)
|
|
#define RTC_TR_HU ((u32)0x000F0000)
|
|
#define RTC_TR_MNT ((u32)0x00007000)
|
|
#define RTC_TR_MNU ((u32)0x00000F00)
|
|
#define RTC_TR_ST ((u32)0x00000070)
|
|
#define RTC_TR_SU ((u32)0x0000000F)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_CR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_CR_ALRAIE ((u32)0x00001000)
|
|
#define RTC_CR_ALRAE ((u32)0x00000100)
|
|
#define RTC_CR_FMT ((u32)0x00000080)
|
|
#define RTC_CR_OSEL ((u32)0x00000060)
|
|
#define RTC_CR_BYPSHAD ((u32)0x00000008)
|
|
#define RTC_CR_BCK ((u32)0x00000004)
|
|
#define RTC_CR_SUB1H ((u32)0x00000002)
|
|
#define RTC_CR_ADD1H ((u32)0x00000001)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_ISR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_ISR_RECALPF ((u32)0x00010000)
|
|
#define RTC_ISR_ALRAF ((u32)0x00000100)
|
|
|
|
#define RTC_ISR_INIT ((u32)0x00000080)
|
|
#define RTC_ISR_INITF ((u32)0x00000040)
|
|
#define RTC_ISR_RSF ((u32)0x00000020)
|
|
#define RTC_ISR_INITS ((u32)0x00000010)
|
|
|
|
#define RTC_ISR_ALMWF ((u32)0x00000001)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_PRER
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_PRER_PREDIV_A ((u32)0x01FF0000)
|
|
#define RTC_PRER_PREDIV_S ((u32)0x000001FF)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_CALIBR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_CALIBR_CALP ((u32)0x00070000)
|
|
#define RTC_CALIBR_DCE ((u32)0x00008000)
|
|
#define RTC_CALIBR_DCS ((u32)0x00004000)
|
|
#define RTC_CALIBR_DC ((u32)0x0000007F)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_ALRMAR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_ALRMAR_MSK2 ((u32)0x00800000)
|
|
#define RTC_ALRMAR_PM ((u32)0x00400000)
|
|
#define RTC_ALRMAR_HT ((u32)0x00300000)
|
|
#define RTC_ALRMAR_HU ((u32)0x000F0000)
|
|
|
|
#define RTC_ALRMAR_MSK1 ((u32)0x00008000)
|
|
#define RTC_ALRMAR_MNT ((u32)0x00007000)
|
|
#define RTC_ALRMAR_MNU ((u32)0x00000F00)
|
|
|
|
#define RTC_ALRMAR_MSK0 ((u32)0x00000080)
|
|
#define RTC_ALRMAR_ST ((u32)0x00000070)
|
|
#define RTC_ALRMAR_SU ((u32)0x0000000F)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_ALRMBR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_ALRMBR_MSK3 ((u32)0x00000200)
|
|
#define RTC_ALRMBR_DT ((u32)0x000001FF)
|
|
/** @} */
|
|
|
|
/**************************************************************************//**
|
|
* @defgroup RTC_WPR
|
|
* @{
|
|
*****************************************************************************/
|
|
#define RTC_WPR_KEY ((u32)0x000000FF)
|
|
/** @} */
|
|
/** @} */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Masks Definition */
|
|
#define RTC_TR_RESERVED_MASK ((u32)0xFFFF7F7F)
|
|
#define INITMODE_TIMEOUT ((u32) 0x00010000)
|
|
#define SYNCHRO_TIMEOUT ((u32) 0x00020000)
|
|
#define RECALPF_TIMEOUT ((u32) 0x00020000)
|
|
#define ALARMDIS_TIMEOUT ((u32) 0x00020000)
|
|
#define RTC_DIV_XTAL_MASK ((u32) 0x07FF0000)
|
|
|
|
#endif //_RTL8711B_RTC_H_
|
|
|
|
/******************* (C) COPYRIGHT 2016 Realtek Semiconductor *****END OF FILE****/
|