a library to use DS1337 as RTC
Fork of DS1337 by
DS1337.h@0:129d962af46f, 2014-04-29 (annotated)
- Committer:
- lawliet
- Date:
- Tue Apr 29 12:58:07 2014 +0000
- Revision:
- 0:129d962af46f
Initial Version
Who changed what in which revision?
User | Revision | Line number | New 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 |