Tiny Real-Time Clock/calendar
PCF85063.h@4:a5c06ac163f1, 2019-04-12 (annotated)
- 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?
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 |