User | Revision | Line number | New contents of line |
mcm |
1:8ac54576db6d
|
1
|
/**
|
mcm |
1:8ac54576db6d
|
2
|
* @brief DS3231.h
|
mcm |
1:8ac54576db6d
|
3
|
* @details Extremely Accurate I2C-Integrated RTC/TCXO/Crystal.
|
mcm |
1:8ac54576db6d
|
4
|
* Header file.
|
mcm |
1:8ac54576db6d
|
5
|
*
|
mcm |
1:8ac54576db6d
|
6
|
*
|
mcm |
1:8ac54576db6d
|
7
|
* @return NA
|
mcm |
1:8ac54576db6d
|
8
|
*
|
mcm |
1:8ac54576db6d
|
9
|
* @author Manuel Caballero
|
mcm |
1:8ac54576db6d
|
10
|
* @date 20/December/2017
|
mcm |
1:8ac54576db6d
|
11
|
* @version 20/December/2017 The ORIGIN
|
mcm |
1:8ac54576db6d
|
12
|
* @pre NaN.
|
mcm |
1:8ac54576db6d
|
13
|
* @warning NaN
|
mcm |
1:8ac54576db6d
|
14
|
* @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
|
mcm |
1:8ac54576db6d
|
15
|
*/
|
mcm |
1:8ac54576db6d
|
16
|
#ifndef DS3231_H
|
mcm |
1:8ac54576db6d
|
17
|
#define DS3231_H
|
mcm |
1:8ac54576db6d
|
18
|
|
mcm |
1:8ac54576db6d
|
19
|
#include "mbed.h"
|
mcm |
1:8ac54576db6d
|
20
|
|
mcm |
1:8ac54576db6d
|
21
|
|
mcm |
1:8ac54576db6d
|
22
|
/**
|
mcm |
1:8ac54576db6d
|
23
|
Example:
|
mcm |
1:8ac54576db6d
|
24
|
|
mcm |
1:8ac54576db6d
|
25
|
[todo]
|
mcm |
1:8ac54576db6d
|
26
|
|
mcm |
1:8ac54576db6d
|
27
|
*/
|
mcm |
1:8ac54576db6d
|
28
|
|
mcm |
1:8ac54576db6d
|
29
|
|
mcm |
1:8ac54576db6d
|
30
|
/*!
|
mcm |
1:8ac54576db6d
|
31
|
Library for the DS3231 Extremely Accurate I2C-Integrated RTC/TCXO/Crystal.
|
mcm |
1:8ac54576db6d
|
32
|
*/
|
mcm |
1:8ac54576db6d
|
33
|
class DS3231
|
mcm |
1:8ac54576db6d
|
34
|
{
|
mcm |
1:8ac54576db6d
|
35
|
public:
|
mcm |
1:8ac54576db6d
|
36
|
/**
|
mcm |
1:8ac54576db6d
|
37
|
* @brief DEFAULT ADDRESSES
|
mcm |
1:8ac54576db6d
|
38
|
*/
|
mcm |
1:8ac54576db6d
|
39
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
40
|
DS3231_ADDRESS = ( 0x68 << 1 ) /*!< DS3231 I2C Address */
|
mcm |
1:8ac54576db6d
|
41
|
} DS3231_address_t;
|
mcm |
1:8ac54576db6d
|
42
|
|
mcm |
1:8ac54576db6d
|
43
|
|
mcm |
1:8ac54576db6d
|
44
|
// REGISTERS
|
mcm |
1:8ac54576db6d
|
45
|
/**
|
mcm |
1:8ac54576db6d
|
46
|
* @brief TIMEKEEPING REGISTERS
|
mcm |
1:8ac54576db6d
|
47
|
*/
|
mcm |
1:8ac54576db6d
|
48
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
49
|
DS3231_SECONDS = 0x00, /*!< Seconds. RANGE 00-59 */
|
mcm |
1:8ac54576db6d
|
50
|
DS3231_MINUTES = 0x01, /*!< Minutes. RANGE 00-59 */
|
mcm |
1:8ac54576db6d
|
51
|
DS3231_HOURS = 0x02, /*!< Hours. 1-12 + AM/PM 00-23 */
|
mcm |
1:8ac54576db6d
|
52
|
DS3231_DAY = 0x03, /*!< Day. 1-7 */
|
mcm |
1:8ac54576db6d
|
53
|
DS3231_DATE = 0x04, /*!< Date. 01-31 */
|
mcm |
1:8ac54576db6d
|
54
|
DS3231_MONTH_CENTURY = 0x05, /*!< Month/Century. 01-12 + Century */
|
mcm |
1:8ac54576db6d
|
55
|
DS3231_YEAR = 0x06, /*!< Year. 00-99 */
|
mcm |
1:8ac54576db6d
|
56
|
DS3231_ALARM_1_SECONDS = 0x07, /*!< Alarm 1 seconds. 00-59 */
|
mcm |
1:8ac54576db6d
|
57
|
DS3231_ALARM_1_MINUTES = 0x08, /*!< Alarm 1 minutes. 00-59 */
|
mcm |
1:8ac54576db6d
|
58
|
DS3231_ALARM_1_HOURS = 0x09, /*!< Alarm 1 hours. 1-12 + AM/PM 00-23 */
|
mcm |
1:8ac54576db6d
|
59
|
DS3231_ALARM_1_DAY_DATE = 0x0A, /*!< Alarm 1 day/date. 1-7/1-31 */
|
mcm |
1:8ac54576db6d
|
60
|
DS3231_ALARM_2_MINUTES = 0x0B, /*!< Alarm 2 minutes. 00-59 */
|
mcm |
1:8ac54576db6d
|
61
|
DS3231_ALARM_2_HOURS = 0x0C, /*!< Alarm 2 hours. 1-12 + AM/PM 00-23 */
|
mcm |
1:8ac54576db6d
|
62
|
DS3231_ALARM_2_DAY_DATE = 0x0D, /*!< Alarm 2 day/date. 1-7/1-31 */
|
mcm |
1:8ac54576db6d
|
63
|
DS3231_CONTROL = 0x0E, /*!< Control */
|
mcm |
1:8ac54576db6d
|
64
|
DS3231_CONTROL_STATUS = 0x0F, /*!< Control/Status */
|
mcm |
1:8ac54576db6d
|
65
|
DS3231_AGING_OFFSET = 0x10, /*!< Aging offset */
|
mcm |
1:8ac54576db6d
|
66
|
DS3231_MSB_TEMPERATURE = 0x11, /*!< MSB of Temp */
|
mcm |
1:8ac54576db6d
|
67
|
DS3231_LSB_TEMPERATURE = 0x12 /*!< LSB of Temp */
|
mcm |
1:8ac54576db6d
|
68
|
} DS3231_registers_t;
|
mcm |
1:8ac54576db6d
|
69
|
|
mcm |
1:8ac54576db6d
|
70
|
|
mcm |
1:8ac54576db6d
|
71
|
|
mcm |
1:8ac54576db6d
|
72
|
// CONTROL REGISTER
|
mcm |
1:8ac54576db6d
|
73
|
/**
|
mcm |
1:8ac54576db6d
|
74
|
* @brief Enable Oscillator ( #EOSC )
|
mcm |
1:8ac54576db6d
|
75
|
*/
|
mcm |
1:8ac54576db6d
|
76
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
77
|
CONTROL_STATUS_ENABLE_OSCILLATOR_MASK = ( 1 << 7 ), /*!< #EOSC Mask */
|
mcm |
1:8ac54576db6d
|
78
|
CONTROL_STATUS_ENABLE_OSCILLATOR_ENABLED = ( 1 << 7 ), /*!< Enable oscillator */
|
mcm |
1:8ac54576db6d
|
79
|
CONTROL_STATUS_ENABLE_OSCILLATOR_DISABLED = ( 0 << 7 ) /*!< Disable oscillator */
|
mcm |
1:8ac54576db6d
|
80
|
} DS3231_control_status_enable_oscillator_t;
|
mcm |
1:8ac54576db6d
|
81
|
|
mcm |
1:8ac54576db6d
|
82
|
|
mcm |
1:8ac54576db6d
|
83
|
/**
|
mcm |
1:8ac54576db6d
|
84
|
* @brief Battery-Backed Square-Wave Enable ( BBSQW )
|
mcm |
1:8ac54576db6d
|
85
|
*/
|
mcm |
1:8ac54576db6d
|
86
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
87
|
CONTROL_STATUS_BBSQW_MASK = ( 1 << 6 ), /*!< BBSQW Mask */
|
mcm |
1:8ac54576db6d
|
88
|
CONTROL_STATUS_BBSQW_ENABLED = ( 1 << 6 ), /*!< Enable BBSQW */
|
mcm |
1:8ac54576db6d
|
89
|
CONTROL_STATUS_BBSQW_DISABLED = ( 0 << 6 ) /*!< Disable BBSQW */
|
mcm |
1:8ac54576db6d
|
90
|
} DS3231_control_status_bbsqw_t;
|
mcm |
1:8ac54576db6d
|
91
|
|
mcm |
1:8ac54576db6d
|
92
|
|
mcm |
1:8ac54576db6d
|
93
|
/**
|
mcm |
1:8ac54576db6d
|
94
|
* @brief Convert Temperature ( CONV )
|
mcm |
1:8ac54576db6d
|
95
|
*/
|
mcm |
1:8ac54576db6d
|
96
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
97
|
CONTROL_STATUS_CONVERT_TEMPERATURE_MASK = ( 1 << 5 ), /*!< CONVERT TEMPERATURE Mask */
|
mcm |
1:8ac54576db6d
|
98
|
CONTROL_STATUS_CONVERT_TEMPERATURE_ENABLED = ( 1 << 5 ), /*!< Enable CONVERT_TEMPERATURE */
|
mcm |
1:8ac54576db6d
|
99
|
CONTROL_STATUS_CONVERT_TEMPERATURE_DISABLED = ( 0 << 5 ) /*!< Disable CONVERT_TEMPERATURE */
|
mcm |
1:8ac54576db6d
|
100
|
} DS3231_control_status_convert_temperature_t;
|
mcm |
1:8ac54576db6d
|
101
|
|
mcm |
1:8ac54576db6d
|
102
|
|
mcm |
1:8ac54576db6d
|
103
|
/**
|
mcm |
1:8ac54576db6d
|
104
|
* @brief Rate Select ( RS2 and RS1 )
|
mcm |
1:8ac54576db6d
|
105
|
*/
|
mcm |
1:8ac54576db6d
|
106
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
107
|
CONTROL_STATUS_RATE_SELECT_MASK = ( 3 << 3 ), /*!< Rate select Mask */
|
mcm |
1:8ac54576db6d
|
108
|
CONTROL_STATUS_RATE_SELECT_1_HZ = ( 0 << 3 ), /*!< Rate select 1 Hz */
|
mcm |
1:8ac54576db6d
|
109
|
CONTROL_STATUS_RATE_SELECT_1_024_KHZ = ( 1 << 3 ), /*!< Rate select 1.024 kHz */
|
mcm |
1:8ac54576db6d
|
110
|
CONTROL_STATUS_RATE_SELECT_4_096_KHZ = ( 2 << 3 ), /*!< Rate select 4.096 kHz */
|
mcm |
1:8ac54576db6d
|
111
|
CONTROL_STATUS_RATE_SELECT_8_192_KHZ = ( 3 << 3 ) /*!< Rate select 8.192 kHz */
|
mcm |
1:8ac54576db6d
|
112
|
} DS3231_control_status_rate_select_t;
|
mcm |
1:8ac54576db6d
|
113
|
|
mcm |
1:8ac54576db6d
|
114
|
|
mcm |
1:8ac54576db6d
|
115
|
/**
|
mcm |
1:8ac54576db6d
|
116
|
* @brief Interrupt Control ( INTCN )
|
mcm |
1:8ac54576db6d
|
117
|
*/
|
mcm |
1:8ac54576db6d
|
118
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
119
|
CONTROL_STATUS_INTERRUPT_CONTROL_MASK = ( 1 << 2 ), /*!< Interrupt control Mask */
|
mcm |
1:8ac54576db6d
|
120
|
CONTROL_STATUS_INTERRUPT_CONTROL_SQW = ( 0 << 2 ), /*!< Square wave is output */
|
mcm |
1:8ac54576db6d
|
121
|
CONTROL_STATUS_INTERRUPT_CONTROL_INT = ( 1 << 2 ) /*!< Alarm activates the output */
|
mcm |
1:8ac54576db6d
|
122
|
} DS3231_control_status_interrupt_control_t;
|
mcm |
1:8ac54576db6d
|
123
|
|
mcm |
1:8ac54576db6d
|
124
|
|
mcm |
1:8ac54576db6d
|
125
|
/**
|
mcm |
1:8ac54576db6d
|
126
|
* @brief Alarm 2 Interrupt Enable ( A2IE )
|
mcm |
1:8ac54576db6d
|
127
|
*/
|
mcm |
1:8ac54576db6d
|
128
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
129
|
CONTROL_STATUS_ALARM2_MASK = ( 1 << 1 ), /*!< Alarm 2 Mask */
|
mcm |
1:8ac54576db6d
|
130
|
CONTROL_STATUS_ALARM2_ENABLED = ( 1 << 1 ), /*!< Alarm 2 enabled */
|
mcm |
1:8ac54576db6d
|
131
|
CONTROL_STATUS_ALARM2_DISABLED = ( 0 << 1 ) /*!< Alarm 2 disabled */
|
mcm |
1:8ac54576db6d
|
132
|
} DS3231_control_status_alarm2_t;
|
mcm |
1:8ac54576db6d
|
133
|
|
mcm |
1:8ac54576db6d
|
134
|
|
mcm |
1:8ac54576db6d
|
135
|
/**
|
mcm |
1:8ac54576db6d
|
136
|
* @brief Alarm 1 Interrupt Enable ( A1IE )
|
mcm |
1:8ac54576db6d
|
137
|
*/
|
mcm |
1:8ac54576db6d
|
138
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
139
|
CONTROL_STATUS_ALARM1_MASK = ( 1 << 0 ), /*!< Alarm 1 Mask */
|
mcm |
1:8ac54576db6d
|
140
|
CONTROL_STATUS_ALARM1_ENABLED = ( 1 << 0 ), /*!< Alarm 1 enabled */
|
mcm |
1:8ac54576db6d
|
141
|
CONTROL_STATUS_ALARM1_DISABLED = ( 0 << 0 ) /*!< Alarm 1 disabled */
|
mcm |
1:8ac54576db6d
|
142
|
} DS3231_control_status_alarm1_t;
|
mcm |
1:8ac54576db6d
|
143
|
|
mcm |
1:8ac54576db6d
|
144
|
|
mcm |
1:8ac54576db6d
|
145
|
|
mcm |
1:8ac54576db6d
|
146
|
// STATUS REGISTER
|
mcm |
1:8ac54576db6d
|
147
|
/**
|
mcm |
1:8ac54576db6d
|
148
|
* @brief Oscillator Stop Flag ( OSF )
|
mcm |
1:8ac54576db6d
|
149
|
*/
|
mcm |
1:8ac54576db6d
|
150
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
151
|
STATUS_OSCILLATOR_STOP_FLAG_MASK = ( 1 << 7 ), /*!< OSF Mask */
|
mcm |
1:8ac54576db6d
|
152
|
STATUS_OSCILLATOR_STOP_FLAG_ENABLED = ( 1 << 7 ), /*!< Flag ON */
|
mcm |
1:8ac54576db6d
|
153
|
STATUS_OSCILLATOR_STOP_FLAG_DISABLED = ( 0 << 7 ), /*!< Flag OFF */
|
mcm |
1:8ac54576db6d
|
154
|
STATUS_OSCILLATOR_STOP_FLAG_RESET = ( 0 << 7 ) /*!< Reset flag */
|
mcm |
1:8ac54576db6d
|
155
|
} DS3231_status_oscillator_stop_flag_t;
|
mcm |
1:8ac54576db6d
|
156
|
|
mcm |
1:8ac54576db6d
|
157
|
|
mcm |
1:8ac54576db6d
|
158
|
/**
|
mcm |
1:8ac54576db6d
|
159
|
* @brief Enable 32kHz Output ( EN32kHz )
|
mcm |
1:8ac54576db6d
|
160
|
*/
|
mcm |
1:8ac54576db6d
|
161
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
162
|
STATUS_ENABLE_32KHZ_OUTPUT_MASK = ( 1 << 3 ), /*!< 32kHz output mask */
|
mcm |
1:8ac54576db6d
|
163
|
STATUS_ENABLE_32KHZ_OUTPUT_ENABLED = ( 1 << 3 ), /*!< 32kHz output on 32kHz pin */
|
mcm |
1:8ac54576db6d
|
164
|
STATUS_ENABLE_32KHZ_OUTPUT_DISABLED = ( 0 << 3 ) /*!< 32kHz output disabled */
|
mcm |
1:8ac54576db6d
|
165
|
} DS3231_status_enable_32khz_output_t;
|
mcm |
1:8ac54576db6d
|
166
|
|
mcm |
1:8ac54576db6d
|
167
|
|
mcm |
1:8ac54576db6d
|
168
|
/**
|
mcm |
1:8ac54576db6d
|
169
|
* @brief Busy ( BSY )
|
mcm |
1:8ac54576db6d
|
170
|
*/
|
mcm |
1:8ac54576db6d
|
171
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
172
|
STATUS_BUSY_MASK = ( 1 << 2 ), /*!< BSY mask */
|
mcm |
1:8ac54576db6d
|
173
|
STATUS_BUSY_BUSY = ( 1 << 2 ), /*!< device busy executing TCXO functions */
|
mcm |
1:8ac54576db6d
|
174
|
STATUS_BUSY_NOBUSY = ( 0 << 2 ) /*!< device IS NOT busy */
|
mcm |
1:8ac54576db6d
|
175
|
} DS3231_status_busy_t;
|
mcm |
1:8ac54576db6d
|
176
|
|
mcm |
1:8ac54576db6d
|
177
|
|
mcm |
1:8ac54576db6d
|
178
|
/**
|
mcm |
1:8ac54576db6d
|
179
|
* @brief Alarm 2 Flag ( A2F )
|
mcm |
1:8ac54576db6d
|
180
|
*/
|
mcm |
1:8ac54576db6d
|
181
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
182
|
STATUS_ALARM2_FLAG_MASK = ( 1 << 1 ), /*!< Alarm 2 flag mask */
|
mcm |
1:8ac54576db6d
|
183
|
STATUS_ALARM2_FLAG_ENABLED = ( 1 << 1 ), /*!< Alarm 2 flag enabled */
|
mcm |
1:8ac54576db6d
|
184
|
STATUS_ALARM2_FLAG_DISABLED = ( 0 << 1 ), /*!< Alarm 2 flag disabled */
|
mcm |
1:8ac54576db6d
|
185
|
STATUS_ALARM2_FLAG_RESET = ( 0 << 1 ), /*!< Alarm 2 flag reset flag */
|
mcm |
1:8ac54576db6d
|
186
|
} DS3231_status_alarm2_flag_t;
|
mcm |
1:8ac54576db6d
|
187
|
|
mcm |
1:8ac54576db6d
|
188
|
|
mcm |
1:8ac54576db6d
|
189
|
|
mcm |
1:8ac54576db6d
|
190
|
/**
|
mcm |
1:8ac54576db6d
|
191
|
* @brief Alarm 1 Flag ( A1F )
|
mcm |
1:8ac54576db6d
|
192
|
*/
|
mcm |
1:8ac54576db6d
|
193
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
194
|
STATUS_ALARM1_FLAG_MASK = ( 1 << 0 ), /*!< Alarm 1 flag mask */
|
mcm |
1:8ac54576db6d
|
195
|
STATUS_ALARM1_FLAG_ENABLED = ( 1 << 0 ), /*!< Alarm 1 flag enabled */
|
mcm |
1:8ac54576db6d
|
196
|
STATUS_ALARM1_FLAG_DISABLED = ( 0 << 0 ), /*!< Alarm 1 flag disabled */
|
mcm |
1:8ac54576db6d
|
197
|
STATUS_ALARM1_FLAG_RESET = ( 0 << 0 ), /*!< Alarm 1 flag reset flag */
|
mcm |
1:8ac54576db6d
|
198
|
} DS3231_status_alarm1_flag_t;
|
mcm |
1:8ac54576db6d
|
199
|
|
mcm |
1:8ac54576db6d
|
200
|
|
mcm |
1:8ac54576db6d
|
201
|
|
mcm |
1:8ac54576db6d
|
202
|
// ALARMS
|
mcm |
1:8ac54576db6d
|
203
|
/**
|
mcm |
1:8ac54576db6d
|
204
|
* @brief Alarm 1 Mask Bits
|
mcm |
1:8ac54576db6d
|
205
|
*/
|
mcm |
1:8ac54576db6d
|
206
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
207
|
ALARM1_ALARM_ONCE_PER_SECOND = 1, /*!< Alarm 1 once per second */
|
mcm |
1:8ac54576db6d
|
208
|
ALARM1_WHEN_SECONDS_MATCH = 2, /*!< Alarm 1 when seconds match */
|
mcm |
1:8ac54576db6d
|
209
|
ALARM1_WHEN_MINUTES_AND_SECONDS_MATCH = 3, /*!< Alarm 1 when minutes and seconds match */
|
mcm |
1:8ac54576db6d
|
210
|
ALARM1_WHEN_HOURS_MINUTES_AND_SECONDS_MATCH = 4, /*!< Alarm 1 when hours, minutes, and seconds match */
|
mcm |
1:8ac54576db6d
|
211
|
ALARM1_WHEN_DATE_HOURS_MINUTES_AND_SECONDS_MATCH = 5, /*!< Alarm 1 when date, hours, minutes, and seconds match */
|
mcm |
1:8ac54576db6d
|
212
|
ALARM1_WHEN_DAY_HOURS_MINUTES_AND_SECONDS_MATCH = 6 /*!< Alarm 1 when day, hours, minutes, and seconds match */
|
mcm |
1:8ac54576db6d
|
213
|
} DS3231_alarm1_register_t;
|
mcm |
1:8ac54576db6d
|
214
|
|
mcm |
1:8ac54576db6d
|
215
|
|
mcm |
1:8ac54576db6d
|
216
|
/**
|
mcm |
1:8ac54576db6d
|
217
|
* @brief Alarm 2 Mask Bits
|
mcm |
1:8ac54576db6d
|
218
|
*/
|
mcm |
1:8ac54576db6d
|
219
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
220
|
ALARM2_ALARM_ONCE_PER_MINUTE = 1, /*!< Alarm 2 once per minute */
|
mcm |
1:8ac54576db6d
|
221
|
ALARM2_WHEN_MINUTES_MATCH = 2, /*!< Alarm 2 when minutes match */
|
mcm |
1:8ac54576db6d
|
222
|
ALARM2_WHEN_HOURS_MINUTES_MATCH = 3, /*!< Alarm 2 when hours and minutes match */
|
mcm |
1:8ac54576db6d
|
223
|
ALARM2_WHEN_DATE_HOURS_AND_MINUTES_MATCH = 4, /*!< Alarm 2 when date, hours and minutes match */
|
mcm |
1:8ac54576db6d
|
224
|
ALARM2_WHEN_DAY_HOURS_AND_MINUTES_MATCH = 5 /*!< Alarm 2 when day, hours and minutes match */
|
mcm |
1:8ac54576db6d
|
225
|
} DS3231_alarm2_register_t;
|
mcm |
1:8ac54576db6d
|
226
|
|
mcm |
1:8ac54576db6d
|
227
|
|
mcm |
1:8ac54576db6d
|
228
|
// TIMEKEEPING REGISTERS
|
mcm |
1:8ac54576db6d
|
229
|
// SECONDS
|
mcm |
1:8ac54576db6d
|
230
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
231
|
SECONDS_SECONDS_MASK = 0x0F, /*!< Seconds Seconds mask */
|
mcm |
1:8ac54576db6d
|
232
|
SECONDS_10SECONDS_MASK = 0x70 /*!< Seconds 10Seconds mask */
|
mcm |
1:8ac54576db6d
|
233
|
} DS3231_seconds_t;
|
mcm |
1:8ac54576db6d
|
234
|
|
mcm |
1:8ac54576db6d
|
235
|
|
mcm |
1:8ac54576db6d
|
236
|
// MINUTES
|
mcm |
1:8ac54576db6d
|
237
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
238
|
MINUTES_MINUTES_MASK = 0x0F, /*!< Minutes Minutes mask */
|
mcm |
1:8ac54576db6d
|
239
|
MINUTES_10MINUTES_MASK = 0x70 /*!< Minutes 10Minutes mask */
|
mcm |
1:8ac54576db6d
|
240
|
} DS3231_minutes_t;
|
mcm |
1:8ac54576db6d
|
241
|
|
mcm |
1:8ac54576db6d
|
242
|
|
mcm |
1:8ac54576db6d
|
243
|
// HOURS
|
mcm |
1:8ac54576db6d
|
244
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
245
|
HOURS_HOUR_MASK = 0x0F, /*!< Hour Hour mask */
|
mcm |
1:8ac54576db6d
|
246
|
HOURS_10HOUR_MASK = 0x10, /*!< Hour 10Hour mask */
|
mcm |
1:8ac54576db6d
|
247
|
|
mcm |
1:8ac54576db6d
|
248
|
HOURS_nAM_PM_MASK = 0x20, /*!< Hour #AM/PM mask */
|
mcm |
1:8ac54576db6d
|
249
|
HOURS_AM_ENABLED = ( 0 << 5 ), /*!< Hour AM ENABLED */
|
mcm |
1:8ac54576db6d
|
250
|
HOURS_PM_ENABLED = ( 1 << 5 ), /*!< Hour PM ENABLED */
|
mcm |
1:8ac54576db6d
|
251
|
|
mcm |
1:8ac54576db6d
|
252
|
HOURS_12_n24_MASK = 0x40, /*!< Hour 12/#24 mask */
|
mcm |
1:8ac54576db6d
|
253
|
HOURS_12_ENABLED = ( 1 << 6 ), /*!< Hour 12 ENABLED */
|
mcm |
1:8ac54576db6d
|
254
|
HOURS_24_ENABLED = ( 0 << 6 ), /*!< Hour 24 ENABLED */
|
mcm |
1:8ac54576db6d
|
255
|
} DS3231_hours_t;
|
mcm |
1:8ac54576db6d
|
256
|
|
mcm |
1:8ac54576db6d
|
257
|
|
mcm |
1:8ac54576db6d
|
258
|
// DAY
|
mcm |
1:8ac54576db6d
|
259
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
260
|
DAY_DAY_MASK = 0x07 /*!< Day Day mask */
|
mcm |
1:8ac54576db6d
|
261
|
} DS3231_day_t;
|
mcm |
1:8ac54576db6d
|
262
|
|
mcm |
1:8ac54576db6d
|
263
|
|
mcm |
1:8ac54576db6d
|
264
|
// DATE
|
mcm |
1:8ac54576db6d
|
265
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
266
|
DATE_DATE_MASK = 0x0F, /*!< Date Date mask */
|
mcm |
1:8ac54576db6d
|
267
|
DATE_10DATE_MASK = 0x30 /*!< Date 10Date mask */
|
mcm |
1:8ac54576db6d
|
268
|
} DS3231_date_t;
|
mcm |
1:8ac54576db6d
|
269
|
|
mcm |
1:8ac54576db6d
|
270
|
|
mcm |
1:8ac54576db6d
|
271
|
// MONTH/CENTURY
|
mcm |
1:8ac54576db6d
|
272
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
273
|
MONTH_MONTH_MASK = 0x0F, /*!< Month Month mask */
|
mcm |
1:8ac54576db6d
|
274
|
MONTH_10MONTH_MASK = 0x10, /*!< Month 10Month mask */
|
mcm |
1:8ac54576db6d
|
275
|
MONTH_CENTURY_MASK = 0x80 /*!< Month Century mask */
|
mcm |
1:8ac54576db6d
|
276
|
} DS3231_month_t;
|
mcm |
1:8ac54576db6d
|
277
|
|
mcm |
1:8ac54576db6d
|
278
|
|
mcm |
1:8ac54576db6d
|
279
|
// YEAR
|
mcm |
1:8ac54576db6d
|
280
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
281
|
YEAR_YEAR_MASK = 0x0F, /*!< Year Year mask */
|
mcm |
1:8ac54576db6d
|
282
|
YEAR_10YEAR_MASK = 0xF0 /*!< Year 10Year mask */
|
mcm |
1:8ac54576db6d
|
283
|
} DS3231_year_t;
|
mcm |
1:8ac54576db6d
|
284
|
|
mcm |
1:8ac54576db6d
|
285
|
|
mcm |
1:8ac54576db6d
|
286
|
// ALARM 1 SECONDS
|
mcm |
1:8ac54576db6d
|
287
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
288
|
ALARM1_A1M1_MASK = 0x80, /*!< Alarm1 A1M1 mask */
|
mcm |
1:8ac54576db6d
|
289
|
ALARM1_10SECONDS_MASK = 0x70, /*!< Alarm1 10Seconds mask */
|
mcm |
1:8ac54576db6d
|
290
|
ALARM1_SECONDS_MASK = 0x0F /*!< Alarm1 Seconds mask */
|
mcm |
1:8ac54576db6d
|
291
|
} DS3231_alarm1_seconds_t;
|
mcm |
1:8ac54576db6d
|
292
|
|
mcm |
1:8ac54576db6d
|
293
|
|
mcm |
1:8ac54576db6d
|
294
|
// ALARM 1 MINUTES
|
mcm |
1:8ac54576db6d
|
295
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
296
|
ALARM1_A1M2_MASK = 0x80, /*!< Alarm1 A1M2 mask */
|
mcm |
1:8ac54576db6d
|
297
|
ALARM1_10MINUTES_MASK = 0x70, /*!< Alarm1 10Minutes mask */
|
mcm |
1:8ac54576db6d
|
298
|
ALARM1_MINUTES_MASK = 0x0F /*!< Alarm1 Minutes mask */
|
mcm |
1:8ac54576db6d
|
299
|
} DS3231_alarm1_minutes_t;
|
mcm |
1:8ac54576db6d
|
300
|
|
mcm |
1:8ac54576db6d
|
301
|
|
mcm |
1:8ac54576db6d
|
302
|
// ALARM 1 HOURS
|
mcm |
1:8ac54576db6d
|
303
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
304
|
ALARM1_A1M3_MASK = 0x80, /*!< Alarm1 A1M3 mask */
|
mcm |
1:8ac54576db6d
|
305
|
ALARM1_10HOUR_MASK = 0x10, /*!< Alarm1 10Hour mask */
|
mcm |
1:8ac54576db6d
|
306
|
ALARM1_HOUR_MASK = 0x0F /*!< Alarm1 Hour mask */
|
mcm |
1:8ac54576db6d
|
307
|
} DS3231_alarm1_hours_t;
|
mcm |
1:8ac54576db6d
|
308
|
|
mcm |
1:8ac54576db6d
|
309
|
|
mcm |
1:8ac54576db6d
|
310
|
// ALARM 1 DAY/DATE
|
mcm |
1:8ac54576db6d
|
311
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
312
|
ALARM1_A1M4_MASK = 0x80, /*!< Alarm1 A1M4 mask */
|
mcm |
1:8ac54576db6d
|
313
|
ALARM1_DYDT_MASK = 0x40, /*!< Alarm1 DY/DT mask */
|
mcm |
1:8ac54576db6d
|
314
|
ALARM1_10DATE_MASK = 0x30, /*!< Alarm1 10Date mask */
|
mcm |
1:8ac54576db6d
|
315
|
ALARM1_DATE_DAY_MASK = 0x0F /*!< Alarm1 Day/Date mask */
|
mcm |
1:8ac54576db6d
|
316
|
} DS3231_alarm1_day_date_t;
|
mcm |
1:8ac54576db6d
|
317
|
|
mcm |
1:8ac54576db6d
|
318
|
|
mcm |
1:8ac54576db6d
|
319
|
// ALARM 2 MINUTES
|
mcm |
1:8ac54576db6d
|
320
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
321
|
ALARM2_A2M2_MASK = 0x80, /*!< Alarm2 A2M2 mask */
|
mcm |
1:8ac54576db6d
|
322
|
ALARM2_10MINUTES_MASK = 0x70, /*!< Alarm2 10Minutes mask */
|
mcm |
1:8ac54576db6d
|
323
|
ALARM2_MINUTES_MASK = 0x0F /*!< Alarm2 Minutes mask */
|
mcm |
1:8ac54576db6d
|
324
|
} DS3231_alarm2_minutes_t;
|
mcm |
1:8ac54576db6d
|
325
|
|
mcm |
1:8ac54576db6d
|
326
|
|
mcm |
1:8ac54576db6d
|
327
|
// ALARM 2 HOURS
|
mcm |
1:8ac54576db6d
|
328
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
329
|
ALARM2_A2M3_MASK = 0x80, /*!< Alarm2 A1M3 mask */
|
mcm |
1:8ac54576db6d
|
330
|
ALARM2_10HOUR_MASK = 0x10, /*!< Alarm2 10Hour mask */
|
mcm |
1:8ac54576db6d
|
331
|
ALARM2_HOUR_MASK = 0x0F /*!< Alarm2 Hour mask */
|
mcm |
1:8ac54576db6d
|
332
|
} DS3231_alarm2_hours_t;
|
mcm |
1:8ac54576db6d
|
333
|
|
mcm |
1:8ac54576db6d
|
334
|
|
mcm |
1:8ac54576db6d
|
335
|
// ALARM 2 DAY/DATE
|
mcm |
1:8ac54576db6d
|
336
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
337
|
ALARM2_A2M4_MASK = 0x80, /*!< Alarm2 A2M4 mask */
|
mcm |
1:8ac54576db6d
|
338
|
ALARM2_DYDT_MASK = 0x40, /*!< Alarm2 DY/DT mask */
|
mcm |
1:8ac54576db6d
|
339
|
ALARM2_10DATE_MASK = 0x30, /*!< Alarm2 10Date mask */
|
mcm |
1:8ac54576db6d
|
340
|
ALARM2_DATE_DAY_MASK = 0x0F /*!< Alarm2 Day/Date mask */
|
mcm |
1:8ac54576db6d
|
341
|
} DS3231_alarm2_day_date_t;
|
mcm |
1:8ac54576db6d
|
342
|
|
mcm |
1:8ac54576db6d
|
343
|
|
mcm |
1:8ac54576db6d
|
344
|
|
mcm |
1:8ac54576db6d
|
345
|
// MACRO: It turns BCD into decimal
|
mcm |
1:8ac54576db6d
|
346
|
#define _MYBCD_TO_DECIMAL( x ) ({ \
|
mcm |
1:8ac54576db6d
|
347
|
( ( x & 0x0F ) + ( ( ( x & 0xF0 ) >> 4) * 10) ); \
|
mcm |
1:8ac54576db6d
|
348
|
})
|
mcm |
1:8ac54576db6d
|
349
|
|
mcm |
1:8ac54576db6d
|
350
|
// MACRO: It turns decimal into BCD
|
mcm |
1:8ac54576db6d
|
351
|
#define _MYDECIMAL_TO_BCD( x ) ({ \
|
mcm |
1:8ac54576db6d
|
352
|
( ( ( x / 10) << 4 ) & 0xF0 ) | ( ( x % 10 ) & 0x0F ); \
|
mcm |
1:8ac54576db6d
|
353
|
})
|
mcm |
1:8ac54576db6d
|
354
|
|
mcm |
1:8ac54576db6d
|
355
|
|
mcm |
1:8ac54576db6d
|
356
|
|
mcm |
1:8ac54576db6d
|
357
|
|
mcm |
1:8ac54576db6d
|
358
|
|
mcm |
1:8ac54576db6d
|
359
|
|
mcm |
1:8ac54576db6d
|
360
|
#ifndef DS3231_VECTOR_STRUCT_H
|
mcm |
1:8ac54576db6d
|
361
|
#define DS3231_VECTOR_STRUCT_H
|
mcm |
1:8ac54576db6d
|
362
|
typedef struct {
|
mcm |
1:8ac54576db6d
|
363
|
uint8_t MSBTemperature;
|
mcm |
1:8ac54576db6d
|
364
|
uint8_t LSBTemperature;
|
mcm |
1:8ac54576db6d
|
365
|
uint8_t RawAging;
|
mcm |
1:8ac54576db6d
|
366
|
uint8_t Control_Status_Register;
|
mcm |
1:8ac54576db6d
|
367
|
|
mcm |
1:8ac54576db6d
|
368
|
float Temperature;
|
mcm |
1:8ac54576db6d
|
369
|
} DS3231_vector_data_t;
|
mcm |
1:8ac54576db6d
|
370
|
|
mcm |
1:8ac54576db6d
|
371
|
typedef struct {
|
mcm |
1:8ac54576db6d
|
372
|
uint8_t Date;
|
mcm |
1:8ac54576db6d
|
373
|
uint8_t Month;
|
mcm |
1:8ac54576db6d
|
374
|
uint8_t Year;
|
mcm |
1:8ac54576db6d
|
375
|
uint8_t DayOfWeek;
|
mcm |
1:8ac54576db6d
|
376
|
uint8_t Century;
|
mcm |
1:8ac54576db6d
|
377
|
|
mcm |
1:8ac54576db6d
|
378
|
uint8_t Hours;
|
mcm |
1:8ac54576db6d
|
379
|
uint8_t Minutes;
|
mcm |
1:8ac54576db6d
|
380
|
uint8_t Seconds;
|
mcm |
1:8ac54576db6d
|
381
|
uint8_t Mode_nAM_PM; /*!< Mode_nAM_PM = 0 -> AM | Mode_nAM_PM = 0x20 -> PM */
|
mcm |
1:8ac54576db6d
|
382
|
uint8_t Mode_12_n24; /*!< Mode_12_n24 = 0x40 -> 12 | Mode_12_n24 = 0 -> 24 */
|
mcm |
1:8ac54576db6d
|
383
|
} DS3231_vector_date_time_t;
|
mcm |
1:8ac54576db6d
|
384
|
#endif
|
mcm |
1:8ac54576db6d
|
385
|
|
mcm |
1:8ac54576db6d
|
386
|
|
mcm |
1:8ac54576db6d
|
387
|
|
mcm |
1:8ac54576db6d
|
388
|
/**
|
mcm |
1:8ac54576db6d
|
389
|
* @brief INTERNAL CONSTANTS
|
mcm |
1:8ac54576db6d
|
390
|
*/
|
mcm |
1:8ac54576db6d
|
391
|
typedef enum {
|
mcm |
1:8ac54576db6d
|
392
|
DS3231_SUCCESS = 0,
|
mcm |
1:8ac54576db6d
|
393
|
DS3231_FAILURE = 1,
|
mcm |
1:8ac54576db6d
|
394
|
DS3231_TIMEOUT = 1000,
|
mcm |
1:8ac54576db6d
|
395
|
|
mcm |
2:3710775b1864
|
396
|
I2C_SUCCESS = 0, /*!< I2C communication was fine */
|
mcm |
2:3710775b1864
|
397
|
I2C_FAILURE = 1
|
mcm |
1:8ac54576db6d
|
398
|
} DS3231_status_t;
|
mcm |
1:8ac54576db6d
|
399
|
|
mcm |
1:8ac54576db6d
|
400
|
|
mcm |
1:8ac54576db6d
|
401
|
|
mcm |
1:8ac54576db6d
|
402
|
|
mcm |
1:8ac54576db6d
|
403
|
/** Create an DS3231 object connected to the specified I2C pins.
|
mcm |
1:8ac54576db6d
|
404
|
*
|
mcm |
1:8ac54576db6d
|
405
|
* @param sda I2C data pin
|
mcm |
1:8ac54576db6d
|
406
|
* @param scl I2C clock pin
|
mcm |
1:8ac54576db6d
|
407
|
* @param addr I2C slave address
|
mcm |
1:8ac54576db6d
|
408
|
* @param freq I2C frequency in Hz.
|
mcm |
1:8ac54576db6d
|
409
|
*/
|
mcm |
1:8ac54576db6d
|
410
|
DS3231 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
|
mcm |
1:8ac54576db6d
|
411
|
|
mcm |
1:8ac54576db6d
|
412
|
/** Delete DS3231 object.
|
mcm |
1:8ac54576db6d
|
413
|
*/
|
mcm |
1:8ac54576db6d
|
414
|
~DS3231();
|
mcm |
1:8ac54576db6d
|
415
|
|
mcm |
1:8ac54576db6d
|
416
|
/** It reads the temperature data.
|
mcm |
1:8ac54576db6d
|
417
|
*/
|
mcm |
1:8ac54576db6d
|
418
|
DS3231_status_t DS3231_ReadTemperature ( DS3231_vector_data_t* myTemperature );
|
mcm |
1:8ac54576db6d
|
419
|
|
mcm |
1:8ac54576db6d
|
420
|
/** It reads the raw temperature data.
|
mcm |
1:8ac54576db6d
|
421
|
*/
|
mcm |
1:8ac54576db6d
|
422
|
DS3231_status_t DS3231_ReadRawTemperature ( DS3231_vector_data_t* myRawTemperature );
|
mcm |
1:8ac54576db6d
|
423
|
|
mcm |
1:8ac54576db6d
|
424
|
/** It triggers a new temperature measurement.
|
mcm |
1:8ac54576db6d
|
425
|
*/
|
mcm |
1:8ac54576db6d
|
426
|
DS3231_status_t DS3231_StartNewConvertTemperature ( void );
|
mcm |
1:8ac54576db6d
|
427
|
|
mcm |
1:8ac54576db6d
|
428
|
/** It reads the raw aging data.
|
mcm |
1:8ac54576db6d
|
429
|
*/
|
mcm |
1:8ac54576db6d
|
430
|
DS3231_status_t DS3231_ReadRawAging ( DS3231_vector_data_t* myRawAging );
|
mcm |
1:8ac54576db6d
|
431
|
|
mcm |
1:8ac54576db6d
|
432
|
/** It sets the 32kHz pin output: Enabled/Disabled.
|
mcm |
1:8ac54576db6d
|
433
|
*/
|
mcm |
1:8ac54576db6d
|
434
|
DS3231_status_t DS3231_Status32kHzPin ( DS3231_status_enable_32khz_output_t my32kHzPin );
|
mcm |
1:8ac54576db6d
|
435
|
|
mcm |
1:8ac54576db6d
|
436
|
/** It clears alarm flags.
|
mcm |
1:8ac54576db6d
|
437
|
*/
|
mcm |
1:8ac54576db6d
|
438
|
DS3231_status_t DS3231_ClearAlarmFlag ( DS3231_status_alarm1_flag_t myA1F, DS3231_status_alarm2_flag_t myA2F );
|
mcm |
1:8ac54576db6d
|
439
|
|
mcm |
1:8ac54576db6d
|
440
|
/** It sets the alarm1.
|
mcm |
1:8ac54576db6d
|
441
|
*/
|
mcm |
1:8ac54576db6d
|
442
|
DS3231_status_t DS3231_SetAlarm1 ( DS3231_alarm1_register_t myAlarm1 );
|
mcm |
1:8ac54576db6d
|
443
|
|
mcm |
1:8ac54576db6d
|
444
|
/** It sets the alarm2.
|
mcm |
1:8ac54576db6d
|
445
|
*/
|
mcm |
1:8ac54576db6d
|
446
|
DS3231_status_t DS3231_SetAlarm2 ( DS3231_alarm2_register_t myAlarm2 );
|
mcm |
1:8ac54576db6d
|
447
|
|
mcm |
1:8ac54576db6d
|
448
|
/** It enables/disables Alarm ( 1 and 2 ) interrupts.
|
mcm |
1:8ac54576db6d
|
449
|
*/
|
mcm |
1:8ac54576db6d
|
450
|
DS3231_status_t DS3231_SetAlarmsInterrupt ( DS3231_control_status_alarm1_t myAlarm1, DS3231_control_status_alarm2_t myAlarm2 );
|
mcm |
1:8ac54576db6d
|
451
|
|
mcm |
1:8ac54576db6d
|
452
|
/** It sets square-wave output frequency.
|
mcm |
1:8ac54576db6d
|
453
|
*/
|
mcm |
1:8ac54576db6d
|
454
|
DS3231_status_t DS3231_SetSquareWaveOutput ( DS3231_control_status_rate_select_t myRate );
|
mcm |
1:8ac54576db6d
|
455
|
|
mcm |
1:8ac54576db6d
|
456
|
/** It gets the date.
|
mcm |
1:8ac54576db6d
|
457
|
*/
|
mcm |
1:8ac54576db6d
|
458
|
DS3231_status_t DS3231_GetDate ( DS3231_vector_date_time_t* myDate );
|
mcm |
1:8ac54576db6d
|
459
|
|
mcm |
1:8ac54576db6d
|
460
|
/** It sets the date.
|
mcm |
1:8ac54576db6d
|
461
|
*/
|
mcm |
1:8ac54576db6d
|
462
|
DS3231_status_t DS3231_SetDate ( DS3231_vector_date_time_t myDate );
|
mcm |
1:8ac54576db6d
|
463
|
|
mcm |
1:8ac54576db6d
|
464
|
/** It gets the time.
|
mcm |
1:8ac54576db6d
|
465
|
*/
|
mcm |
1:8ac54576db6d
|
466
|
DS3231_status_t DS3231_GetTime ( DS3231_vector_date_time_t* myTime );
|
mcm |
1:8ac54576db6d
|
467
|
|
mcm |
1:8ac54576db6d
|
468
|
/** It sets the time.
|
mcm |
1:8ac54576db6d
|
469
|
*/
|
mcm |
1:8ac54576db6d
|
470
|
DS3231_status_t DS3231_SetTime ( DS3231_vector_date_time_t myTime );
|
mcm |
1:8ac54576db6d
|
471
|
|
mcm |
1:8ac54576db6d
|
472
|
/** It gets the CONTROL/STATUS register.
|
mcm |
1:8ac54576db6d
|
473
|
*/
|
mcm |
1:8ac54576db6d
|
474
|
DS3231_status_t DS3231_GetControlStatusRegister ( DS3231_vector_data_t* myControlStatusReg );
|
mcm |
1:8ac54576db6d
|
475
|
|
mcm |
1:8ac54576db6d
|
476
|
|
mcm |
1:8ac54576db6d
|
477
|
|
mcm |
1:8ac54576db6d
|
478
|
|
mcm |
1:8ac54576db6d
|
479
|
private:
|
mcm |
1:8ac54576db6d
|
480
|
I2C _i2c;
|
mcm |
1:8ac54576db6d
|
481
|
uint32_t _DS3231_Addr;
|
mcm |
1:8ac54576db6d
|
482
|
};
|
mcm |
1:8ac54576db6d
|
483
|
|
mcm |
1:8ac54576db6d
|
484
|
#endif
|