Tiny Real-Time Clock/calendar

Committer:
mcm
Date:
Fri Apr 12 14:08:54 2019 +0000
Revision:
4:a5c06ac163f1
Parent:
1:161eb44e3909
The driver was completed and tested (using a NUCLEO-L152RE board), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew 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