00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef DS1305RTC_H
00012 #define DS1305RTC_H
00013 #define RTC
00014
00015 #include <GNU_defs.h>
00016 #include <arch/regdefs.h>
00017
00023
00024 #define WRITE_OFFSET 0x80
00025 enum registers { SEC,MIN,HOURS,DAY,DATE,MONTH,YEAR,
00026 SEC_ALARM0,MIN_ALARM0,HOUR_ALARM0,DAY_ALARM0,
00027 SEC_ALARM1,MIN_ALARM1,HOUR_ALARM1,DAY_ALARM1,
00028 CONTROL,STATUS,TRICKLE_CHARGER};
00029
00030
00031 #define EOSC 0x80
00032 #define WP 0x40
00033 #define INTCN 4
00034 #define AIE1 2
00035 #define AIE0 1
00036
00037 #define INT0 0x04
00038 #define INT1 0x08
00039
00040 #define RTC_CS_MASK 0x04
00041 #define RTC_CE_SETUP() DDRK|=RTC_CS_MASK
00042 #define RTC_CE_ON() PORTK|=RTC_CS_MASK
00043 #define RTC_CE_OFF() PORTK&=(~RTC_CS_MASK)
00044
00045
00048 typedef struct timestruct {
00049 int seconds;
00050 int minutes;
00051 int hours;
00052 int day;
00053 int date;
00054 int month;
00055 int year;
00056 }timestruct;
00057
00063 int __attribute__((far))RTC_Write_Register(int reg, u8 data);
00064
00069 u8 __attribute__((far))RTC_Read_Register(int reg);
00070
00077 int __attribute__((far))RTC_GetTime(timestruct *time);
00078
00087 int __attribute__((far))RTC_SetTime(timestruct *time);
00088
00089
00090 #define TIME2RTC(data) (((data/10)<<4)+(data%10))
00091 #define RTC2TIME(data) (((data>>4)*10)+(data&0x0f))
00092
00093 #define RTC_SECONDS RTC_Read_Register(SEC)
00094 #define RTC_MINUTES RTC_Read_Register(MIN)
00095 #define RTC_HOURS RTC_Read_Register(HOURS)
00096 #define RTC_DAY RTC_Read_Register(DAY)
00097 #define RTC_DATE RTC_Read_Register(DATE)
00098 #define RTC_MONTH RTC_Read_Register(MONTH)
00099 #define RTC_YEAR RTC_Read_Register(YEAR)
00100
00101
00102 #define RTC_SET_SECONDS(data) RTC_Write_Register(SEC,TIME2RTC(data))
00103 #define RTC_SET_MINUTES(data) RTC_Write_Register(MIN,TIME2RTC(data))
00104 #define RTC_SET_HOURS(data) RTC_Write_Register(HOURS,TIME2RTC(data))
00105 #define RTC_SET_DAY(data) RTC_Write_Register(DAY,TIME2RTC(data))
00106 #define RTC_SET_DATE(data) RTC_Write_Register(DATE,TIME2RTC(data))
00107 #define RTC_SET_MONTH(data) RTC_Write_Register(MONTH,TIME2RTC(data))
00108 #define RTC_SET_YEAR(data) RTC_Write_Register(YEAR,TIME2RTC(data))
00109
00112 #endif