nt9856x/code/hdal/drivers/k_driver/include/rtos_na51089/rtc.h
2023-03-28 15:07:53 +08:00

204 lines
6.3 KiB
C
Executable File

/**
Header file for RTC module.
This file is the header file that define the API and data type
for RTC module.
@file rtc.h
@ingroup miDrvTimer_RTC
@note Nothing.
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
*/
#ifndef _RTC_H
#define _RTC_H
#include <kwrap/type.h>
#include <kwrap/nvt_type.h>
#include <kwrap/platform.h>
#include <comm/driver.h>
//#include "driver.h"
/**
@addtogroup miDrvTimer_RTC
*/
//@{
/**
RTC Date
*/
typedef union {
// Format conformed to RTC register
_PACKED_BEGIN struct {
UBITFIELD day: 5; ///< Day
UBITFIELD month: 4; ///< Month
UBITFIELD year: 12; ///< Year
} _PACKED_END s;
UINT32 value; ///< Date value all together Y:M:D
} RTC_DATE, *PRTC_DATE;
/**
RTC Time
*/
typedef union {
// Format conformed to RTC register
_PACKED_BEGIN struct {
UBITFIELD second: 6; ///< Second
UBITFIELD minute: 6; ///< Minute
UBITFIELD hour: 5; ///< Hour
} _PACKED_END s;
UINT32 value; ///< Time value all together H:M:S
} RTC_TIME, *PRTC_TIME;
/**
RTC power on source
@note For rtc_getPwrOnSource()
*/
typedef enum {
RTC_PWRON_SRC_PWR_SW, ///< power on from power switch
RTC_PWRON_SRC_PWR_SW2, ///< power on from power switch 2
RTC_PWRON_SRC_PWR_SW3, ///< power on from power switch 3 (Usually for USB VBUS, depend on project)
RTC_PWRON_SRC_PWR_SW4, ///< power on from power switch 4 (Usually for VBAT, depend on project)
RTC_PWRON_SRC_PWR_ALM, ///< Power on from PWR ALARM
ENUM_DUMMY4WORD(RTC_PWRON_SRC)
} RTC_PWRON_SRC, *PRTC_PWRON_SRC;
#define RTC_PWRON_SRC_VBAT RTC_PWRON_SRC_PWR_SW4
#define RTC_PWRON_SRC_VBUS RTC_PWRON_SRC_PWR_SW3
/**
RTC wake up source
RTC wake up source for RTC_CONFIG_ID_WAKEUP_SRC.
*/
typedef enum {
RTC_WAKEUP_SRC_ALARM = 0x00000001, ///< RTC time matches alarm time, default is disabled
RTC_WAKEUP_SRC_PWR_SW = 0x00000002, ///< Power switch is pressed, default is disabled
RTC_WAKEUP_SRC_PWR_SW2 = 0x00000004, ///< Power switch 2 is pressed, default is disabled
ENUM_DUMMY4WORD(RTC_WAKEUP_SRC)
} RTC_WAKEUP_SRC, *PRTC_WAKEUP_SRC;
/**
RTC Configuration ID
RTC Configuration ID for rtc_setConfig() and rtc_getConfig().
*/
typedef enum {
RTC_CONFIG_ID_WAKEUP_ENABLE, ///< Enable wake up source when IC enter power down mode (Default is none).
///< Could be ORed of the following value:
///< - @b RTC_WAKEUP_SRC_ALARM : RTC time matches alarm time
///< - @b RTC_WAKEUP_SRC_PWR_SW : Power switch is pressed
///< - @b RTC_WAKEUP_SRC_PWR_SW2: Power switch 2 is pressed
RTC_CONFIG_ID_WAKEUP_DISABLE, ///< Disable wake up source when IC enter power down mode.
///< Could be ORed of the following value:
///< - @b RTC_WAKEUP_SRC_ALARM : RTC time matches alarm time
///< - @b RTC_WAKEUP_SRC_PWR_SW : Power switch is pressed
///< - @b RTC_WAKEUP_SRC_PWR_SW2: Power switch 2 is pressed
ENUM_DUMMY4WORD(RTC_CONFIG_ID)
} RTC_CONFIG_ID, *PRTC_CONFIG_ID;
/**
RTC DATA selection
Select accessed RTC data. Each selection is 16 bits
@note For rtc_setData() and rtc_getData().
*/
typedef enum {
RTC_DATA_0, ///< Select data 0
ENUM_DUMMY4WORD(RTC_DATA)
} RTC_DATA;
/**
RTC DRAM power off policy
@note For rtc_set_dram_power_off_policy()
*/
typedef enum {
RTC_DRAM_POWEROFF_POLICY_NORMAL, ///< Normal. DRAM will be powered off if RTC PWR_EN becomes LOW
RTC_DRAM_POWEROFF_POLICY_KEEP, ///< Normal. DRAM will be stilled powered on if RTC PWR_EN becomes LOW
ENUM_DUMMY4WORD(RTC_DRAM_POWEROFF_POLICY)
} RTC_DRAM_POWEROFF_POLICY;
// Public APIs
// General
extern ER rtc_open(void);
extern BOOL rtc_isOpened(void);
extern void rtc_reset(void);
extern void rtc_triggerCSET(void);
extern void rtc_waitCSETDone(void);
extern BOOL rtc_isPowerLost(void);
extern void rtc_setConfig(RTC_CONFIG_ID ConfigID, UINT32 uiConfig);
extern UINT32 rtc_getConfig(RTC_CONFIG_ID ConfigID);
// Date, time
extern void rtc_setBaseDate(UINT32 uiYear, UINT32 uiMonth, UINT32 uiDay);
extern RTC_DATE rtc_getBaseDate(void);
extern void rtc_setMaxDate(UINT32 uiYear, UINT32 uiMonth, UINT32 uiDay);
extern RTC_DATE rtc_getMaxDate(void);
extern void rtc_setReadTimeOffset(INT32 iHour, INT32 iMinute);
extern ER rtc_setDate(UINT32 uiYear, UINT32 uiMonth, UINT32 uiDay);
extern RTC_DATE rtc_getDate(void);
extern ER rtc_setTime(UINT32 uiHour, UINT32 uiMinute, UINT32 uiSecond);
extern RTC_TIME rtc_getTime(void);
extern UINT32 rtc_setData(RTC_DATA select, UINT32 data);
extern UINT32 rtc_getData(RTC_DATA select);
extern UINT32 rtc_set_pwr_en3(BOOL value);
extern BOOL rtc_get_pwr_en3(void);
extern UINT32 rtc_convertDate2Days(RTC_DATE rtcDate);
extern RTC_DATE rtc_convertDays2Date(UINT32 uiDays);
extern BOOL rtc_isLeapYear(UINT32 uiYear);
// Alarm
extern ER rtc_setAlarm(RTC_DATE rtcDate, RTC_TIME rtcTime, DRV_CB EventHandler);
extern void rtc_getAlarm(PRTC_DATE prtcDate, PRTC_TIME prtcTime);
// Power alarm
extern ER rtc_setPWRAlarm(RTC_DATE rtcDate, RTC_TIME rtcTime);
extern void rtc_getPWRAlarm(PRTC_DATE prtcDate, PRTC_TIME prtcTime);
extern void rtc_disablePWRAlarm(void);
extern void rtc_enablePWRAlarm(void);
extern BOOL rtc_isPWRAlarmEnabled(void);
extern BOOL rtc_isPWRAlarm(void);
// Power button control
extern void rtc_resetShutdownTimer(void);
extern void rtc_poweroffPWR(void);
extern void rtc_set_dram_power_off_policy(RTC_DRAM_POWEROFF_POLICY policy);
extern RTC_DRAM_POWEROFF_POLICY rtc_get_dram_power_off_policy(void);
extern BOOL rtc_getPWRStatus(void);
extern BOOL rtc_getPWR2Status(void);
extern BOOL rtc_getPWR3Status(void);
extern BOOL rtc_getPWR4Status(void);
extern BOOL rtc_getPWREN2Status(void);
extern BOOL rtc_getPWREN2Log(void);
extern RTC_PWRON_SRC rtc_getPWROnSource(void);
// Driver probe
extern void rtc_platform_init(void);
extern void rtc_platform_uninit(void);
//@}
#endif