Wiblocks --- RTC

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   // EEPROM Registers
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; // pm is msb
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  doxygen 1.6.1