PASII/CandeII_1.4/Include/rtc.h

74 lines
1.9 KiB
C
Raw Normal View History

#ifndef _RTC_H_
#define _RTC_H_
#include "ARMCM0.h"
#define RTC_CLK 32768UL //<2F><><EFBFBD><EFBFBD>ֵ
#define ALARM_0 0
#define ALARM_1 1
typedef enum {
RTC_TICK_PRESCALER_1 = RTC_CLK/32768,
RTC_TICK_PRESCALER_2 = RTC_CLK/16384,
RTC_TICK_PRESCALER_4 = RTC_CLK/8192,
RTC_TICK_PRESCALER_8 = RTC_CLK/4096,
RTC_TICK_PRESCALER_16 = RTC_CLK/2048,
RTC_TICK_PRESCALER_32 = RTC_CLK/1024,
RTC_TICK_PRESCALER_64 = RTC_CLK/512,
RTC_TICK_PRESCALER_128 = RTC_CLK/256,
RTC_TICK_PRESCALER_256 = RTC_CLK/128,
RTC_TICK_PRESCALER_512 = RTC_CLK/64,
RTC_TICK_PRESCALER_1024 = RTC_CLK/32,
RTC_TICK_PRESCALER_2048 = RTC_CLK/16,
RTC_TICK_PRESCALER_4096 = RTC_CLK/8,
RTC_TICK_PRESCALER_8192 = RTC_CLK/4,
RTC_TICK_PRESCALER_16384 = RTC_CLK/2,
RTC_TICK_PRESCALER_32768 = RTC_CLK/1
} RTC_TICK_PRESCALER;
typedef enum {
RTC_INT_ALARM0 = 0x01,
RTC_INT_ALARM1 = 0x02,
RTC_INT_TICK = 0x04,
RTC_INT_SECOND = 0x08,
RTC_INT_ALL = 0x0F
} RTC_INT_TYPE;
typedef void (* RTC_IRQ_CALLBACK) (RTC_INT_TYPE type);
extern RTC_IRQ_CALLBACK irq_cb;
#pragma pack(push, 1)
typedef union {
struct {
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t week;
} decimal_format;
uint8_t u8[4];
uint32_t u32;
} RTC_TIME_TYPE;
#pragma pack(pop)
void rtc_int_clear(RTC_INT_TYPE type);
void rtc_int_enable(RTC_INT_TYPE type);
void rtc_int_disable(RTC_INT_TYPE type);
void rtc_start(void);
void rtc_stop(void);
bool rtc_status(void);
void rtc_clear(void);
void rtc_set_prescaler(uint32_t tick, uint8_t adjust_seconds_bit);
RTC_TIME_TYPE rtc_get_alarm(int id);
void rtc_set_alarm(int id, RTC_TIME_TYPE *time);
void rtc_delete_alarm(int id);
void rtc_set_calendar(RTC_TIME_TYPE *time);
RTC_TIME_TYPE rtc_get_calendar(void);
void rtc_init(uint32_t tick, uint8_t adjust_seconds_bit, RTC_IRQ_CALLBACK call_back);
#endif //_RTC_H_