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