RTC/RTC.h
00001 #ifndef __RTC_H__
00002 #define __RTC_H__
00003
00004 #include <inttypes.h>
00005
00010
00011 #define RTC_REG_SECS 0x00
00012 #define RTC_REG_MINS 0x01
00013 #define RTC_REG_HOURS 0x02
00014 #define RTC_REG_DAYOFWEEK 0x03
00015 #define RTC_REG_DAY 0x04
00016 #define RTC_REG_MONTH 0x05
00017 #define RTC_REG_YEAR 0x06
00018
00022
00023 #define RTC_REG_A1SECS 0x07
00024 #define RTC_REG_A1MINS 0x08
00025 #define RTC_REG_A1HOURS 0x09
00026 #define RTC_REG_A1DOW 0x0A
00027 #define RTC_REG_A1DAY 0x0A
00028
00029 #define RTC_REG_A2MINS 0x0B
00030 #define RTC_REG_A2HOURS 0x0C
00031 #define RTC_REG_A2DOW 0x0D
00032 #define RTC_REG_A2DAY 0x0D
00033
00037
00038 #define RTC_REG_CONTROL 0x0E
00039 #define RTC_REG_STATUS 0x0F
00040
00041 #define RTC_LAST_REG RTC_REG_STATUS
00042
00046
00047 #define RTC_EOSC 0x80
00048 #define RTC_RS2 0x10
00049 #define RTC_RS1 0x08
00050 #define RTC_INTCN 0x04
00051 #define RTC_A2IE 0x02
00052 #define RTC_A1IE 0x01
00053
00057
00058 #define RTC_OSF 0x80
00059 #define RTC_A2F 0x02
00060 #define RTC_A1F 0x01
00061
00066
00067 #define RTC_ALARM1_MODE1 0x0F
00068 #define RTC_ALARM1_MODE2 0x0E
00069 #define RTC_ALARM1_MODE3 0x0C
00070 #define RTC_ALARM1_MODE4 0x08
00071 #define RTC_ALARM1_MODE5 0x00
00072 #define RTC_ALARM1_MODE6 0x10
00073
00077
00078 #define PM 1
00079 #define AM 0
00080
00081 class RTC {
00082 private:
00083
00084 union {
00085 struct {
00086 unsigned i2c_addr : 8;
00087
00088 unsigned secs : 4;
00089 unsigned secs_10 : 3;
00090 unsigned UNUSED_0 : 1;
00091
00092 unsigned mins : 4;
00093 unsigned mins_10 : 3;
00094 unsigned UNUSED_1 : 1;
00095
00096 unsigned hours : 4;
00097 unsigned hours_10 : 2;
00098 unsigned hour12 : 1;
00099 unsigned UNUSED_2 : 1;
00100
00101 unsigned dow : 3;
00102 unsigned UNUSED_3 : 5;
00103
00104 unsigned day : 4;
00105 unsigned day_10 : 2;
00106 unsigned UNUSED_4 : 2;
00107
00108 unsigned month : 4;
00109 unsigned month_10 : 1;
00110 unsigned century : 1;
00111 unsigned UNUSED_5 : 2;
00112
00113 unsigned year : 4;
00114 unsigned year_10 : 4;
00115
00116 unsigned a1_secs : 4;
00117 unsigned a1_secs_10 : 3;
00118 unsigned a1m1 : 1;
00119
00120 unsigned a1_mins : 4;
00121 unsigned a1_mins_10 : 3;
00122 unsigned a1m2 : 1;
00123
00124 unsigned a1_hours : 4;
00125 unsigned a1_hours_10 : 1;
00126 unsigned a1_pm : 1;
00127 unsigned a1_hour12 : 1;
00128 unsigned a1m3 : 1;
00129
00130 unsigned a1_day : 4;
00131 unsigned a1_day10 : 2;
00132 unsigned a1_dy : 1;
00133 unsigned a1m4 : 1;
00134
00135 unsigned a2_mins : 4;
00136 unsigned a2_mins_10 : 3;
00137 unsigned a2m2 : 1;
00138
00139 unsigned a2_hours : 4;
00140 unsigned a2_hours_10 : 1;
00141 unsigned a2_pm : 1;
00142 unsigned a2_hour12 : 1;
00143 unsigned a2m3 : 1;
00144
00145 unsigned a2_day : 4;
00146 unsigned a2_day_10 : 2;
00147 unsigned a2_dy : 1;
00148 unsigned a2m4 : 1;
00149
00150 unsigned a1ie : 1;
00151 unsigned a2ie : 1;
00152 unsigned intcn : 1;
00153 unsigned rs1 : 1;
00154 unsigned rs2 : 1;
00155 unsigned UNUSED_6 : 2;
00156 unsigned n_eosc : 1;
00157
00158 unsigned a1f : 1;
00159 unsigned a2f : 1;
00160 unsigned UNUSED_7 : 5;
00161 unsigned osf : 1;
00162
00163 } reg_bits;
00164 struct {
00165 unsigned char i2c_addr;
00166 unsigned char secs;
00167 unsigned char mins;
00168 unsigned char hours;
00169 unsigned char dayofweek;
00170 unsigned char day;
00171 unsigned char month;
00172 unsigned char year;
00173
00174 unsigned char a1_secs;
00175 unsigned char a1_mins;
00176 unsigned char a1_hours;
00177 unsigned char a1_day;
00178
00179 unsigned char a2_mins;
00180 unsigned char a2_hours;
00181 unsigned char a2_day;
00182
00183 unsigned char control;
00184 unsigned char status;
00185 } reg_bytes;
00186 unsigned char reg_array[16];
00187 } _regs;
00188 unsigned char _buf[16];
00189 public:
00190 static const unsigned char _i2c_rd_address = (0x68 << 1) | 0x01;
00191 static const unsigned char _i2c_wr_address = (0x68 << 1) | 0x00;
00192 RTC();
00193 char write_reg_ptr(unsigned char reg);
00194 char write_reg(unsigned char reg, unsigned char v);
00195 char write_regs(unsigned char reg, unsigned char *v, unsigned char n);
00196 unsigned char read_reg(unsigned char reg);
00197 char read_regs();
00198 unsigned char get_secs();
00199 unsigned char get_mins();
00200 unsigned char get_hours();
00201 unsigned char get_day();
00202 unsigned char get_month();
00203 unsigned int get_year();
00204 unsigned char set_year(unsigned int year);
00205 unsigned char set_month(unsigned char month);
00206 unsigned char set_day(unsigned char day);
00207 unsigned char set_date(unsigned int year, unsigned char month,
00208 unsigned char day);
00209 unsigned char set_secs(unsigned char secs);
00210 unsigned char set_mins(unsigned char mins);
00211 unsigned char set_hours12(unsigned char hours, unsigned char pm_p);
00212 unsigned char set_hours(unsigned char hours);
00213 unsigned char set_time(unsigned char hours, unsigned char mins,
00214 unsigned char secs);
00215 unsigned char set_time12(unsigned char hours, unsigned char mins,
00216 unsigned char secs, unsigned char pm_p);
00217 unsigned char set_alarm1(unsigned char mode, unsigned char day_or_dow,
00218 unsigned char hours, unsigned char mins,
00219 unsigned char secs);
00220 unsigned char enable_alarm1(void);
00221 unsigned char clear_alarm1(void);
00222 void localtime(char *str);
00223 unsigned char get_reg(unsigned char reg);
00224 };
00225
00226 #endif
Generated on Sun Dec 13 16:47:17 2009 by
1.6.1