2025-12-17 15:55:25 +08:00

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