User | Revision | Line number | New contents of line |
mcm |
1:161eb44e3909
|
1
|
/**
|
mcm |
1:161eb44e3909
|
2
|
* @brief PCF85063.h
|
mcm |
1:161eb44e3909
|
3
|
* @details Tiny Real-Time Clock/calendar.
|
mcm |
1:161eb44e3909
|
4
|
* Header file.
|
mcm |
1:161eb44e3909
|
5
|
*
|
mcm |
1:161eb44e3909
|
6
|
*
|
mcm |
1:161eb44e3909
|
7
|
* @return N/A
|
mcm |
1:161eb44e3909
|
8
|
*
|
mcm |
1:161eb44e3909
|
9
|
* @author Manuel Caballero
|
mcm |
1:161eb44e3909
|
10
|
* @date 19/February/2019
|
mcm |
1:161eb44e3909
|
11
|
* @version 19/February/2019 The ORIGIN
|
mcm |
1:161eb44e3909
|
12
|
* @pre N/A.
|
mcm |
1:161eb44e3909
|
13
|
* @warning N/A
|
mcm |
1:161eb44e3909
|
14
|
* @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved.
|
mcm |
1:161eb44e3909
|
15
|
*/
|
mcm |
1:161eb44e3909
|
16
|
#ifndef PCF85063_H
|
mcm |
1:161eb44e3909
|
17
|
#define PCF85063_H
|
mcm |
1:161eb44e3909
|
18
|
|
mcm |
1:161eb44e3909
|
19
|
#include "mbed.h"
|
mcm |
1:161eb44e3909
|
20
|
|
mcm |
1:161eb44e3909
|
21
|
|
mcm |
1:161eb44e3909
|
22
|
/**
|
mcm |
1:161eb44e3909
|
23
|
Example:
|
mcm |
1:161eb44e3909
|
24
|
@code
|
mcm |
4:a5c06ac163f1
|
25
|
#include "mbed.h"
|
mcm |
4:a5c06ac163f1
|
26
|
#include "PCF85063.h"
|
mcm |
1:161eb44e3909
|
27
|
|
mcm |
4:a5c06ac163f1
|
28
|
PCF85063 myPCF85063 ( I2C_SDA, I2C_SCL, PCF85063::PCF85063_ADDRESS, 400000 ); // I2C_SDA | I2C_SCL
|
mcm |
4:a5c06ac163f1
|
29
|
Serial pc ( USBTX, USBRX ); // tx, rx
|
mcm |
4:a5c06ac163f1
|
30
|
|
mcm |
4:a5c06ac163f1
|
31
|
DigitalOut myled ( LED1 );
|
mcm |
4:a5c06ac163f1
|
32
|
Ticker newAction;
|
mcm |
4:a5c06ac163f1
|
33
|
|
mcm |
4:a5c06ac163f1
|
34
|
|
mcm |
4:a5c06ac163f1
|
35
|
// @brief Constants.
|
mcm |
4:a5c06ac163f1
|
36
|
|
mcm |
4:a5c06ac163f1
|
37
|
|
mcm |
4:a5c06ac163f1
|
38
|
// @brief Variables.
|
mcm |
4:a5c06ac163f1
|
39
|
volatile uint32_t myState; // State that indicates when to perform an ADC sample
|
mcm |
4:a5c06ac163f1
|
40
|
|
mcm |
4:a5c06ac163f1
|
41
|
|
mcm |
4:a5c06ac163f1
|
42
|
// @brief FUNCTION PROTOTYPES
|
mcm |
4:a5c06ac163f1
|
43
|
void changeDATA ( void );
|
mcm |
4:a5c06ac163f1
|
44
|
|
mcm |
4:a5c06ac163f1
|
45
|
|
mcm |
4:a5c06ac163f1
|
46
|
|
mcm |
4:a5c06ac163f1
|
47
|
// @brief FUNCTION FOR APPLICATION MAIN ENTRY.
|
mcm |
4:a5c06ac163f1
|
48
|
int main()
|
mcm |
4:a5c06ac163f1
|
49
|
{
|
mcm |
4:a5c06ac163f1
|
50
|
static const char* MY_WEEK_DAY_STRING[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
|
mcm |
4:a5c06ac163f1
|
51
|
|
mcm |
4:a5c06ac163f1
|
52
|
PCF85063::PCF85063_status_t aux;
|
mcm |
4:a5c06ac163f1
|
53
|
PCF85063::PCF85063_data_t myPCF85063_Data;
|
mcm |
4:a5c06ac163f1
|
54
|
|
mcm |
4:a5c06ac163f1
|
55
|
pc.baud ( 115200 );
|
mcm |
4:a5c06ac163f1
|
56
|
|
mcm |
4:a5c06ac163f1
|
57
|
|
mcm |
4:a5c06ac163f1
|
58
|
myled = 1;
|
mcm |
4:a5c06ac163f1
|
59
|
wait(3);
|
mcm |
4:a5c06ac163f1
|
60
|
myled = 0;
|
mcm |
4:a5c06ac163f1
|
61
|
|
mcm |
4:a5c06ac163f1
|
62
|
// Perform a software reset
|
mcm |
4:a5c06ac163f1
|
63
|
aux = myPCF85063.PCF85063_SoftwareReset ();
|
mcm |
4:a5c06ac163f1
|
64
|
|
mcm |
4:a5c06ac163f1
|
65
|
// Wait until the oscillator is stable
|
mcm |
4:a5c06ac163f1
|
66
|
do {
|
mcm |
4:a5c06ac163f1
|
67
|
// Clear Clock integrity flag.
|
mcm |
4:a5c06ac163f1
|
68
|
aux = myPCF85063.PCF85063_ClearOscillatorClockIntegrityFlag ();
|
mcm |
4:a5c06ac163f1
|
69
|
|
mcm |
4:a5c06ac163f1
|
70
|
// Check Clock integrity flag.
|
mcm |
4:a5c06ac163f1
|
71
|
aux = myPCF85063.PCF85063_CheckOscillatorClockIntegrityFlag ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
72
|
} while( myPCF85063_Data.os == PCF85063::SECONDS_OS_CLOCK_INTEGRITY_NOT_GUARANTEED );
|
mcm |
4:a5c06ac163f1
|
73
|
|
mcm |
4:a5c06ac163f1
|
74
|
// External clock test mode: Normal mode ( no test at all )
|
mcm |
4:a5c06ac163f1
|
75
|
aux = myPCF85063.PCF85063_SetTestMode ( PCF85063::CONTROL_1_EXT_TEST_NORMAL_MODE );
|
mcm |
4:a5c06ac163f1
|
76
|
|
mcm |
4:a5c06ac163f1
|
77
|
// RTC clock is enabled
|
mcm |
4:a5c06ac163f1
|
78
|
aux = myPCF85063.PCF85063_SetRTCMode ( PCF85063::CONTROL_1_STOP_RTC_CLOCK_RUNS );
|
mcm |
4:a5c06ac163f1
|
79
|
|
mcm |
4:a5c06ac163f1
|
80
|
// No correction interrupt generated
|
mcm |
4:a5c06ac163f1
|
81
|
aux = myPCF85063.PCF85063_SetCorrectionInterruptMode ( PCF85063::CONTROL_1_CIE_NO_CORRECTION_INTERRUPT_GENERATED );
|
mcm |
4:a5c06ac163f1
|
82
|
|
mcm |
4:a5c06ac163f1
|
83
|
// 24 hour mode is selected
|
mcm |
4:a5c06ac163f1
|
84
|
myPCF85063_Data.Time12H_24HMode = PCF85063::CONTROL_1_12_24_24_HOUR_MODE;
|
mcm |
4:a5c06ac163f1
|
85
|
aux = myPCF85063.PCF85063_Set12_24_HourMode ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
86
|
|
mcm |
4:a5c06ac163f1
|
87
|
// Internal oscillator capacitor selection: 7 pF
|
mcm |
4:a5c06ac163f1
|
88
|
aux = myPCF85063.PCF85063_SetInternalOscillatorCapacitor ( PCF85063::CONTROL_1_CAP_SEL_7_PF );
|
mcm |
4:a5c06ac163f1
|
89
|
|
mcm |
4:a5c06ac163f1
|
90
|
// Minute interrupt and half minute interrupt are disabled
|
mcm |
4:a5c06ac163f1
|
91
|
aux = myPCF85063.PCF85063_SetMinuteInterrupts ( PCF85063::CONTROL_2_MI_MINUTE_INTERRUPT_DISABLED, PCF85063::CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_DISABLED );
|
mcm |
4:a5c06ac163f1
|
92
|
|
mcm |
4:a5c06ac163f1
|
93
|
// Clear timer flag
|
mcm |
4:a5c06ac163f1
|
94
|
aux = myPCF85063.PCF85063_ClearTimerFlag ();
|
mcm |
4:a5c06ac163f1
|
95
|
|
mcm |
4:a5c06ac163f1
|
96
|
// CLKOUT: 1Hz
|
mcm |
4:a5c06ac163f1
|
97
|
aux = myPCF85063.PCF85063_SetClockOutputFrequency ( PCF85063::CONTROL_2_COF_CLKOUT_1_HZ );
|
mcm |
4:a5c06ac163f1
|
98
|
|
mcm |
4:a5c06ac163f1
|
99
|
// Normal mode offset at 0.
|
mcm |
4:a5c06ac163f1
|
100
|
aux = myPCF85063.PCF85063_SetOffset ( PCF85063::OFFSET_MODE_NORMAL_MODE, 0 );
|
mcm |
4:a5c06ac163f1
|
101
|
|
mcm |
4:a5c06ac163f1
|
102
|
// Write data ( 0x23 ) into device's RAM
|
mcm |
4:a5c06ac163f1
|
103
|
myPCF85063_Data.ramByte = 0x23;
|
mcm |
4:a5c06ac163f1
|
104
|
aux = myPCF85063.PCF85063_WriteByteRAM ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
105
|
|
mcm |
4:a5c06ac163f1
|
106
|
// Read data from device's RAM
|
mcm |
4:a5c06ac163f1
|
107
|
myPCF85063_Data.ramByte = 0; // Reset the variable
|
mcm |
4:a5c06ac163f1
|
108
|
aux = myPCF85063.PCF85063_ReadByteRAM ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
109
|
pc.printf ( "Data in RAM: %x (0x23)\r\n", myPCF85063_Data.ramByte );
|
mcm |
4:a5c06ac163f1
|
110
|
|
mcm |
4:a5c06ac163f1
|
111
|
// Get day. After reset, we expect to get 0x01
|
mcm |
4:a5c06ac163f1
|
112
|
aux = myPCF85063.PCF85063_GetDay ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
113
|
|
mcm |
4:a5c06ac163f1
|
114
|
// Set day: 23
|
mcm |
4:a5c06ac163f1
|
115
|
myPCF85063_Data.BCDday = 0x23;
|
mcm |
4:a5c06ac163f1
|
116
|
aux = myPCF85063.PCF85063_SetDay ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
117
|
|
mcm |
4:a5c06ac163f1
|
118
|
// Get month. After reset, we expect to get 0x01 ( January )
|
mcm |
4:a5c06ac163f1
|
119
|
aux = myPCF85063.PCF85063_GetMonth ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
120
|
|
mcm |
4:a5c06ac163f1
|
121
|
// Set month: September
|
mcm |
4:a5c06ac163f1
|
122
|
myPCF85063_Data.BCDmonth = PCF85063::MONTHS_MONTHS_SEPTEMBER;
|
mcm |
4:a5c06ac163f1
|
123
|
aux = myPCF85063.PCF85063_SetMonth ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
124
|
|
mcm |
4:a5c06ac163f1
|
125
|
// Get weekday. After reset, we expect to get Saturday
|
mcm |
4:a5c06ac163f1
|
126
|
aux = myPCF85063.PCF85063_GetWeekday ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
127
|
|
mcm |
4:a5c06ac163f1
|
128
|
// Set weekday: Friday
|
mcm |
4:a5c06ac163f1
|
129
|
myPCF85063_Data.weekday = PCF85063::WEEKDAYS_WEEKDAYS_FRIDAY;
|
mcm |
4:a5c06ac163f1
|
130
|
aux = myPCF85063.PCF85063_SetWeekday ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
131
|
|
mcm |
4:a5c06ac163f1
|
132
|
// Get year. After reset, we expect to get 00 ( it corresponds to 2000 )
|
mcm |
4:a5c06ac163f1
|
133
|
aux = myPCF85063.PCF85063_GetYear ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
134
|
|
mcm |
4:a5c06ac163f1
|
135
|
// Set year: 19 ( 2019 )
|
mcm |
4:a5c06ac163f1
|
136
|
myPCF85063_Data.BCDyear = 0x19;
|
mcm |
4:a5c06ac163f1
|
137
|
aux = myPCF85063.PCF85063_SetYear ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
138
|
|
mcm |
4:a5c06ac163f1
|
139
|
// Set time: 235955 ( 23:59:55 )
|
mcm |
4:a5c06ac163f1
|
140
|
myPCF85063_Data.BCDtime = 0x235955;
|
mcm |
4:a5c06ac163f1
|
141
|
aux = myPCF85063.PCF85063_SetTime ( myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
142
|
|
mcm |
4:a5c06ac163f1
|
143
|
myState = 0UL; // Reset the variable
|
mcm |
4:a5c06ac163f1
|
144
|
newAction.attach( &changeDATA, 1U ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s )
|
mcm |
4:a5c06ac163f1
|
145
|
|
mcm |
4:a5c06ac163f1
|
146
|
// Let the callbacks take care of everything
|
mcm |
4:a5c06ac163f1
|
147
|
while(1) {
|
mcm |
4:a5c06ac163f1
|
148
|
sleep();
|
mcm |
4:a5c06ac163f1
|
149
|
|
mcm |
4:a5c06ac163f1
|
150
|
if ( myState == 1UL ) {
|
mcm |
4:a5c06ac163f1
|
151
|
myled = 1U;
|
mcm |
4:a5c06ac163f1
|
152
|
|
mcm |
4:a5c06ac163f1
|
153
|
// Get time
|
mcm |
4:a5c06ac163f1
|
154
|
aux = myPCF85063.PCF85063_GetTime ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
155
|
|
mcm |
4:a5c06ac163f1
|
156
|
// Get day
|
mcm |
4:a5c06ac163f1
|
157
|
aux = myPCF85063.PCF85063_GetDay ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
158
|
|
mcm |
4:a5c06ac163f1
|
159
|
// Get month
|
mcm |
4:a5c06ac163f1
|
160
|
aux = myPCF85063.PCF85063_GetMonth ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
161
|
|
mcm |
4:a5c06ac163f1
|
162
|
// Get weekday
|
mcm |
4:a5c06ac163f1
|
163
|
aux = myPCF85063.PCF85063_GetWeekday ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
164
|
|
mcm |
4:a5c06ac163f1
|
165
|
// Get year
|
mcm |
4:a5c06ac163f1
|
166
|
aux = myPCF85063.PCF85063_GetYear ( &myPCF85063_Data );
|
mcm |
4:a5c06ac163f1
|
167
|
|
mcm |
4:a5c06ac163f1
|
168
|
// Final data
|
mcm |
4:a5c06ac163f1
|
169
|
pc.printf ( "Time: %x:%x:%x, Month %x Day %x %s 20%x\r\n", ( ( myPCF85063_Data.BCDtime & 0xFF0000 ) >> 16U ), ( ( myPCF85063_Data.BCDtime & 0x00FF00 ) >> 8U ),
|
mcm |
4:a5c06ac163f1
|
170
|
( myPCF85063_Data.BCDtime & 0x0000FF ), myPCF85063_Data.BCDmonth, myPCF85063_Data.BCDday, MY_WEEK_DAY_STRING[myPCF85063_Data.weekday], myPCF85063_Data.BCDyear );
|
mcm |
4:a5c06ac163f1
|
171
|
|
mcm |
4:a5c06ac163f1
|
172
|
// Reset the variables
|
mcm |
4:a5c06ac163f1
|
173
|
myState = 0UL;
|
mcm |
4:a5c06ac163f1
|
174
|
myled = 0U;
|
mcm |
4:a5c06ac163f1
|
175
|
}
|
mcm |
4:a5c06ac163f1
|
176
|
}
|
mcm |
4:a5c06ac163f1
|
177
|
}
|
mcm |
4:a5c06ac163f1
|
178
|
|
mcm |
4:a5c06ac163f1
|
179
|
// @brief changeDATA ( void )
|
mcm |
4:a5c06ac163f1
|
180
|
//
|
mcm |
4:a5c06ac163f1
|
181
|
// @details It changes myState variable
|
mcm |
4:a5c06ac163f1
|
182
|
//
|
mcm |
4:a5c06ac163f1
|
183
|
// @param[in] N/A
|
mcm |
4:a5c06ac163f1
|
184
|
//
|
mcm |
4:a5c06ac163f1
|
185
|
// @param[out] N/A.
|
mcm |
4:a5c06ac163f1
|
186
|
//
|
mcm |
4:a5c06ac163f1
|
187
|
//
|
mcm |
4:a5c06ac163f1
|
188
|
// @return N/A.
|
mcm |
4:a5c06ac163f1
|
189
|
//
|
mcm |
4:a5c06ac163f1
|
190
|
//
|
mcm |
4:a5c06ac163f1
|
191
|
// @author Manuel Caballero
|
mcm |
4:a5c06ac163f1
|
192
|
// @date 19/February/2019
|
mcm |
4:a5c06ac163f1
|
193
|
// @version 19/February/2019 The ORIGIN
|
mcm |
4:a5c06ac163f1
|
194
|
// @pre N/A
|
mcm |
4:a5c06ac163f1
|
195
|
// @warning N/A.
|
mcm |
4:a5c06ac163f1
|
196
|
//
|
mcm |
4:a5c06ac163f1
|
197
|
void changeDATA ( void )
|
mcm |
4:a5c06ac163f1
|
198
|
{
|
mcm |
4:a5c06ac163f1
|
199
|
myState = 1UL;
|
mcm |
4:a5c06ac163f1
|
200
|
}
|
mcm |
1:161eb44e3909
|
201
|
@endcode
|
mcm |
1:161eb44e3909
|
202
|
*/
|
mcm |
1:161eb44e3909
|
203
|
|
mcm |
1:161eb44e3909
|
204
|
|
mcm |
1:161eb44e3909
|
205
|
/*!
|
mcm |
1:161eb44e3909
|
206
|
Library for the PCF85063 Tiny Real-Time Clock/calendar.
|
mcm |
1:161eb44e3909
|
207
|
*/
|
mcm |
1:161eb44e3909
|
208
|
class PCF85063
|
mcm |
1:161eb44e3909
|
209
|
{
|
mcm |
1:161eb44e3909
|
210
|
public:
|
mcm |
1:161eb44e3909
|
211
|
/**
|
mcm |
1:161eb44e3909
|
212
|
* @brief DEFAULT ADDRESS
|
mcm |
1:161eb44e3909
|
213
|
*/
|
mcm |
1:161eb44e3909
|
214
|
typedef enum {
|
mcm |
1:161eb44e3909
|
215
|
PCF85063_ADDRESS = ( 0b1010001 << 1U ) /*!< I2C slave address byte */
|
mcm |
1:161eb44e3909
|
216
|
} PCF85063_address_t;
|
mcm |
1:161eb44e3909
|
217
|
|
mcm |
1:161eb44e3909
|
218
|
|
mcm |
1:161eb44e3909
|
219
|
|
mcm |
1:161eb44e3909
|
220
|
/**
|
mcm |
1:161eb44e3909
|
221
|
* @brief REGISTERS ORGANIZATION
|
mcm |
1:161eb44e3909
|
222
|
*/
|
mcm |
1:161eb44e3909
|
223
|
typedef enum {
|
mcm |
1:161eb44e3909
|
224
|
/* CONTROL AND STATUS REGISTERS */
|
mcm |
1:161eb44e3909
|
225
|
PCF85063_CONTROL_1 = 0x00, /*!< Control and status register 1 */
|
mcm |
1:161eb44e3909
|
226
|
PCF85063_CONTROL_2 = 0x01, /*!< Control and status register 2 */
|
mcm |
1:161eb44e3909
|
227
|
PCF85063_OFFSET = 0x02, /*!< Offset register */
|
mcm |
1:161eb44e3909
|
228
|
PCF85063_RAM_BYTE = 0x03, /*!< RAM byte register */
|
mcm |
1:161eb44e3909
|
229
|
|
mcm |
1:161eb44e3909
|
230
|
/* TIME AND DATE REGISTERS */
|
mcm |
1:161eb44e3909
|
231
|
PCF85063_SECONDS = 0x04, /*!< Seconds register */
|
mcm |
1:161eb44e3909
|
232
|
PCF85063_MINUTES = 0x05, /*!< Minutes register */
|
mcm |
1:161eb44e3909
|
233
|
PCF85063_HOURS = 0x06, /*!< Hours register */
|
mcm |
1:161eb44e3909
|
234
|
PCF85063_DAYS = 0x07, /*!< Days register */
|
mcm |
1:161eb44e3909
|
235
|
PCF85063_WEEKDAYS = 0x08, /*!< Weekdays register */
|
mcm |
1:161eb44e3909
|
236
|
PCF85063_MONTHS = 0x09, /*!< Months register */
|
mcm |
1:161eb44e3909
|
237
|
PCF85063_YEARS = 0x0A /*!< Years register */
|
mcm |
1:161eb44e3909
|
238
|
} PCF85063_registers_organization_t;
|
mcm |
1:161eb44e3909
|
239
|
|
mcm |
1:161eb44e3909
|
240
|
|
mcm |
1:161eb44e3909
|
241
|
|
mcm |
1:161eb44e3909
|
242
|
/**
|
mcm |
1:161eb44e3909
|
243
|
* @brief Register Control_1
|
mcm |
1:161eb44e3909
|
244
|
*/
|
mcm |
1:161eb44e3909
|
245
|
/* EXT_TEST <7>: EXTERNAL CLOCK TEST MODE
|
mcm |
1:161eb44e3909
|
246
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
247
|
*/
|
mcm |
1:161eb44e3909
|
248
|
typedef enum {
|
mcm |
1:161eb44e3909
|
249
|
CONTROL_1_EXT_TEST_MASK = ( 1U << 7U ), /*!< EXT_TEST mask */
|
mcm |
1:161eb44e3909
|
250
|
CONTROL_1_EXT_TEST_NORMAL_MODE = ( 0U << 7U ), /*!< EXT_TEST: normal mode [ Default ] */
|
mcm |
1:161eb44e3909
|
251
|
CONTROL_1_EXT_TEST_EXTERNAL_CLOCK_TEST_MODE = ( 1U << 7U ) /*!< EXT_TEST: external clock test mode */
|
mcm |
1:161eb44e3909
|
252
|
} PCF85063_control_1_ext_test_t;
|
mcm |
1:161eb44e3909
|
253
|
|
mcm |
1:161eb44e3909
|
254
|
|
mcm |
1:161eb44e3909
|
255
|
|
mcm |
1:161eb44e3909
|
256
|
/* STOP <5>: STOP BIT
|
mcm |
1:161eb44e3909
|
257
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
258
|
*/
|
mcm |
1:161eb44e3909
|
259
|
typedef enum {
|
mcm |
1:161eb44e3909
|
260
|
CONTROL_1_STOP_MASK = ( 1U << 5U ), /*!< STOP mask */
|
mcm |
1:161eb44e3909
|
261
|
CONTROL_1_STOP_RTC_CLOCK_RUNS = ( 0U << 5U ), /*!< STOP: RTC clock runs [ Default ] */
|
mcm |
1:161eb44e3909
|
262
|
CONTROL_1_STOP_RTC_CLOCK_STOPPED = ( 1U << 5U ) /*!< STOP: RTC clock is stopped */
|
mcm |
1:161eb44e3909
|
263
|
} PCF85063_control_1_stop_t;
|
mcm |
1:161eb44e3909
|
264
|
|
mcm |
1:161eb44e3909
|
265
|
|
mcm |
1:161eb44e3909
|
266
|
|
mcm |
1:161eb44e3909
|
267
|
/* SR <4>: SOFTWARE RESET
|
mcm |
1:161eb44e3909
|
268
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
269
|
*/
|
mcm |
1:161eb44e3909
|
270
|
typedef enum {
|
mcm |
1:161eb44e3909
|
271
|
CONTROL_1_SR_MASK = ( 1U << 4U ), /*!< SR mask */
|
mcm |
1:161eb44e3909
|
272
|
CONTROL_1_SR_NO_SOFTWARE_RESET = ( 0U << 4U ), /*!< SR: no software reset [ Default ] */
|
mcm |
1:161eb44e3909
|
273
|
CONTROL_1_SR_SOFTWARE_RESET = ( 1U << 4U ) /*!< SR: initiate software reset */
|
mcm |
1:161eb44e3909
|
274
|
} PCF85063_control_1_sr_t;
|
mcm |
1:161eb44e3909
|
275
|
|
mcm |
1:161eb44e3909
|
276
|
|
mcm |
1:161eb44e3909
|
277
|
|
mcm |
1:161eb44e3909
|
278
|
/* CIE <2>: CORRECTION INTERRUPT ENABLE
|
mcm |
1:161eb44e3909
|
279
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
280
|
*/
|
mcm |
1:161eb44e3909
|
281
|
typedef enum {
|
mcm |
1:161eb44e3909
|
282
|
CONTROL_1_CIE_MASK = ( 1U << 2U ), /*!< CIE mask */
|
mcm |
1:161eb44e3909
|
283
|
CONTROL_1_CIE_NO_CORRECTION_INTERRUPT_GENERATED = ( 0U << 2U ), /*!< CIE: no correction interrupt generated [ Default ] */
|
mcm |
1:161eb44e3909
|
284
|
CONTROL_1_CIE_INTERRUPT_PULSES_GENERATED = ( 1U << 2U ) /*!< CIE: interrupt pulses are generated at every correction cycle */
|
mcm |
1:161eb44e3909
|
285
|
} PCF85063_control_1_cie_t;
|
mcm |
1:161eb44e3909
|
286
|
|
mcm |
1:161eb44e3909
|
287
|
|
mcm |
1:161eb44e3909
|
288
|
|
mcm |
1:161eb44e3909
|
289
|
/* 12_24 <1>: SOFTWARE RESET
|
mcm |
1:161eb44e3909
|
290
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
291
|
*/
|
mcm |
1:161eb44e3909
|
292
|
typedef enum {
|
mcm |
1:161eb44e3909
|
293
|
CONTROL_1_12_24_MASK = ( 1U << 1U ), /*!< 12_24 mask */
|
mcm |
1:161eb44e3909
|
294
|
CONTROL_1_12_24_24_HOUR_MODE = ( 0U << 1U ), /*!< 12_24: 24 hour mode is selected [ Default ] */
|
mcm |
1:161eb44e3909
|
295
|
CONTROL_1_12_24_12_HOUR_MODE = ( 1U << 1U ) /*!< 12_24: 12 hour mode is selected */
|
mcm |
1:161eb44e3909
|
296
|
} PCF85063_control_1_12_24_t;
|
mcm |
1:161eb44e3909
|
297
|
|
mcm |
1:161eb44e3909
|
298
|
|
mcm |
1:161eb44e3909
|
299
|
|
mcm |
1:161eb44e3909
|
300
|
/* CAP_SEL <0>: INTERNAL OSCILLATOR CAPACITOR SELECTION
|
mcm |
1:161eb44e3909
|
301
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
302
|
*/
|
mcm |
1:161eb44e3909
|
303
|
typedef enum {
|
mcm |
1:161eb44e3909
|
304
|
CONTROL_1_CAP_SEL_MASK = ( 1U << 0U ), /*!< CAP_SEL mask */
|
mcm |
1:161eb44e3909
|
305
|
CONTROL_1_CAP_SEL_7_PF = ( 0U << 0U ), /*!< CAP_SEL: 7 pF [ Default ] */
|
mcm |
1:161eb44e3909
|
306
|
CONTROL_1_CAP_SEL_12_5_PF = ( 1U << 0U ) /*!< CAP_SEL: 12.5 pF */
|
mcm |
1:161eb44e3909
|
307
|
} PCF85063_control_1_cap_sel_t;
|
mcm |
1:161eb44e3909
|
308
|
|
mcm |
1:161eb44e3909
|
309
|
|
mcm |
1:161eb44e3909
|
310
|
|
mcm |
1:161eb44e3909
|
311
|
/**
|
mcm |
1:161eb44e3909
|
312
|
* @brief Register Control_2
|
mcm |
1:161eb44e3909
|
313
|
*/
|
mcm |
1:161eb44e3909
|
314
|
/* MI <5>: MINUTE INTERRUPT
|
mcm |
1:161eb44e3909
|
315
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
316
|
*/
|
mcm |
1:161eb44e3909
|
317
|
typedef enum {
|
mcm |
1:161eb44e3909
|
318
|
CONTROL_2_MI_MASK = ( 1U << 5U ), /*!< MI mask */
|
mcm |
1:161eb44e3909
|
319
|
CONTROL_2_MI_MINUTE_INTERRUPT_DISABLED = ( 0U << 5U ), /*!< Minute interrupt disabled [ Default ] */
|
mcm |
1:161eb44e3909
|
320
|
CONTROL_2_MI_MINUTE_INTERRUPT_ENABLED = ( 1U << 5U ) /*!< Minute interrupt enabled */
|
mcm |
1:161eb44e3909
|
321
|
} PCF85063_control_2_mi_t;
|
mcm |
1:161eb44e3909
|
322
|
|
mcm |
1:161eb44e3909
|
323
|
|
mcm |
1:161eb44e3909
|
324
|
|
mcm |
1:161eb44e3909
|
325
|
/* HMI <4>: HALF MINUTE INTERRUPT
|
mcm |
1:161eb44e3909
|
326
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
327
|
*/
|
mcm |
1:161eb44e3909
|
328
|
typedef enum {
|
mcm |
1:161eb44e3909
|
329
|
CONTROL_2_HMI_MASK = ( 1U << 4U ), /*!< HMI mask */
|
mcm |
1:161eb44e3909
|
330
|
CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_DISABLED = ( 0U << 4U ), /*!< Half Minute interrupt disabled [ Default ] */
|
mcm |
1:161eb44e3909
|
331
|
CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_ENABLED = ( 1U << 4U ) /*!< Half Minute interrupt enabled */
|
mcm |
1:161eb44e3909
|
332
|
} PCF85063_control_2_hmi_t;
|
mcm |
1:161eb44e3909
|
333
|
|
mcm |
1:161eb44e3909
|
334
|
|
mcm |
1:161eb44e3909
|
335
|
|
mcm |
1:161eb44e3909
|
336
|
/* TF <3>: TIMER FLAG
|
mcm |
1:161eb44e3909
|
337
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
338
|
*/
|
mcm |
1:161eb44e3909
|
339
|
typedef enum {
|
mcm |
1:161eb44e3909
|
340
|
CONTROL_2_TF_MASK = ( 1U << 3U ), /*!< TF mask */
|
mcm |
1:161eb44e3909
|
341
|
CONTROL_2_TF_TIMER_INTERRUPT_NOT_GENERATED = ( 0U << 3U ), /*!< No Timer interrupt generated [ Default ] */
|
mcm |
1:161eb44e3909
|
342
|
CONTROL_2_TF_TIMER_INTERRUPT_GENERATED = ( 1U << 3U ) /*!< Timer interrupt generated */
|
mcm |
1:161eb44e3909
|
343
|
} PCF85063_control_2_tf_t;
|
mcm |
1:161eb44e3909
|
344
|
|
mcm |
1:161eb44e3909
|
345
|
|
mcm |
1:161eb44e3909
|
346
|
|
mcm |
1:161eb44e3909
|
347
|
/* COF <2:0>: CLKOUT CONTROL
|
mcm |
1:161eb44e3909
|
348
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
349
|
*/
|
mcm |
1:161eb44e3909
|
350
|
typedef enum {
|
mcm |
1:161eb44e3909
|
351
|
CONTROL_2_COF_MASK = ( 0b111 << 0U ), /*!< COF mask */
|
mcm |
1:161eb44e3909
|
352
|
CONTROL_2_COF_CLKOUT_32768_HZ = ( 0b000 << 0U ), /*!< CLKOUT: 32768 Hz [ Default ] */
|
mcm |
1:161eb44e3909
|
353
|
CONTROL_2_COF_CLKOUT_16384_HZ = ( 0b001 << 0U ), /*!< CLKOUT: 16384 Hz */
|
mcm |
1:161eb44e3909
|
354
|
CONTROL_2_COF_CLKOUT_8192_HZ = ( 0b010 << 0U ), /*!< CLKOUT: 8192 Hz */
|
mcm |
1:161eb44e3909
|
355
|
CONTROL_2_COF_CLKOUT_4096_HZ = ( 0b011 << 0U ), /*!< CLKOUT: 4096 Hz */
|
mcm |
1:161eb44e3909
|
356
|
CONTROL_2_COF_CLKOUT_2048_HZ = ( 0b100 << 0U ), /*!< CLKOUT: 2048 Hz */
|
mcm |
1:161eb44e3909
|
357
|
CONTROL_2_COF_CLKOUT_1024_HZ = ( 0b101 << 0U ), /*!< CLKOUT: 1024 Hz */
|
mcm |
1:161eb44e3909
|
358
|
CONTROL_2_COF_CLKOUT_1_HZ = ( 0b110 << 0U ), /*!< CLKOUT: 1 Hz */
|
mcm |
1:161eb44e3909
|
359
|
CONTROL_2_COF_CLKOUT_LOW = ( 0b111 << 0U ) /*!< CLKOUT: LOW */
|
mcm |
1:161eb44e3909
|
360
|
} PCF85063_control_2_cof_t;
|
mcm |
1:161eb44e3909
|
361
|
|
mcm |
1:161eb44e3909
|
362
|
|
mcm |
1:161eb44e3909
|
363
|
|
mcm |
1:161eb44e3909
|
364
|
/**
|
mcm |
1:161eb44e3909
|
365
|
* @brief Register Offset
|
mcm |
1:161eb44e3909
|
366
|
*/
|
mcm |
1:161eb44e3909
|
367
|
/* MODE <7>: OFFSET MODE
|
mcm |
1:161eb44e3909
|
368
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
369
|
*/
|
mcm |
1:161eb44e3909
|
370
|
typedef enum {
|
mcm |
1:161eb44e3909
|
371
|
OFFSET_MODE_MASK = ( 1U << 7U ), /*!< MODE mask */
|
mcm |
1:161eb44e3909
|
372
|
OFFSET_MODE_NORMAL_MODE = ( 0U << 7U ), /*!< Normal mode: offset is made once every two hours[ Default ] */
|
mcm |
1:161eb44e3909
|
373
|
OFFSET_MODE_COURSE_MODE = ( 1U << 7U ) /*!< Course mode: offset is made every 4 minutes */
|
mcm |
1:161eb44e3909
|
374
|
} PCF85063_offset_mode_t;
|
mcm |
1:161eb44e3909
|
375
|
|
mcm |
1:161eb44e3909
|
376
|
|
mcm |
1:161eb44e3909
|
377
|
|
mcm |
1:161eb44e3909
|
378
|
/**
|
mcm |
1:161eb44e3909
|
379
|
* @brief Register RAM_byte
|
mcm |
1:161eb44e3909
|
380
|
*/
|
mcm |
1:161eb44e3909
|
381
|
/* B <7:0>: RAM CONTENT
|
mcm |
1:161eb44e3909
|
382
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
383
|
*/
|
mcm |
1:161eb44e3909
|
384
|
typedef enum {
|
mcm |
1:161eb44e3909
|
385
|
RAM_BYTE_B_MASK = 0xFF /*!< RAM_byte mask */
|
mcm |
1:161eb44e3909
|
386
|
} PCF85063_ram_byte_b_t;
|
mcm |
1:161eb44e3909
|
387
|
|
mcm |
1:161eb44e3909
|
388
|
|
mcm |
1:161eb44e3909
|
389
|
|
mcm |
1:161eb44e3909
|
390
|
/**
|
mcm |
1:161eb44e3909
|
391
|
* @brief Register Seconds
|
mcm |
1:161eb44e3909
|
392
|
*/
|
mcm |
1:161eb44e3909
|
393
|
/* OS <7>: OSCILLATOR STOP
|
mcm |
1:161eb44e3909
|
394
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
395
|
*/
|
mcm |
1:161eb44e3909
|
396
|
typedef enum {
|
mcm |
1:161eb44e3909
|
397
|
SECONDS_OS_MASK = ( 1U << 7U ), /*!< OS mask */
|
mcm |
1:161eb44e3909
|
398
|
SECONDS_OS_CLOCK_INTEGRITY_IS_GUARANTEED = ( 0U << 7U ), /*!< Clock integrity is guaranteed */
|
mcm |
1:161eb44e3909
|
399
|
SECONDS_OS_CLOCK_INTEGRITY_NOT_GUARANTEED = ( 1U << 7U ) /*!< Clock integrity is not guaranteed, oscillator has stopped or has been interrupted [ Default ] */
|
mcm |
1:161eb44e3909
|
400
|
} PCF85063_seconds_os_t;
|
mcm |
1:161eb44e3909
|
401
|
|
mcm |
1:161eb44e3909
|
402
|
|
mcm |
1:161eb44e3909
|
403
|
|
mcm |
1:161eb44e3909
|
404
|
/* SECONDS, TEN'S PLACE <6:4>: ACTUAL SECONDS, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
405
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
406
|
*/
|
mcm |
1:161eb44e3909
|
407
|
typedef enum {
|
mcm |
1:161eb44e3909
|
408
|
SECONDS_SECONDS_TEN_PLACE_MASK = ( 0b111 << 4U ) /*!< SECONDS TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
409
|
} PCF85063_seconds_ten_place_t;
|
mcm |
1:161eb44e3909
|
410
|
|
mcm |
1:161eb44e3909
|
411
|
|
mcm |
1:161eb44e3909
|
412
|
|
mcm |
1:161eb44e3909
|
413
|
/* SECONDS, UNIT PLACE <3:0>: ACTUAL SECONDS, UNIT PLACE
|
mcm |
1:161eb44e3909
|
414
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
415
|
*/
|
mcm |
1:161eb44e3909
|
416
|
typedef enum {
|
mcm |
1:161eb44e3909
|
417
|
SECONDS_SECONDS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< SECONDS UNIT PLACE mask */
|
mcm |
1:161eb44e3909
|
418
|
} PCF85063_seconds_unit_place_t;
|
mcm |
1:161eb44e3909
|
419
|
|
mcm |
1:161eb44e3909
|
420
|
|
mcm |
1:161eb44e3909
|
421
|
|
mcm |
1:161eb44e3909
|
422
|
/**
|
mcm |
1:161eb44e3909
|
423
|
* @brief Register Minutes
|
mcm |
1:161eb44e3909
|
424
|
*/
|
mcm |
1:161eb44e3909
|
425
|
/* MINUTES, TEN'S PLACE <6:4>: ACTUAL MINUTES, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
426
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
427
|
*/
|
mcm |
1:161eb44e3909
|
428
|
typedef enum {
|
mcm |
1:161eb44e3909
|
429
|
MINUTES_MINUTES_TEN_PLACE_MASK = ( 0b111 << 4U ) /*!< MINUTES TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
430
|
} PCF85063_minutes_ten_place_t;
|
mcm |
1:161eb44e3909
|
431
|
|
mcm |
1:161eb44e3909
|
432
|
|
mcm |
1:161eb44e3909
|
433
|
|
mcm |
1:161eb44e3909
|
434
|
/* MINUTES, UNIT PLACE <3:0>: ACTUAL MINUTES, UNIT PLACE
|
mcm |
1:161eb44e3909
|
435
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
436
|
*/
|
mcm |
1:161eb44e3909
|
437
|
typedef enum {
|
mcm |
1:161eb44e3909
|
438
|
MINUTES_MINUTES_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< MINUTES UNIT PLACE mask */
|
mcm |
1:161eb44e3909
|
439
|
} PCF85063_minutes_unit_place_t;
|
mcm |
1:161eb44e3909
|
440
|
|
mcm |
1:161eb44e3909
|
441
|
|
mcm |
1:161eb44e3909
|
442
|
|
mcm |
1:161eb44e3909
|
443
|
/**
|
mcm |
1:161eb44e3909
|
444
|
* @brief Register HOURS
|
mcm |
1:161eb44e3909
|
445
|
*/
|
mcm |
1:161eb44e3909
|
446
|
/* AMPM <5>: AM/PM INDICATOR
|
mcm |
1:161eb44e3909
|
447
|
* NOTE: ONLY FOR 12-HOUR MODE.
|
mcm |
1:161eb44e3909
|
448
|
*/
|
mcm |
1:161eb44e3909
|
449
|
typedef enum {
|
mcm |
1:161eb44e3909
|
450
|
HOURS_AMPM_MASK = ( 1U << 5U ), /*!< AMPM mask */
|
mcm |
1:161eb44e3909
|
451
|
HOURS_AMPM_AM = ( 0U << 5U ), /*!< AMPM: AM mode */
|
mcm |
1:161eb44e3909
|
452
|
HOURS_AMPM_PM = ( 1U << 5U ) /*!< AMPM: PM mode */
|
mcm |
1:161eb44e3909
|
453
|
} PCF85063_hours_ampm_t;
|
mcm |
1:161eb44e3909
|
454
|
|
mcm |
1:161eb44e3909
|
455
|
|
mcm |
1:161eb44e3909
|
456
|
|
mcm |
1:161eb44e3909
|
457
|
/* HOURS, TEN'S PLACE <4>: ACTUAL HOURS, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
458
|
* NOTE: ONLY FOR 12-HOUR MODE, CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
459
|
*/
|
mcm |
1:161eb44e3909
|
460
|
typedef enum {
|
mcm |
1:161eb44e3909
|
461
|
HOURS_12_HOUR_MODE_TEN_PLACE_MASK = ( 1U << 4U ) /*!< Hours TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
462
|
} PCF85063_12_hour_mode_ten_place_t;
|
mcm |
1:161eb44e3909
|
463
|
|
mcm |
1:161eb44e3909
|
464
|
|
mcm |
1:161eb44e3909
|
465
|
|
mcm |
1:161eb44e3909
|
466
|
/* HOURS, TEN'S PLACE <5:4>: ACTUAL HOURS, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
467
|
* NOTE: ONLY FOR 24-HOUR MODE, CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
468
|
*/
|
mcm |
1:161eb44e3909
|
469
|
typedef enum {
|
mcm |
1:161eb44e3909
|
470
|
HOURS_24_HOUR_MODE_TEN_PLACE_MASK = ( 0b11 << 4U ) /*!< Hours TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
471
|
} PCF85063_24_hour_mode_ten_place_t;
|
mcm |
1:161eb44e3909
|
472
|
|
mcm |
1:161eb44e3909
|
473
|
|
mcm |
1:161eb44e3909
|
474
|
|
mcm |
1:161eb44e3909
|
475
|
/* HOURS, UNIT PLACE <3:0>: ACTUAL HOURS, UNIT PLACE
|
mcm |
1:161eb44e3909
|
476
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
477
|
*/
|
mcm |
1:161eb44e3909
|
478
|
typedef enum {
|
mcm |
1:161eb44e3909
|
479
|
HOURS_HOURS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< HOURS UNIT PLACE mask */
|
mcm |
1:161eb44e3909
|
480
|
} PCF85063_hours_unit_place_t;
|
mcm |
1:161eb44e3909
|
481
|
|
mcm |
1:161eb44e3909
|
482
|
|
mcm |
1:161eb44e3909
|
483
|
|
mcm |
1:161eb44e3909
|
484
|
/**
|
mcm |
1:161eb44e3909
|
485
|
* @brief Register Days
|
mcm |
1:161eb44e3909
|
486
|
*/
|
mcm |
1:161eb44e3909
|
487
|
/* DAYS, TEN'S PLACE <5:4>: ACTUAL DAYS, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
488
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
489
|
*/
|
mcm |
1:161eb44e3909
|
490
|
typedef enum {
|
mcm |
1:161eb44e3909
|
491
|
DAYS_DAYS_TEN_PLACE_MASK = ( 0b11 << 4U ) /*!< DAYS TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
492
|
} PCF85063_days_ten_place_t;
|
mcm |
1:161eb44e3909
|
493
|
|
mcm |
1:161eb44e3909
|
494
|
|
mcm |
1:161eb44e3909
|
495
|
|
mcm |
1:161eb44e3909
|
496
|
/* DAYS, UNIT PLACE <3:0>: ACTUAL DAYS, UNIT PLACE
|
mcm |
1:161eb44e3909
|
497
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
498
|
*/
|
mcm |
1:161eb44e3909
|
499
|
typedef enum {
|
mcm |
1:161eb44e3909
|
500
|
DAYS_DAYS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< DAYS UNIT PLACE mask */
|
mcm |
1:161eb44e3909
|
501
|
} PCF85063_days_unit_place_t;
|
mcm |
1:161eb44e3909
|
502
|
|
mcm |
1:161eb44e3909
|
503
|
|
mcm |
1:161eb44e3909
|
504
|
|
mcm |
1:161eb44e3909
|
505
|
/**
|
mcm |
1:161eb44e3909
|
506
|
* @brief Register Weekdays
|
mcm |
1:161eb44e3909
|
507
|
*/
|
mcm |
1:161eb44e3909
|
508
|
/* WEEKDAYS <2:0>: ACTUAL WEEKDAY
|
mcm |
1:161eb44e3909
|
509
|
* NOTE: N/A.
|
mcm |
1:161eb44e3909
|
510
|
*/
|
mcm |
1:161eb44e3909
|
511
|
typedef enum {
|
mcm |
1:161eb44e3909
|
512
|
WEEKDAYS_WEEKDAYS_MASK = ( 0b111 << 0U ), /*!< WEEKDAYS mask */
|
mcm |
1:161eb44e3909
|
513
|
WEEKDAYS_WEEKDAYS_SUNDAY = ( 0b000 << 0U ), /*!< WEEKDAYS Sunday */
|
mcm |
1:161eb44e3909
|
514
|
WEEKDAYS_WEEKDAYS_MONDAY = ( 0b001 << 0U ), /*!< WEEKDAYS Monday */
|
mcm |
1:161eb44e3909
|
515
|
WEEKDAYS_WEEKDAYS_TUESDAY = ( 0b010 << 0U ), /*!< WEEKDAYS Tuesday */
|
mcm |
1:161eb44e3909
|
516
|
WEEKDAYS_WEEKDAYS_WEDNESDAY = ( 0b011 << 0U ), /*!< WEEKDAYS Wednesday */
|
mcm |
1:161eb44e3909
|
517
|
WEEKDAYS_WEEKDAYS_THURSDAY = ( 0b100 << 0U ), /*!< WEEKDAYS Thursday */
|
mcm |
1:161eb44e3909
|
518
|
WEEKDAYS_WEEKDAYS_FRIDAY = ( 0b101 << 0U ), /*!< WEEKDAYS Friday */
|
mcm |
1:161eb44e3909
|
519
|
WEEKDAYS_WEEKDAYS_SATURDAY = ( 0b111 << 0U ) /*!< WEEKDAYS Saturday [ Default ] */
|
mcm |
1:161eb44e3909
|
520
|
} PCF85063_weekdays_weekdays_t;
|
mcm |
1:161eb44e3909
|
521
|
|
mcm |
1:161eb44e3909
|
522
|
|
mcm |
1:161eb44e3909
|
523
|
|
mcm |
1:161eb44e3909
|
524
|
/**
|
mcm |
1:161eb44e3909
|
525
|
* @brief Register Months
|
mcm |
1:161eb44e3909
|
526
|
*/
|
mcm |
1:161eb44e3909
|
527
|
/* MONTHS <4:0>: ACTUAL MONTH
|
mcm |
1:161eb44e3909
|
528
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
529
|
*/
|
mcm |
1:161eb44e3909
|
530
|
typedef enum {
|
mcm |
1:161eb44e3909
|
531
|
MONTHS_MONTHS_MASK = ( 0b11111 << 0U ), /*!< MONTHS mask */
|
mcm |
1:161eb44e3909
|
532
|
MONTHS_MONTHS_JANUARY = ( 0b00001 << 0U ), /*!< MONTHS January [ Default ] */
|
mcm |
1:161eb44e3909
|
533
|
MONTHS_MONTHS_FEBRUARY = ( 0b00010 << 0U ), /*!< MONTHS February */
|
mcm |
1:161eb44e3909
|
534
|
MONTHS_MONTHS_MARCH = ( 0b00011 << 0U ), /*!< MONTHS March */
|
mcm |
1:161eb44e3909
|
535
|
MONTHS_MONTHS_APRIL = ( 0b00100 << 0U ), /*!< MONTHS April */
|
mcm |
1:161eb44e3909
|
536
|
MONTHS_MONTHS_MAY = ( 0b00101 << 0U ), /*!< MONTHS May */
|
mcm |
1:161eb44e3909
|
537
|
MONTHS_MONTHS_JUNE = ( 0b00110 << 0U ), /*!< MONTHS June */
|
mcm |
1:161eb44e3909
|
538
|
MONTHS_MONTHS_JULY = ( 0b00111 << 0U ), /*!< MONTHS July */
|
mcm |
1:161eb44e3909
|
539
|
MONTHS_MONTHS_AUGUST = ( 0b01000 << 0U ), /*!< MONTHS August */
|
mcm |
1:161eb44e3909
|
540
|
MONTHS_MONTHS_SEPTEMBER = ( 0b01001 << 0U ), /*!< MONTHS September */
|
mcm |
1:161eb44e3909
|
541
|
MONTHS_MONTHS_OCTOBER = ( 0b10000 << 0U ), /*!< MONTHS October */
|
mcm |
1:161eb44e3909
|
542
|
MONTHS_MONTHS_NOVEMBER = ( 0b10001 << 0U ), /*!< MONTHS November */
|
mcm |
1:161eb44e3909
|
543
|
MONTHS_MONTHS_DECEMBER = ( 0b10010 << 0U ) /*!< MONTHS December */
|
mcm |
1:161eb44e3909
|
544
|
} PCF85063_months_months_t;
|
mcm |
1:161eb44e3909
|
545
|
|
mcm |
1:161eb44e3909
|
546
|
|
mcm |
1:161eb44e3909
|
547
|
|
mcm |
1:161eb44e3909
|
548
|
/**
|
mcm |
1:161eb44e3909
|
549
|
* @brief Register Years
|
mcm |
1:161eb44e3909
|
550
|
*/
|
mcm |
1:161eb44e3909
|
551
|
/* YEARS, TEN'S PLACE <7:4>: ACTUAL YEARS, TEN'S PLACE
|
mcm |
1:161eb44e3909
|
552
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
553
|
*/
|
mcm |
1:161eb44e3909
|
554
|
typedef enum {
|
mcm |
1:161eb44e3909
|
555
|
YEARS_YEARS_TEN_PLACE_MASK = ( 0b1111 << 4U ) /*!< YEARS TEN'S PLACE mask */
|
mcm |
1:161eb44e3909
|
556
|
} PCF85063_years_ten_place_t;
|
mcm |
1:161eb44e3909
|
557
|
|
mcm |
1:161eb44e3909
|
558
|
|
mcm |
1:161eb44e3909
|
559
|
|
mcm |
1:161eb44e3909
|
560
|
/* YEARS, UNIT PLACE <3:0>: ACTUAL YEARS, UNIT PLACE
|
mcm |
1:161eb44e3909
|
561
|
* NOTE: CODED IN BCD FORMAT.
|
mcm |
1:161eb44e3909
|
562
|
*/
|
mcm |
1:161eb44e3909
|
563
|
typedef enum {
|
mcm |
1:161eb44e3909
|
564
|
YEARS_YEARS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< YEARS UNIT PLACE mask */
|
mcm |
1:161eb44e3909
|
565
|
} PCF85063_years_unit_place_t;
|
mcm |
1:161eb44e3909
|
566
|
|
mcm |
1:161eb44e3909
|
567
|
|
mcm |
1:161eb44e3909
|
568
|
|
mcm |
1:161eb44e3909
|
569
|
|
mcm |
1:161eb44e3909
|
570
|
|
mcm |
1:161eb44e3909
|
571
|
#ifndef PCF85063_VECTOR_STRUCT_H
|
mcm |
1:161eb44e3909
|
572
|
#define PCF85063_VECTOR_STRUCT_H
|
mcm |
1:161eb44e3909
|
573
|
typedef struct {
|
mcm |
1:161eb44e3909
|
574
|
PCF85063_control_1_12_24_t Time12H_24HMode; /*!< Time mode: 12-hour or 24-hour mode */
|
mcm |
1:161eb44e3909
|
575
|
PCF85063_hours_ampm_t TimeAM_PM_Mode; /*!< AM/PM mode ( only for 12-hour mode ) */
|
mcm |
1:161eb44e3909
|
576
|
|
mcm |
1:161eb44e3909
|
577
|
uint32_t BCDtime; /*!< Time ( HHMMSS ) in BCD format */
|
mcm |
1:161eb44e3909
|
578
|
uint8_t BCDday; /*!< Day number in BCD format */
|
mcm |
1:161eb44e3909
|
579
|
PCF85063_weekdays_weekdays_t weekday; /*!< Weekday */
|
mcm |
1:161eb44e3909
|
580
|
PCF85063_months_months_t BCDmonth; /*!< Month in BCD format */
|
mcm |
1:161eb44e3909
|
581
|
uint8_t BCDyear; /*!< Year in BCD format */
|
mcm |
1:161eb44e3909
|
582
|
|
mcm |
1:161eb44e3909
|
583
|
int8_t ramByte; /*!< RAM byte */
|
mcm |
1:161eb44e3909
|
584
|
PCF85063_seconds_os_t os; /*!< Oscillator flag */
|
mcm |
1:161eb44e3909
|
585
|
} PCF85063_data_t;
|
mcm |
1:161eb44e3909
|
586
|
#endif
|
mcm |
1:161eb44e3909
|
587
|
|
mcm |
1:161eb44e3909
|
588
|
|
mcm |
1:161eb44e3909
|
589
|
/**
|
mcm |
1:161eb44e3909
|
590
|
* @brief INTERNAL CONSTANTS
|
mcm |
1:161eb44e3909
|
591
|
*/
|
mcm |
1:161eb44e3909
|
592
|
typedef enum {
|
mcm |
1:161eb44e3909
|
593
|
PCF85063_SUCCESS = 0,
|
mcm |
1:161eb44e3909
|
594
|
PCF85063_FAILURE = 1,
|
mcm |
1:161eb44e3909
|
595
|
I2C_SUCCESS = 0 /*!< I2C communication was fine */
|
mcm |
1:161eb44e3909
|
596
|
} PCF85063_status_t;
|
mcm |
1:161eb44e3909
|
597
|
|
mcm |
1:161eb44e3909
|
598
|
|
mcm |
1:161eb44e3909
|
599
|
|
mcm |
1:161eb44e3909
|
600
|
|
mcm |
1:161eb44e3909
|
601
|
/** Create an PCF85063 object connected to the specified I2C pins.
|
mcm |
1:161eb44e3909
|
602
|
*
|
mcm |
1:161eb44e3909
|
603
|
* @param sda I2C data pin
|
mcm |
1:161eb44e3909
|
604
|
* @param scl I2C clock pin
|
mcm |
1:161eb44e3909
|
605
|
* @param addr I2C slave address
|
mcm |
1:161eb44e3909
|
606
|
* @param freq I2C frequency
|
mcm |
1:161eb44e3909
|
607
|
*/
|
mcm |
1:161eb44e3909
|
608
|
PCF85063 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
|
mcm |
1:161eb44e3909
|
609
|
|
mcm |
1:161eb44e3909
|
610
|
/** Delete PCF85063 object.
|
mcm |
1:161eb44e3909
|
611
|
*/
|
mcm |
1:161eb44e3909
|
612
|
~PCF85063();
|
mcm |
1:161eb44e3909
|
613
|
|
mcm |
1:161eb44e3909
|
614
|
/** It sets the external clock test mode.
|
mcm |
1:161eb44e3909
|
615
|
*/
|
mcm |
1:161eb44e3909
|
616
|
PCF85063_status_t PCF85063_SetTestMode ( PCF85063_control_1_ext_test_t myEXT_TEST );
|
mcm |
1:161eb44e3909
|
617
|
|
mcm |
1:161eb44e3909
|
618
|
/** It sets the RTC clock mode.
|
mcm |
1:161eb44e3909
|
619
|
*/
|
mcm |
1:161eb44e3909
|
620
|
PCF85063_status_t PCF85063_SetRTCMode ( PCF85063_control_1_stop_t mySTOP );
|
mcm |
1:161eb44e3909
|
621
|
|
mcm |
1:161eb44e3909
|
622
|
/** It performs a software reset.
|
mcm |
1:161eb44e3909
|
623
|
*/
|
mcm |
1:161eb44e3909
|
624
|
PCF85063_status_t PCF85063_SoftwareReset ( void );
|
mcm |
1:161eb44e3909
|
625
|
|
mcm |
1:161eb44e3909
|
626
|
/** It sets the correction interrupt mode.
|
mcm |
1:161eb44e3909
|
627
|
*/
|
mcm |
1:161eb44e3909
|
628
|
PCF85063_status_t PCF85063_SetCorrectionInterruptMode ( PCF85063_control_1_cie_t myCIE );
|
mcm |
1:161eb44e3909
|
629
|
|
mcm |
1:161eb44e3909
|
630
|
/** It sets 12 or 24 hour mode.
|
mcm |
1:161eb44e3909
|
631
|
*/
|
mcm |
1:161eb44e3909
|
632
|
PCF85063_status_t PCF85063_Set12_24_HourMode ( PCF85063_data_t my12_24 );
|
mcm |
1:161eb44e3909
|
633
|
|
mcm |
1:161eb44e3909
|
634
|
/** It sets the internal oscillator capacitor.
|
mcm |
1:161eb44e3909
|
635
|
*/
|
mcm |
1:161eb44e3909
|
636
|
PCF85063_status_t PCF85063_SetInternalOscillatorCapacitor ( PCF85063_control_1_cap_sel_t myCAP_SEL );
|
mcm |
1:161eb44e3909
|
637
|
|
mcm |
1:161eb44e3909
|
638
|
/** It enables/disables minute/half minute interrupt.
|
mcm |
1:161eb44e3909
|
639
|
*/
|
mcm |
1:161eb44e3909
|
640
|
PCF85063_status_t PCF85063_SetMinuteInterrupts ( PCF85063_control_2_mi_t myMI, PCF85063_control_2_hmi_t myHMI );
|
mcm |
1:161eb44e3909
|
641
|
|
mcm |
1:161eb44e3909
|
642
|
/** It gets the status of the timer flag.
|
mcm |
1:161eb44e3909
|
643
|
*/
|
mcm |
1:161eb44e3909
|
644
|
PCF85063_status_t PCF85063_GetTimerFlag ( PCF85063_control_2_tf_t* myTF );
|
mcm |
1:161eb44e3909
|
645
|
|
mcm |
1:161eb44e3909
|
646
|
/** It resets the status of the timer flag.
|
mcm |
1:161eb44e3909
|
647
|
*/
|
mcm |
1:161eb44e3909
|
648
|
PCF85063_status_t PCF85063_ClearTimerFlag ( void );
|
mcm |
1:161eb44e3909
|
649
|
|
mcm |
1:161eb44e3909
|
650
|
/** It sets the clock output frequency.
|
mcm |
1:161eb44e3909
|
651
|
*/
|
mcm |
1:161eb44e3909
|
652
|
PCF85063_status_t PCF85063_SetClockOutputFrequency ( PCF85063_control_2_cof_t myCOF );
|
mcm |
1:161eb44e3909
|
653
|
|
mcm |
1:161eb44e3909
|
654
|
/** It sets the offset.
|
mcm |
1:161eb44e3909
|
655
|
*/
|
mcm |
1:161eb44e3909
|
656
|
PCF85063_status_t PCF85063_SetOffset ( PCF85063_offset_mode_t myMODE, int8_t myOFFSET );
|
mcm |
1:161eb44e3909
|
657
|
|
mcm |
1:161eb44e3909
|
658
|
/** It writes into the RAM byte register.
|
mcm |
1:161eb44e3909
|
659
|
*/
|
mcm |
1:161eb44e3909
|
660
|
PCF85063_status_t PCF85063_WriteByteRAM ( PCF85063_data_t myData );
|
mcm |
1:161eb44e3909
|
661
|
|
mcm |
1:161eb44e3909
|
662
|
/** It reads the RAM byte register.
|
mcm |
1:161eb44e3909
|
663
|
*/
|
mcm |
1:161eb44e3909
|
664
|
PCF85063_status_t PCF85063_ReadByteRAM ( PCF85063_data_t* myData );
|
mcm |
1:161eb44e3909
|
665
|
|
mcm |
1:161eb44e3909
|
666
|
/** It checks oscillator clock integrity flag.
|
mcm |
1:161eb44e3909
|
667
|
*/
|
mcm |
1:161eb44e3909
|
668
|
PCF85063_status_t PCF85063_CheckOscillatorClockIntegrityFlag ( PCF85063_data_t* myOS );
|
mcm |
1:161eb44e3909
|
669
|
|
mcm |
1:161eb44e3909
|
670
|
/** It clears oscillator clock integrity flag.
|
mcm |
1:161eb44e3909
|
671
|
*/
|
mcm |
1:161eb44e3909
|
672
|
PCF85063_status_t PCF85063_ClearOscillatorClockIntegrityFlag ( void );
|
mcm |
1:161eb44e3909
|
673
|
|
mcm |
1:161eb44e3909
|
674
|
/** It sets the AM/PM indicator ( only for 12-hour mode ).
|
mcm |
1:161eb44e3909
|
675
|
*/
|
mcm |
1:161eb44e3909
|
676
|
PCF85063_status_t PCF85063_SetAM_PM_Indicator ( PCF85063_data_t myAM_PM_Indicator );
|
mcm |
1:161eb44e3909
|
677
|
|
mcm |
1:161eb44e3909
|
678
|
/** It gets the AM/PM indicator ( only for 12-hour mode ).
|
mcm |
1:161eb44e3909
|
679
|
*/
|
mcm |
1:161eb44e3909
|
680
|
PCF85063_status_t PCF85063_GetAM_PM_Indicator ( PCF85063_data_t* myAM_PM_Indicator );
|
mcm |
1:161eb44e3909
|
681
|
|
mcm |
1:161eb44e3909
|
682
|
/** It gets the day ( BCD format ).
|
mcm |
1:161eb44e3909
|
683
|
*/
|
mcm |
1:161eb44e3909
|
684
|
PCF85063_status_t PCF85063_GetDay ( PCF85063_data_t* myActualDay );
|
mcm |
1:161eb44e3909
|
685
|
|
mcm |
1:161eb44e3909
|
686
|
/** It sets the day ( BCD format ).
|
mcm |
1:161eb44e3909
|
687
|
*/
|
mcm |
1:161eb44e3909
|
688
|
PCF85063_status_t PCF85063_SetDay ( PCF85063_data_t myNewDay );
|
mcm |
1:161eb44e3909
|
689
|
|
mcm |
1:161eb44e3909
|
690
|
/** It gets the weekday.
|
mcm |
1:161eb44e3909
|
691
|
*/
|
mcm |
1:161eb44e3909
|
692
|
PCF85063_status_t PCF85063_GetWeekday ( PCF85063_data_t* myActualWeekday );
|
mcm |
1:161eb44e3909
|
693
|
|
mcm |
1:161eb44e3909
|
694
|
/** It sets the weekday.
|
mcm |
1:161eb44e3909
|
695
|
*/
|
mcm |
1:161eb44e3909
|
696
|
PCF85063_status_t PCF85063_SetWeekday ( PCF85063_data_t myNewWeekday );
|
mcm |
1:161eb44e3909
|
697
|
|
mcm |
1:161eb44e3909
|
698
|
/** It gets the month ( BCD format ).
|
mcm |
1:161eb44e3909
|
699
|
*/
|
mcm |
1:161eb44e3909
|
700
|
PCF85063_status_t PCF85063_GetMonth ( PCF85063_data_t* myActualMonth );
|
mcm |
1:161eb44e3909
|
701
|
|
mcm |
1:161eb44e3909
|
702
|
/** It sets the month ( BCD format ).
|
mcm |
1:161eb44e3909
|
703
|
*/
|
mcm |
1:161eb44e3909
|
704
|
PCF85063_status_t PCF85063_SetMonth ( PCF85063_data_t myNewMonth );
|
mcm |
1:161eb44e3909
|
705
|
|
mcm |
1:161eb44e3909
|
706
|
/** It gets the time ( BCD format ).
|
mcm |
1:161eb44e3909
|
707
|
*/
|
mcm |
1:161eb44e3909
|
708
|
PCF85063_status_t PCF85063_GetTime ( PCF85063_data_t* myActualTime );
|
mcm |
1:161eb44e3909
|
709
|
|
mcm |
1:161eb44e3909
|
710
|
/** It sets the time ( BCD format ).
|
mcm |
1:161eb44e3909
|
711
|
*/
|
mcm |
1:161eb44e3909
|
712
|
PCF85063_status_t PCF85063_SetTime ( PCF85063_data_t myNewTime );
|
mcm |
1:161eb44e3909
|
713
|
|
mcm |
1:161eb44e3909
|
714
|
/** It gets the year ( BCD format ).
|
mcm |
1:161eb44e3909
|
715
|
*/
|
mcm |
1:161eb44e3909
|
716
|
PCF85063_status_t PCF85063_GetYear ( PCF85063_data_t* myActualYear );
|
mcm |
1:161eb44e3909
|
717
|
|
mcm |
1:161eb44e3909
|
718
|
/** It sets the year ( BCD format ).
|
mcm |
1:161eb44e3909
|
719
|
*/
|
mcm |
1:161eb44e3909
|
720
|
PCF85063_status_t PCF85063_SetYear ( PCF85063_data_t myNewYear );
|
mcm |
1:161eb44e3909
|
721
|
|
mcm |
1:161eb44e3909
|
722
|
|
mcm |
1:161eb44e3909
|
723
|
|
mcm |
1:161eb44e3909
|
724
|
|
mcm |
1:161eb44e3909
|
725
|
private:
|
mcm |
1:161eb44e3909
|
726
|
I2C _i2c;
|
mcm |
1:161eb44e3909
|
727
|
uint32_t _PCF85063_Addr;
|
mcm |
1:161eb44e3909
|
728
|
};
|
mcm |
1:161eb44e3909
|
729
|
|
mcm |
1:161eb44e3909
|
730
|
#endif
|