a library to use DS1337 as RTC

Fork of DS1337 by wei zou

Committer:
lawliet
Date:
Tue Apr 29 12:58:07 2014 +0000
Revision:
0:129d962af46f
Initial Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lawliet 0:129d962af46f 1 /*
lawliet 0:129d962af46f 2 DS1337.h - library for DS1337 rtc
lawliet 0:129d962af46f 3 */
lawliet 0:129d962af46f 4
lawliet 0:129d962af46f 5 // ensure this library description is only included once
lawliet 0:129d962af46f 6 #ifndef DS1337_h
lawliet 0:129d962af46f 7 #define DS1337_h
lawliet 0:129d962af46f 8
lawliet 0:129d962af46f 9 // include types & constants of Wiring core API
lawliet 0:129d962af46f 10 #include "mbed.h"
lawliet 0:129d962af46f 11
lawliet 0:129d962af46f 12 typedef int8_t byte;
lawliet 0:129d962af46f 13 #define I2C_FREQ 100000
lawliet 0:129d962af46f 14 // indices within the rtc_bcd[] buffer
lawliet 0:129d962af46f 15 #define DS1337_SEC 0
lawliet 0:129d962af46f 16 #define DS1337_MIN 1
lawliet 0:129d962af46f 17 #define DS1337_HR 2
lawliet 0:129d962af46f 18 #define DS1337_DOW 3
lawliet 0:129d962af46f 19 #define DS1337_DATE 4
lawliet 0:129d962af46f 20 #define DS1337_MTH 5
lawliet 0:129d962af46f 21 #define DS1337_YR 6
lawliet 0:129d962af46f 22
lawliet 0:129d962af46f 23 #define DS1337_BASE_YR 2000
lawliet 0:129d962af46f 24
lawliet 0:129d962af46f 25 #define DS1337_CTRL_ID 0xD0
lawliet 0:129d962af46f 26
lawliet 0:129d962af46f 27
lawliet 0:129d962af46f 28
lawliet 0:129d962af46f 29 // Define register bit masks
lawliet 0:129d962af46f 30 #define DS1337_CLOCKHALT (1<<7)
lawliet 0:129d962af46f 31
lawliet 0:129d962af46f 32 #define DS1337_LO_BCD 0xf
lawliet 0:129d962af46f 33 #define DS1337_HI_BCD 0xf0
lawliet 0:129d962af46f 34
lawliet 0:129d962af46f 35 #define DS1337_HI_SEC 0x70
lawliet 0:129d962af46f 36 #define DS1337_HI_MIN 0x70
lawliet 0:129d962af46f 37 #define DS1337_HI_HR 0x30
lawliet 0:129d962af46f 38 #define DS1337_LO_DOW 0x07
lawliet 0:129d962af46f 39 #define DS1337_HI_DATE 0x30
lawliet 0:129d962af46f 40 #define DS1337_HI_MTH 0x30
lawliet 0:129d962af46f 41 #define DS1337_HI_YR 0xf0
lawliet 0:129d962af46f 42
lawliet 0:129d962af46f 43 #define DS1337_ARLM1 0x07
lawliet 0:129d962af46f 44 #define DS1337_ARLM1_LO_SEC 0xf
lawliet 0:129d962af46f 45 #define DS1337_ARLM1_HI_SEC 0x70
lawliet 0:129d962af46f 46 #define DS1337_ARLM1_LO_MIN 0x70
lawliet 0:129d962af46f 47 #define DS1337_ARLM1_HI_MIN 0xf
lawliet 0:129d962af46f 48
lawliet 0:129d962af46f 49 #define DS1337_SP 0x0E
lawliet 0:129d962af46f 50 #define DS1337_SP_EOSC (1<<7)
lawliet 0:129d962af46f 51 #define DS1337_SP_RS2 (1<<4)
lawliet 0:129d962af46f 52 #define DS1337_SP_RS1 (1<<3)
lawliet 0:129d962af46f 53 #define DS1337_SP_INTCN (1<<2)
lawliet 0:129d962af46f 54 #define DS1337_SP_A2IE (1<<1)
lawliet 0:129d962af46f 55 #define DS1337_SP_A1IE (1<<0)
lawliet 0:129d962af46f 56
lawliet 0:129d962af46f 57 #define DS1337_STATUS 0x0F
lawliet 0:129d962af46f 58 #define DS1337_STATUS_OSF (1<<7)
lawliet 0:129d962af46f 59 #define DS1337_STATUS_A2F (1<<1)
lawliet 0:129d962af46f 60 #define DS1337_STATUS_A1F (1<<0)
lawliet 0:129d962af46f 61
lawliet 0:129d962af46f 62 /* Definitions for alarm repeat */
lawliet 0:129d962af46f 63 /* The private variable alarm_repeat holds the user's alarm repeat preference. However, the DS1337 encodes these in the topmost bit(s) of the 4 alarm registers. */
lawliet 0:129d962af46f 64 /* Splattering these bits across the alarm regs is handled in the writeAlarm() function. */
lawliet 0:129d962af46f 65 /* If DY/DT is set, the day field is interpreted as a DayOfWeek (1 ~ 7), else it is interpreted as a DayOfMonth.*/
lawliet 0:129d962af46f 66
lawliet 0:129d962af46f 67 /* user alarm_repeat bit mask:
lawliet 0:129d962af46f 68 7 6 5 4 3 2 1 0
lawliet 0:129d962af46f 69 [x x x A1M4 DY/DT A1M3 A1M2 A1M1]
lawliet 0:129d962af46f 70 */
lawliet 0:129d962af46f 71
lawliet 0:129d962af46f 72 #define EVERY_SECOND B00010111
lawliet 0:129d962af46f 73 #define EVERY_MINUTE B00010110
lawliet 0:129d962af46f 74 #define EVERY_HOUR B00010100
lawliet 0:129d962af46f 75 #define EVERY_DAY B00010000
lawliet 0:129d962af46f 76 #define EVERY_WEEK B00001000
lawliet 0:129d962af46f 77 #define EVERY_MONTH B00000000
lawliet 0:129d962af46f 78
lawliet 0:129d962af46f 79
lawliet 0:129d962af46f 80 /* typedef struct {
lawliet 0:129d962af46f 81 unsigned int year;
lawliet 0:129d962af46f 82 unsigned char month;
lawliet 0:129d962af46f 83 unsigned char day;
lawliet 0:129d962af46f 84 unsigned char dayOfWeek;
lawliet 0:129d962af46f 85 unsigned char hour;
lawliet 0:129d962af46f 86 unsigned char minute;
lawliet 0:129d962af46f 87 unsigned char second;
lawliet 0:129d962af46f 88 } TIME; */
lawliet 0:129d962af46f 89
lawliet 0:129d962af46f 90
lawliet 0:129d962af46f 91 // library interface description
lawliet 0:129d962af46f 92 class DS1337 {
lawliet 0:129d962af46f 93 // user-accessible "public" interface
lawliet 0:129d962af46f 94 public:
lawliet 0:129d962af46f 95 DS1337::DS1337(PinName sda, PinName scl) : i2c(sda,scl) {
lawliet 0:129d962af46f 96 i2c.frequency(I2C_FREQ);
lawliet 0:129d962af46f 97 };
lawliet 0:129d962af46f 98 void readTime(void);
lawliet 0:129d962af46f 99 unsigned char getSeconds();
lawliet 0:129d962af46f 100 unsigned char getMinutes();
lawliet 0:129d962af46f 101 unsigned char getHours();
lawliet 0:129d962af46f 102 unsigned char getDays();
lawliet 0:129d962af46f 103 unsigned char getDayOfWeek();
lawliet 0:129d962af46f 104 unsigned char getMonths();
lawliet 0:129d962af46f 105 unsigned int getYears();
lawliet 0:129d962af46f 106
lawliet 0:129d962af46f 107 void setSeconds(unsigned char);
lawliet 0:129d962af46f 108 void setMinutes(unsigned char);
lawliet 0:129d962af46f 109 void setHours(unsigned char);
lawliet 0:129d962af46f 110 void setDays(unsigned char);
lawliet 0:129d962af46f 111 void setDayOfWeek(unsigned char);
lawliet 0:129d962af46f 112 void setMonths(unsigned char);
lawliet 0:129d962af46f 113 void setYears(unsigned int);
lawliet 0:129d962af46f 114
lawliet 0:129d962af46f 115 void setTime();
lawliet 0:129d962af46f 116
lawliet 0:129d962af46f 117
lawliet 0:129d962af46f 118 void start(void);
lawliet 0:129d962af46f 119 void stop(void);
lawliet 0:129d962af46f 120 unsigned char getRegister(unsigned char registerNumber);
lawliet 0:129d962af46f 121 void setRegister(unsigned char registerNumber, unsigned char registerValue);
lawliet 0:129d962af46f 122 //void unsetRegister(unsigned char registerNumber, unsigned char registerMask);
lawliet 0:129d962af46f 123
lawliet 0:129d962af46f 124 // library-accessible "private" interface
lawliet 0:129d962af46f 125 private:
lawliet 0:129d962af46f 126 I2C i2c;
lawliet 0:129d962af46f 127 byte time_set;
lawliet 0:129d962af46f 128 byte alarm_repeat;
lawliet 0:129d962af46f 129 byte rtc_bcd[7]; // used prior to read/set DS1337 registers;
lawliet 0:129d962af46f 130 void read(void);
lawliet 0:129d962af46f 131 void save(void);
lawliet 0:129d962af46f 132 byte bcd2bin(byte);
lawliet 0:129d962af46f 133 byte bin2bcd(byte);
lawliet 0:129d962af46f 134 };
lawliet 0:129d962af46f 135
lawliet 0:129d962af46f 136 //extern DS1337 RTC_DS1337(P0_5,P0_4);
lawliet 0:129d962af46f 137
lawliet 0:129d962af46f 138 #endif