61 lines
1.8 KiB
C
61 lines
1.8 KiB
C
/*
|
|
* Kneron RTC driver header
|
|
*
|
|
* Copyright (C) 2019 Kneron, Inc. All rights reserved.
|
|
*
|
|
*/
|
|
|
|
#ifndef __RTC_H__
|
|
#define __RTC_H__
|
|
|
|
#define SECS_PER_MIN 60
|
|
#define MINS_PER_HOUR 60
|
|
#define HOURS_PER_DAY 24
|
|
#define SECS_PER_HOUR (MINS_PER_HOUR * SECS_PER_MIN)
|
|
#define SECS_PER_DAY (HOURS_PER_DAY * SECS_PER_HOUR)
|
|
|
|
#define MAX_DAYS_PER_MONTH 31
|
|
#define MONTH_PER_YEAR 12
|
|
#define YEARS_PER_CENTURY 100
|
|
#define CENTURY_PER_100 100 // for the time being
|
|
|
|
#define DAYS_PER_WEEK 7
|
|
#define DAYS_PER_YEAR 365
|
|
|
|
enum alarm_type {
|
|
ALARM_IN_SECS = 1,
|
|
ALARM_IN_DATE_TIME,
|
|
};
|
|
|
|
enum periodic_interrupt {
|
|
PERIODIC_MONTH_INT = 0,
|
|
PERIODIC_DAY_INT,
|
|
PERIODIC_HOUR_INT,
|
|
PERIODIC_MIN_INT,
|
|
PERIODIC_SEC_INT,
|
|
};
|
|
|
|
struct rtc_time_s {
|
|
uint32_t sec: 8; /* valid < SECS_PER_MIN */
|
|
uint32_t min: 8; /* valid < MINS_PER_HOUR */
|
|
uint32_t hour: 8; /* valid < HOURS_PER_DAY */
|
|
uint32_t weekday: 8; /* valid < DAYS_PER_WEEK */
|
|
};
|
|
|
|
struct rtc_date_s {
|
|
uint32_t date: 8; /* valid < MAX_DAYS_PER_MONTH */
|
|
uint32_t month: 8; /* valid < MONTH_PER_YEAR */
|
|
uint32_t year: 8; /* valid < YEARS_PER_CENTURY */
|
|
uint32_t century: 8; /* valid < CENTURY_PER_100? */
|
|
};
|
|
|
|
void rtc_init(struct rtc_time_s *time, struct rtc_date_s *date);
|
|
void rtc_current_time_info(void);
|
|
void rtc_get_date_time(struct rtc_date_s *date, struct rtc_time_s *time);
|
|
void rtc_get_date_time_in_secs(uint32_t *date_time_in_secs);
|
|
void rtc_periodic_enable(enum periodic_interrupt per_int_type);
|
|
void rtc_alarm_enable(enum alarm_type alm_type, void *param1, void *param2);
|
|
void rtc_alarm_disable(enum alarm_type alm_type);
|
|
|
|
#endif
|