Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
PCF85063.h
00001 /** 00002 * @brief PCF85063.h 00003 * @details Tiny Real-Time Clock/calendar. 00004 * Header file. 00005 * 00006 * 00007 * @return N/A 00008 * 00009 * @author Manuel Caballero 00010 * @date 19/February/2019 00011 * @version 19/February/2019 The ORIGIN 00012 * @pre N/A. 00013 * @warning N/A 00014 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). All rights reserved. 00015 */ 00016 #ifndef PCF85063_H 00017 #define PCF85063_H 00018 00019 #include "mbed.h" 00020 00021 00022 /** 00023 Example: 00024 @code 00025 #include "mbed.h" 00026 #include "PCF85063.h" 00027 00028 PCF85063 myPCF85063 ( I2C_SDA, I2C_SCL, PCF85063::PCF85063_ADDRESS, 400000 ); // I2C_SDA | I2C_SCL 00029 Serial pc ( USBTX, USBRX ); // tx, rx 00030 00031 DigitalOut myled ( LED1 ); 00032 Ticker newAction; 00033 00034 00035 // @brief Constants. 00036 00037 00038 // @brief Variables. 00039 volatile uint32_t myState; // State that indicates when to perform an ADC sample 00040 00041 00042 // @brief FUNCTION PROTOTYPES 00043 void changeDATA ( void ); 00044 00045 00046 00047 // @brief FUNCTION FOR APPLICATION MAIN ENTRY. 00048 int main() 00049 { 00050 static const char* MY_WEEK_DAY_STRING[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; 00051 00052 PCF85063::PCF85063_status_t aux; 00053 PCF85063::PCF85063_data_t myPCF85063_Data; 00054 00055 pc.baud ( 115200 ); 00056 00057 00058 myled = 1; 00059 wait(3); 00060 myled = 0; 00061 00062 // Perform a software reset 00063 aux = myPCF85063.PCF85063_SoftwareReset (); 00064 00065 // Wait until the oscillator is stable 00066 do { 00067 // Clear Clock integrity flag. 00068 aux = myPCF85063.PCF85063_ClearOscillatorClockIntegrityFlag (); 00069 00070 // Check Clock integrity flag. 00071 aux = myPCF85063.PCF85063_CheckOscillatorClockIntegrityFlag ( &myPCF85063_Data ); 00072 } while( myPCF85063_Data.os == PCF85063::SECONDS_OS_CLOCK_INTEGRITY_NOT_GUARANTEED ); 00073 00074 // External clock test mode: Normal mode ( no test at all ) 00075 aux = myPCF85063.PCF85063_SetTestMode ( PCF85063::CONTROL_1_EXT_TEST_NORMAL_MODE ); 00076 00077 // RTC clock is enabled 00078 aux = myPCF85063.PCF85063_SetRTCMode ( PCF85063::CONTROL_1_STOP_RTC_CLOCK_RUNS ); 00079 00080 // No correction interrupt generated 00081 aux = myPCF85063.PCF85063_SetCorrectionInterruptMode ( PCF85063::CONTROL_1_CIE_NO_CORRECTION_INTERRUPT_GENERATED ); 00082 00083 // 24 hour mode is selected 00084 myPCF85063_Data.Time12H_24HMode = PCF85063::CONTROL_1_12_24_24_HOUR_MODE; 00085 aux = myPCF85063.PCF85063_Set12_24_HourMode ( myPCF85063_Data ); 00086 00087 // Internal oscillator capacitor selection: 7 pF 00088 aux = myPCF85063.PCF85063_SetInternalOscillatorCapacitor ( PCF85063::CONTROL_1_CAP_SEL_7_PF ); 00089 00090 // Minute interrupt and half minute interrupt are disabled 00091 aux = myPCF85063.PCF85063_SetMinuteInterrupts ( PCF85063::CONTROL_2_MI_MINUTE_INTERRUPT_DISABLED, PCF85063::CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_DISABLED ); 00092 00093 // Clear timer flag 00094 aux = myPCF85063.PCF85063_ClearTimerFlag (); 00095 00096 // CLKOUT: 1Hz 00097 aux = myPCF85063.PCF85063_SetClockOutputFrequency ( PCF85063::CONTROL_2_COF_CLKOUT_1_HZ ); 00098 00099 // Normal mode offset at 0. 00100 aux = myPCF85063.PCF85063_SetOffset ( PCF85063::OFFSET_MODE_NORMAL_MODE, 0 ); 00101 00102 // Write data ( 0x23 ) into device's RAM 00103 myPCF85063_Data.ramByte = 0x23; 00104 aux = myPCF85063.PCF85063_WriteByteRAM ( myPCF85063_Data ); 00105 00106 // Read data from device's RAM 00107 myPCF85063_Data.ramByte = 0; // Reset the variable 00108 aux = myPCF85063.PCF85063_ReadByteRAM ( &myPCF85063_Data ); 00109 pc.printf ( "Data in RAM: %x (0x23)\r\n", myPCF85063_Data.ramByte ); 00110 00111 // Get day. After reset, we expect to get 0x01 00112 aux = myPCF85063.PCF85063_GetDay ( &myPCF85063_Data ); 00113 00114 // Set day: 23 00115 myPCF85063_Data.BCDday = 0x23; 00116 aux = myPCF85063.PCF85063_SetDay ( myPCF85063_Data ); 00117 00118 // Get month. After reset, we expect to get 0x01 ( January ) 00119 aux = myPCF85063.PCF85063_GetMonth ( &myPCF85063_Data ); 00120 00121 // Set month: September 00122 myPCF85063_Data.BCDmonth = PCF85063::MONTHS_MONTHS_SEPTEMBER; 00123 aux = myPCF85063.PCF85063_SetMonth ( myPCF85063_Data ); 00124 00125 // Get weekday. After reset, we expect to get Saturday 00126 aux = myPCF85063.PCF85063_GetWeekday ( &myPCF85063_Data ); 00127 00128 // Set weekday: Friday 00129 myPCF85063_Data.weekday = PCF85063::WEEKDAYS_WEEKDAYS_FRIDAY; 00130 aux = myPCF85063.PCF85063_SetWeekday ( myPCF85063_Data ); 00131 00132 // Get year. After reset, we expect to get 00 ( it corresponds to 2000 ) 00133 aux = myPCF85063.PCF85063_GetYear ( &myPCF85063_Data ); 00134 00135 // Set year: 19 ( 2019 ) 00136 myPCF85063_Data.BCDyear = 0x19; 00137 aux = myPCF85063.PCF85063_SetYear ( myPCF85063_Data ); 00138 00139 // Set time: 235955 ( 23:59:55 ) 00140 myPCF85063_Data.BCDtime = 0x235955; 00141 aux = myPCF85063.PCF85063_SetTime ( myPCF85063_Data ); 00142 00143 myState = 0UL; // Reset the variable 00144 newAction.attach( &changeDATA, 1U ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s ) 00145 00146 // Let the callbacks take care of everything 00147 while(1) { 00148 sleep(); 00149 00150 if ( myState == 1UL ) { 00151 myled = 1U; 00152 00153 // Get time 00154 aux = myPCF85063.PCF85063_GetTime ( &myPCF85063_Data ); 00155 00156 // Get day 00157 aux = myPCF85063.PCF85063_GetDay ( &myPCF85063_Data ); 00158 00159 // Get month 00160 aux = myPCF85063.PCF85063_GetMonth ( &myPCF85063_Data ); 00161 00162 // Get weekday 00163 aux = myPCF85063.PCF85063_GetWeekday ( &myPCF85063_Data ); 00164 00165 // Get year 00166 aux = myPCF85063.PCF85063_GetYear ( &myPCF85063_Data ); 00167 00168 // Final data 00169 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 ), 00170 ( myPCF85063_Data.BCDtime & 0x0000FF ), myPCF85063_Data.BCDmonth, myPCF85063_Data.BCDday, MY_WEEK_DAY_STRING[myPCF85063_Data.weekday], myPCF85063_Data.BCDyear ); 00171 00172 // Reset the variables 00173 myState = 0UL; 00174 myled = 0U; 00175 } 00176 } 00177 } 00178 00179 // @brief changeDATA ( void ) 00180 // 00181 // @details It changes myState variable 00182 // 00183 // @param[in] N/A 00184 // 00185 // @param[out] N/A. 00186 // 00187 // 00188 // @return N/A. 00189 // 00190 // 00191 // @author Manuel Caballero 00192 // @date 19/February/2019 00193 // @version 19/February/2019 The ORIGIN 00194 // @pre N/A 00195 // @warning N/A. 00196 // 00197 void changeDATA ( void ) 00198 { 00199 myState = 1UL; 00200 } 00201 @endcode 00202 */ 00203 00204 00205 /*! 00206 Library for the PCF85063 Tiny Real-Time Clock/calendar. 00207 */ 00208 class PCF85063 00209 { 00210 public: 00211 /** 00212 * @brief DEFAULT ADDRESS 00213 */ 00214 typedef enum { 00215 PCF85063_ADDRESS = ( 0b1010001 << 1U ) /*!< I2C slave address byte */ 00216 } PCF85063_address_t; 00217 00218 00219 00220 /** 00221 * @brief REGISTERS ORGANIZATION 00222 */ 00223 typedef enum { 00224 /* CONTROL AND STATUS REGISTERS */ 00225 PCF85063_CONTROL_1 = 0x00, /*!< Control and status register 1 */ 00226 PCF85063_CONTROL_2 = 0x01, /*!< Control and status register 2 */ 00227 PCF85063_OFFSET = 0x02, /*!< Offset register */ 00228 PCF85063_RAM_BYTE = 0x03, /*!< RAM byte register */ 00229 00230 /* TIME AND DATE REGISTERS */ 00231 PCF85063_SECONDS = 0x04, /*!< Seconds register */ 00232 PCF85063_MINUTES = 0x05, /*!< Minutes register */ 00233 PCF85063_HOURS = 0x06, /*!< Hours register */ 00234 PCF85063_DAYS = 0x07, /*!< Days register */ 00235 PCF85063_WEEKDAYS = 0x08, /*!< Weekdays register */ 00236 PCF85063_MONTHS = 0x09, /*!< Months register */ 00237 PCF85063_YEARS = 0x0A /*!< Years register */ 00238 } PCF85063_registers_organization_t; 00239 00240 00241 00242 /** 00243 * @brief Register Control_1 00244 */ 00245 /* EXT_TEST <7>: EXTERNAL CLOCK TEST MODE 00246 * NOTE: N/A. 00247 */ 00248 typedef enum { 00249 CONTROL_1_EXT_TEST_MASK = ( 1U << 7U ), /*!< EXT_TEST mask */ 00250 CONTROL_1_EXT_TEST_NORMAL_MODE = ( 0U << 7U ), /*!< EXT_TEST: normal mode [ Default ] */ 00251 CONTROL_1_EXT_TEST_EXTERNAL_CLOCK_TEST_MODE = ( 1U << 7U ) /*!< EXT_TEST: external clock test mode */ 00252 } PCF85063_control_1_ext_test_t; 00253 00254 00255 00256 /* STOP <5>: STOP BIT 00257 * NOTE: N/A. 00258 */ 00259 typedef enum { 00260 CONTROL_1_STOP_MASK = ( 1U << 5U ), /*!< STOP mask */ 00261 CONTROL_1_STOP_RTC_CLOCK_RUNS = ( 0U << 5U ), /*!< STOP: RTC clock runs [ Default ] */ 00262 CONTROL_1_STOP_RTC_CLOCK_STOPPED = ( 1U << 5U ) /*!< STOP: RTC clock is stopped */ 00263 } PCF85063_control_1_stop_t ; 00264 00265 00266 00267 /* SR <4>: SOFTWARE RESET 00268 * NOTE: N/A. 00269 */ 00270 typedef enum { 00271 CONTROL_1_SR_MASK = ( 1U << 4U ), /*!< SR mask */ 00272 CONTROL_1_SR_NO_SOFTWARE_RESET = ( 0U << 4U ), /*!< SR: no software reset [ Default ] */ 00273 CONTROL_1_SR_SOFTWARE_RESET = ( 1U << 4U ) /*!< SR: initiate software reset */ 00274 } PCF85063_control_1_sr_t ; 00275 00276 00277 00278 /* CIE <2>: CORRECTION INTERRUPT ENABLE 00279 * NOTE: N/A. 00280 */ 00281 typedef enum { 00282 CONTROL_1_CIE_MASK = ( 1U << 2U ), /*!< CIE mask */ 00283 CONTROL_1_CIE_NO_CORRECTION_INTERRUPT_GENERATED = ( 0U << 2U ), /*!< CIE: no correction interrupt generated [ Default ] */ 00284 CONTROL_1_CIE_INTERRUPT_PULSES_GENERATED = ( 1U << 2U ) /*!< CIE: interrupt pulses are generated at every correction cycle */ 00285 } PCF85063_control_1_cie_t ; 00286 00287 00288 00289 /* 12_24 <1>: SOFTWARE RESET 00290 * NOTE: N/A. 00291 */ 00292 typedef enum { 00293 CONTROL_1_12_24_MASK = ( 1U << 1U ), /*!< 12_24 mask */ 00294 CONTROL_1_12_24_24_HOUR_MODE = ( 0U << 1U ), /*!< 12_24: 24 hour mode is selected [ Default ] */ 00295 CONTROL_1_12_24_12_HOUR_MODE = ( 1U << 1U ) /*!< 12_24: 12 hour mode is selected */ 00296 } PCF85063_control_1_12_24_t ; 00297 00298 00299 00300 /* CAP_SEL <0>: INTERNAL OSCILLATOR CAPACITOR SELECTION 00301 * NOTE: N/A. 00302 */ 00303 typedef enum { 00304 CONTROL_1_CAP_SEL_MASK = ( 1U << 0U ), /*!< CAP_SEL mask */ 00305 CONTROL_1_CAP_SEL_7_PF = ( 0U << 0U ), /*!< CAP_SEL: 7 pF [ Default ] */ 00306 CONTROL_1_CAP_SEL_12_5_PF = ( 1U << 0U ) /*!< CAP_SEL: 12.5 pF */ 00307 } PCF85063_control_1_cap_sel_t ; 00308 00309 00310 00311 /** 00312 * @brief Register Control_2 00313 */ 00314 /* MI <5>: MINUTE INTERRUPT 00315 * NOTE: N/A. 00316 */ 00317 typedef enum { 00318 CONTROL_2_MI_MASK = ( 1U << 5U ), /*!< MI mask */ 00319 CONTROL_2_MI_MINUTE_INTERRUPT_DISABLED = ( 0U << 5U ), /*!< Minute interrupt disabled [ Default ] */ 00320 CONTROL_2_MI_MINUTE_INTERRUPT_ENABLED = ( 1U << 5U ) /*!< Minute interrupt enabled */ 00321 } PCF85063_control_2_mi_t; 00322 00323 00324 00325 /* HMI <4>: HALF MINUTE INTERRUPT 00326 * NOTE: N/A. 00327 */ 00328 typedef enum { 00329 CONTROL_2_HMI_MASK = ( 1U << 4U ), /*!< HMI mask */ 00330 CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_DISABLED = ( 0U << 4U ), /*!< Half Minute interrupt disabled [ Default ] */ 00331 CONTROL_2_HMI_HALF_MINUTE_INTERRUPT_ENABLED = ( 1U << 4U ) /*!< Half Minute interrupt enabled */ 00332 } PCF85063_control_2_hmi_t ; 00333 00334 00335 00336 /* TF <3>: TIMER FLAG 00337 * NOTE: N/A. 00338 */ 00339 typedef enum { 00340 CONTROL_2_TF_MASK = ( 1U << 3U ), /*!< TF mask */ 00341 CONTROL_2_TF_TIMER_INTERRUPT_NOT_GENERATED = ( 0U << 3U ), /*!< No Timer interrupt generated [ Default ] */ 00342 CONTROL_2_TF_TIMER_INTERRUPT_GENERATED = ( 1U << 3U ) /*!< Timer interrupt generated */ 00343 } PCF85063_control_2_tf_t ; 00344 00345 00346 00347 /* COF <2:0>: CLKOUT CONTROL 00348 * NOTE: N/A. 00349 */ 00350 typedef enum { 00351 CONTROL_2_COF_MASK = ( 0b111 << 0U ), /*!< COF mask */ 00352 CONTROL_2_COF_CLKOUT_32768_HZ = ( 0b000 << 0U ), /*!< CLKOUT: 32768 Hz [ Default ] */ 00353 CONTROL_2_COF_CLKOUT_16384_HZ = ( 0b001 << 0U ), /*!< CLKOUT: 16384 Hz */ 00354 CONTROL_2_COF_CLKOUT_8192_HZ = ( 0b010 << 0U ), /*!< CLKOUT: 8192 Hz */ 00355 CONTROL_2_COF_CLKOUT_4096_HZ = ( 0b011 << 0U ), /*!< CLKOUT: 4096 Hz */ 00356 CONTROL_2_COF_CLKOUT_2048_HZ = ( 0b100 << 0U ), /*!< CLKOUT: 2048 Hz */ 00357 CONTROL_2_COF_CLKOUT_1024_HZ = ( 0b101 << 0U ), /*!< CLKOUT: 1024 Hz */ 00358 CONTROL_2_COF_CLKOUT_1_HZ = ( 0b110 << 0U ), /*!< CLKOUT: 1 Hz */ 00359 CONTROL_2_COF_CLKOUT_LOW = ( 0b111 << 0U ) /*!< CLKOUT: LOW */ 00360 } PCF85063_control_2_cof_t ; 00361 00362 00363 00364 /** 00365 * @brief Register Offset 00366 */ 00367 /* MODE <7>: OFFSET MODE 00368 * NOTE: N/A. 00369 */ 00370 typedef enum { 00371 OFFSET_MODE_MASK = ( 1U << 7U ), /*!< MODE mask */ 00372 OFFSET_MODE_NORMAL_MODE = ( 0U << 7U ), /*!< Normal mode: offset is made once every two hours[ Default ] */ 00373 OFFSET_MODE_COURSE_MODE = ( 1U << 7U ) /*!< Course mode: offset is made every 4 minutes */ 00374 } PCF85063_offset_mode_t; 00375 00376 00377 00378 /** 00379 * @brief Register RAM_byte 00380 */ 00381 /* B <7:0>: RAM CONTENT 00382 * NOTE: N/A. 00383 */ 00384 typedef enum { 00385 RAM_BYTE_B_MASK = 0xFF /*!< RAM_byte mask */ 00386 } PCF85063_ram_byte_b_t; 00387 00388 00389 00390 /** 00391 * @brief Register Seconds 00392 */ 00393 /* OS <7>: OSCILLATOR STOP 00394 * NOTE: N/A. 00395 */ 00396 typedef enum { 00397 SECONDS_OS_MASK = ( 1U << 7U ), /*!< OS mask */ 00398 SECONDS_OS_CLOCK_INTEGRITY_IS_GUARANTEED = ( 0U << 7U ), /*!< Clock integrity is guaranteed */ 00399 SECONDS_OS_CLOCK_INTEGRITY_NOT_GUARANTEED = ( 1U << 7U ) /*!< Clock integrity is not guaranteed, oscillator has stopped or has been interrupted [ Default ] */ 00400 } PCF85063_seconds_os_t; 00401 00402 00403 00404 /* SECONDS, TEN'S PLACE <6:4>: ACTUAL SECONDS, TEN'S PLACE 00405 * NOTE: CODED IN BCD FORMAT. 00406 */ 00407 typedef enum { 00408 SECONDS_SECONDS_TEN_PLACE_MASK = ( 0b111 << 4U ) /*!< SECONDS TEN'S PLACE mask */ 00409 } PCF85063_seconds_ten_place_t ; 00410 00411 00412 00413 /* SECONDS, UNIT PLACE <3:0>: ACTUAL SECONDS, UNIT PLACE 00414 * NOTE: CODED IN BCD FORMAT. 00415 */ 00416 typedef enum { 00417 SECONDS_SECONDS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< SECONDS UNIT PLACE mask */ 00418 } PCF85063_seconds_unit_place_t ; 00419 00420 00421 00422 /** 00423 * @brief Register Minutes 00424 */ 00425 /* MINUTES, TEN'S PLACE <6:4>: ACTUAL MINUTES, TEN'S PLACE 00426 * NOTE: CODED IN BCD FORMAT. 00427 */ 00428 typedef enum { 00429 MINUTES_MINUTES_TEN_PLACE_MASK = ( 0b111 << 4U ) /*!< MINUTES TEN'S PLACE mask */ 00430 } PCF85063_minutes_ten_place_t; 00431 00432 00433 00434 /* MINUTES, UNIT PLACE <3:0>: ACTUAL MINUTES, UNIT PLACE 00435 * NOTE: CODED IN BCD FORMAT. 00436 */ 00437 typedef enum { 00438 MINUTES_MINUTES_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< MINUTES UNIT PLACE mask */ 00439 } PCF85063_minutes_unit_place_t ; 00440 00441 00442 00443 /** 00444 * @brief Register HOURS 00445 */ 00446 /* AMPM <5>: AM/PM INDICATOR 00447 * NOTE: ONLY FOR 12-HOUR MODE. 00448 */ 00449 typedef enum { 00450 HOURS_AMPM_MASK = ( 1U << 5U ), /*!< AMPM mask */ 00451 HOURS_AMPM_AM = ( 0U << 5U ), /*!< AMPM: AM mode */ 00452 HOURS_AMPM_PM = ( 1U << 5U ) /*!< AMPM: PM mode */ 00453 } PCF85063_hours_ampm_t; 00454 00455 00456 00457 /* HOURS, TEN'S PLACE <4>: ACTUAL HOURS, TEN'S PLACE 00458 * NOTE: ONLY FOR 12-HOUR MODE, CODED IN BCD FORMAT. 00459 */ 00460 typedef enum { 00461 HOURS_12_HOUR_MODE_TEN_PLACE_MASK = ( 1U << 4U ) /*!< Hours TEN'S PLACE mask */ 00462 } PCF85063_12_hour_mode_ten_place_t ; 00463 00464 00465 00466 /* HOURS, TEN'S PLACE <5:4>: ACTUAL HOURS, TEN'S PLACE 00467 * NOTE: ONLY FOR 24-HOUR MODE, CODED IN BCD FORMAT. 00468 */ 00469 typedef enum { 00470 HOURS_24_HOUR_MODE_TEN_PLACE_MASK = ( 0b11 << 4U ) /*!< Hours TEN'S PLACE mask */ 00471 } PCF85063_24_hour_mode_ten_place_t ; 00472 00473 00474 00475 /* HOURS, UNIT PLACE <3:0>: ACTUAL HOURS, UNIT PLACE 00476 * NOTE: CODED IN BCD FORMAT. 00477 */ 00478 typedef enum { 00479 HOURS_HOURS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< HOURS UNIT PLACE mask */ 00480 } PCF85063_hours_unit_place_t ; 00481 00482 00483 00484 /** 00485 * @brief Register Days 00486 */ 00487 /* DAYS, TEN'S PLACE <5:4>: ACTUAL DAYS, TEN'S PLACE 00488 * NOTE: CODED IN BCD FORMAT. 00489 */ 00490 typedef enum { 00491 DAYS_DAYS_TEN_PLACE_MASK = ( 0b11 << 4U ) /*!< DAYS TEN'S PLACE mask */ 00492 } PCF85063_days_ten_place_t; 00493 00494 00495 00496 /* DAYS, UNIT PLACE <3:0>: ACTUAL DAYS, UNIT PLACE 00497 * NOTE: CODED IN BCD FORMAT. 00498 */ 00499 typedef enum { 00500 DAYS_DAYS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< DAYS UNIT PLACE mask */ 00501 } PCF85063_days_unit_place_t ; 00502 00503 00504 00505 /** 00506 * @brief Register Weekdays 00507 */ 00508 /* WEEKDAYS <2:0>: ACTUAL WEEKDAY 00509 * NOTE: N/A. 00510 */ 00511 typedef enum { 00512 WEEKDAYS_WEEKDAYS_MASK = ( 0b111 << 0U ), /*!< WEEKDAYS mask */ 00513 WEEKDAYS_WEEKDAYS_SUNDAY = ( 0b000 << 0U ), /*!< WEEKDAYS Sunday */ 00514 WEEKDAYS_WEEKDAYS_MONDAY = ( 0b001 << 0U ), /*!< WEEKDAYS Monday */ 00515 WEEKDAYS_WEEKDAYS_TUESDAY = ( 0b010 << 0U ), /*!< WEEKDAYS Tuesday */ 00516 WEEKDAYS_WEEKDAYS_WEDNESDAY = ( 0b011 << 0U ), /*!< WEEKDAYS Wednesday */ 00517 WEEKDAYS_WEEKDAYS_THURSDAY = ( 0b100 << 0U ), /*!< WEEKDAYS Thursday */ 00518 WEEKDAYS_WEEKDAYS_FRIDAY = ( 0b101 << 0U ), /*!< WEEKDAYS Friday */ 00519 WEEKDAYS_WEEKDAYS_SATURDAY = ( 0b111 << 0U ) /*!< WEEKDAYS Saturday [ Default ] */ 00520 } PCF85063_weekdays_weekdays_t; 00521 00522 00523 00524 /** 00525 * @brief Register Months 00526 */ 00527 /* MONTHS <4:0>: ACTUAL MONTH 00528 * NOTE: CODED IN BCD FORMAT. 00529 */ 00530 typedef enum { 00531 MONTHS_MONTHS_MASK = ( 0b11111 << 0U ), /*!< MONTHS mask */ 00532 MONTHS_MONTHS_JANUARY = ( 0b00001 << 0U ), /*!< MONTHS January [ Default ] */ 00533 MONTHS_MONTHS_FEBRUARY = ( 0b00010 << 0U ), /*!< MONTHS February */ 00534 MONTHS_MONTHS_MARCH = ( 0b00011 << 0U ), /*!< MONTHS March */ 00535 MONTHS_MONTHS_APRIL = ( 0b00100 << 0U ), /*!< MONTHS April */ 00536 MONTHS_MONTHS_MAY = ( 0b00101 << 0U ), /*!< MONTHS May */ 00537 MONTHS_MONTHS_JUNE = ( 0b00110 << 0U ), /*!< MONTHS June */ 00538 MONTHS_MONTHS_JULY = ( 0b00111 << 0U ), /*!< MONTHS July */ 00539 MONTHS_MONTHS_AUGUST = ( 0b01000 << 0U ), /*!< MONTHS August */ 00540 MONTHS_MONTHS_SEPTEMBER = ( 0b01001 << 0U ), /*!< MONTHS September */ 00541 MONTHS_MONTHS_OCTOBER = ( 0b10000 << 0U ), /*!< MONTHS October */ 00542 MONTHS_MONTHS_NOVEMBER = ( 0b10001 << 0U ), /*!< MONTHS November */ 00543 MONTHS_MONTHS_DECEMBER = ( 0b10010 << 0U ) /*!< MONTHS December */ 00544 } PCF85063_months_months_t; 00545 00546 00547 00548 /** 00549 * @brief Register Years 00550 */ 00551 /* YEARS, TEN'S PLACE <7:4>: ACTUAL YEARS, TEN'S PLACE 00552 * NOTE: CODED IN BCD FORMAT. 00553 */ 00554 typedef enum { 00555 YEARS_YEARS_TEN_PLACE_MASK = ( 0b1111 << 4U ) /*!< YEARS TEN'S PLACE mask */ 00556 } PCF85063_years_ten_place_t; 00557 00558 00559 00560 /* YEARS, UNIT PLACE <3:0>: ACTUAL YEARS, UNIT PLACE 00561 * NOTE: CODED IN BCD FORMAT. 00562 */ 00563 typedef enum { 00564 YEARS_YEARS_UNIT_PLACE_MASK = ( 0b1111 << 0U ) /*!< YEARS UNIT PLACE mask */ 00565 } PCF85063_years_unit_place_t ; 00566 00567 00568 00569 00570 00571 #ifndef PCF85063_VECTOR_STRUCT_H 00572 #define PCF85063_VECTOR_STRUCT_H 00573 typedef struct { 00574 PCF85063_control_1_12_24_t Time12H_24HMode; /*!< Time mode: 12-hour or 24-hour mode */ 00575 PCF85063_hours_ampm_t TimeAM_PM_Mode; /*!< AM/PM mode ( only for 12-hour mode ) */ 00576 00577 uint32_t BCDtime; /*!< Time ( HHMMSS ) in BCD format */ 00578 uint8_t BCDday; /*!< Day number in BCD format */ 00579 PCF85063_weekdays_weekdays_t weekday; /*!< Weekday */ 00580 PCF85063_months_months_t BCDmonth; /*!< Month in BCD format */ 00581 uint8_t BCDyear; /*!< Year in BCD format */ 00582 00583 int8_t ramByte; /*!< RAM byte */ 00584 PCF85063_seconds_os_t os; /*!< Oscillator flag */ 00585 } PCF85063_data_t; 00586 #endif 00587 00588 00589 /** 00590 * @brief INTERNAL CONSTANTS 00591 */ 00592 typedef enum { 00593 PCF85063_SUCCESS = 0, 00594 PCF85063_FAILURE = 1, 00595 I2C_SUCCESS = 0 /*!< I2C communication was fine */ 00596 } PCF85063_status_t; 00597 00598 00599 00600 00601 /** Create an PCF85063 object connected to the specified I2C pins. 00602 * 00603 * @param sda I2C data pin 00604 * @param scl I2C clock pin 00605 * @param addr I2C slave address 00606 * @param freq I2C frequency 00607 */ 00608 PCF85063 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); 00609 00610 /** Delete PCF85063 object. 00611 */ 00612 ~PCF85063(); 00613 00614 /** It sets the external clock test mode. 00615 */ 00616 PCF85063_status_t PCF85063_SetTestMode ( PCF85063_control_1_ext_test_t myEXT_TEST ); 00617 00618 /** It sets the RTC clock mode. 00619 */ 00620 PCF85063_status_t PCF85063_SetRTCMode ( PCF85063_control_1_stop_t mySTOP ); 00621 00622 /** It performs a software reset. 00623 */ 00624 PCF85063_status_t PCF85063_SoftwareReset ( void ); 00625 00626 /** It sets the correction interrupt mode. 00627 */ 00628 PCF85063_status_t PCF85063_SetCorrectionInterruptMode ( PCF85063_control_1_cie_t myCIE ); 00629 00630 /** It sets 12 or 24 hour mode. 00631 */ 00632 PCF85063_status_t PCF85063_Set12_24_HourMode ( PCF85063_data_t my12_24 ); 00633 00634 /** It sets the internal oscillator capacitor. 00635 */ 00636 PCF85063_status_t PCF85063_SetInternalOscillatorCapacitor ( PCF85063_control_1_cap_sel_t myCAP_SEL ); 00637 00638 /** It enables/disables minute/half minute interrupt. 00639 */ 00640 PCF85063_status_t PCF85063_SetMinuteInterrupts ( PCF85063_control_2_mi_t myMI, PCF85063_control_2_hmi_t myHMI ); 00641 00642 /** It gets the status of the timer flag. 00643 */ 00644 PCF85063_status_t PCF85063_GetTimerFlag ( PCF85063_control_2_tf_t * myTF ); 00645 00646 /** It resets the status of the timer flag. 00647 */ 00648 PCF85063_status_t PCF85063_ClearTimerFlag ( void ); 00649 00650 /** It sets the clock output frequency. 00651 */ 00652 PCF85063_status_t PCF85063_SetClockOutputFrequency ( PCF85063_control_2_cof_t myCOF ); 00653 00654 /** It sets the offset. 00655 */ 00656 PCF85063_status_t PCF85063_SetOffset ( PCF85063_offset_mode_t myMODE, int8_t myOFFSET ); 00657 00658 /** It writes into the RAM byte register. 00659 */ 00660 PCF85063_status_t PCF85063_WriteByteRAM ( PCF85063_data_t myData ); 00661 00662 /** It reads the RAM byte register. 00663 */ 00664 PCF85063_status_t PCF85063_ReadByteRAM ( PCF85063_data_t* myData ); 00665 00666 /** It checks oscillator clock integrity flag. 00667 */ 00668 PCF85063_status_t PCF85063_CheckOscillatorClockIntegrityFlag ( PCF85063_data_t* myOS ); 00669 00670 /** It clears oscillator clock integrity flag. 00671 */ 00672 PCF85063_status_t PCF85063_ClearOscillatorClockIntegrityFlag ( void ); 00673 00674 /** It sets the AM/PM indicator ( only for 12-hour mode ). 00675 */ 00676 PCF85063_status_t PCF85063_SetAM_PM_Indicator ( PCF85063_data_t myAM_PM_Indicator ); 00677 00678 /** It gets the AM/PM indicator ( only for 12-hour mode ). 00679 */ 00680 PCF85063_status_t PCF85063_GetAM_PM_Indicator ( PCF85063_data_t* myAM_PM_Indicator ); 00681 00682 /** It gets the day ( BCD format ). 00683 */ 00684 PCF85063_status_t PCF85063_GetDay ( PCF85063_data_t* myActualDay ); 00685 00686 /** It sets the day ( BCD format ). 00687 */ 00688 PCF85063_status_t PCF85063_SetDay ( PCF85063_data_t myNewDay ); 00689 00690 /** It gets the weekday. 00691 */ 00692 PCF85063_status_t PCF85063_GetWeekday ( PCF85063_data_t* myActualWeekday ); 00693 00694 /** It sets the weekday. 00695 */ 00696 PCF85063_status_t PCF85063_SetWeekday ( PCF85063_data_t myNewWeekday ); 00697 00698 /** It gets the month ( BCD format ). 00699 */ 00700 PCF85063_status_t PCF85063_GetMonth ( PCF85063_data_t* myActualMonth ); 00701 00702 /** It sets the month ( BCD format ). 00703 */ 00704 PCF85063_status_t PCF85063_SetMonth ( PCF85063_data_t myNewMonth ); 00705 00706 /** It gets the time ( BCD format ). 00707 */ 00708 PCF85063_status_t PCF85063_GetTime ( PCF85063_data_t* myActualTime ); 00709 00710 /** It sets the time ( BCD format ). 00711 */ 00712 PCF85063_status_t PCF85063_SetTime ( PCF85063_data_t myNewTime ); 00713 00714 /** It gets the year ( BCD format ). 00715 */ 00716 PCF85063_status_t PCF85063_GetYear ( PCF85063_data_t* myActualYear ); 00717 00718 /** It sets the year ( BCD format ). 00719 */ 00720 PCF85063_status_t PCF85063_SetYear ( PCF85063_data_t myNewYear ); 00721 00722 00723 00724 00725 private: 00726 I2C _i2c; 00727 uint32_t _PCF85063_Addr; 00728 }; 00729 00730 #endif
Generated on Wed Jul 13 2022 03:36:49 by
1.7.2