64 x 8, Serial, I2C Real-Time Clock

Committer:
mcm
Date:
Tue Jul 31 15:17:07 2018 +0000
Revision:
2:190cad1b683d
Parent:
0:73dc094709f0
The driver was completed and tested, it works as expected ( NUCLEO-L152RE )

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:190cad1b683d 1 /**
mcm 2:190cad1b683d 2 * @brief DS1307.c
mcm 2:190cad1b683d 3 * @details 64 x 8, Serial, I2C Real-Time Clock.
mcm 2:190cad1b683d 4 * Functions file.
mcm 2:190cad1b683d 5 *
mcm 2:190cad1b683d 6 *
mcm 2:190cad1b683d 7 * @return N/A
mcm 2:190cad1b683d 8 *
mcm 2:190cad1b683d 9 * @author Manuel Caballero
mcm 2:190cad1b683d 10 * @date 31/July/2018
mcm 2:190cad1b683d 11 * @version 31/July/2018 The ORIGIN
mcm 2:190cad1b683d 12 * @pre N/A.
mcm 2:190cad1b683d 13 * @warning N/A
mcm 2:190cad1b683d 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 2:190cad1b683d 15 */
mcm 2:190cad1b683d 16
mcm 2:190cad1b683d 17 #include "DS1307.h"
mcm 2:190cad1b683d 18
mcm 2:190cad1b683d 19
mcm 2:190cad1b683d 20 DS1307::DS1307 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 2:190cad1b683d 21 : _i2c ( sda, scl )
mcm 2:190cad1b683d 22 , _DS1307_Addr ( addr )
mcm 2:190cad1b683d 23 {
mcm 2:190cad1b683d 24 _i2c.frequency( freq );
mcm 2:190cad1b683d 25 }
mcm 2:190cad1b683d 26
mcm 2:190cad1b683d 27
mcm 2:190cad1b683d 28 DS1307::~DS1307()
mcm 2:190cad1b683d 29 {
mcm 2:190cad1b683d 30 }
mcm 2:190cad1b683d 31
mcm 2:190cad1b683d 32
mcm 2:190cad1b683d 33
mcm 2:190cad1b683d 34 /**
mcm 2:190cad1b683d 35 * @brief DS1307_SquareWaveOutput ( DS1307_control_sqwe_t , DS1307_control_rate_select_t )
mcm 2:190cad1b683d 36 *
mcm 2:190cad1b683d 37 * @details It configures the square-wave output.
mcm 2:190cad1b683d 38 *
mcm 2:190cad1b683d 39 * @param[in] mySQWE: Square-wave output enabled/disabled.
mcm 2:190cad1b683d 40 * @param[in] myRateSelect: Rate select.
mcm 2:190cad1b683d 41 *
mcm 2:190cad1b683d 42 * @param[out] N/A.
mcm 2:190cad1b683d 43 *
mcm 2:190cad1b683d 44 *
mcm 2:190cad1b683d 45 * @return Status of DS1307_SquareWaveOutput.
mcm 2:190cad1b683d 46 *
mcm 2:190cad1b683d 47 *
mcm 2:190cad1b683d 48 * @author Manuel Caballero
mcm 2:190cad1b683d 49 * @date 30/July/2018
mcm 2:190cad1b683d 50 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 51 * @pre N/A.
mcm 2:190cad1b683d 52 * @warning N/A.
mcm 2:190cad1b683d 53 */
mcm 2:190cad1b683d 54 DS1307::DS1307_status_t DS1307::DS1307_SquareWaveOutput ( DS1307_control_sqwe_t mySQWE, DS1307_control_rate_select_t myRateSelect )
mcm 2:190cad1b683d 55 {
mcm 2:190cad1b683d 56 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 57 uint32_t aux;
mcm 2:190cad1b683d 58
mcm 2:190cad1b683d 59
mcm 2:190cad1b683d 60 /* Read CONTROL REGISTER to mask it */
mcm 2:190cad1b683d 61 cmd[0] = DS1307_CONTROL;
mcm 2:190cad1b683d 62 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 63 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 64
mcm 2:190cad1b683d 65
mcm 2:190cad1b683d 66 /* Update the register */
mcm 2:190cad1b683d 67 cmd[1] &= ~( CONTROL_SQWE_MASK | CONTROL_RS_MASK );
mcm 2:190cad1b683d 68 cmd[1] |= ( mySQWE | myRateSelect );
mcm 2:190cad1b683d 69 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 70
mcm 2:190cad1b683d 71
mcm 2:190cad1b683d 72
mcm 2:190cad1b683d 73
mcm 2:190cad1b683d 74 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 75 return DS1307_SUCCESS;
mcm 2:190cad1b683d 76 } else {
mcm 2:190cad1b683d 77 return DS1307_FAILURE;
mcm 2:190cad1b683d 78 }
mcm 2:190cad1b683d 79 }
mcm 2:190cad1b683d 80
mcm 2:190cad1b683d 81
mcm 2:190cad1b683d 82
mcm 2:190cad1b683d 83 /**
mcm 2:190cad1b683d 84 * @brief DS1307_ConfOutput ( DS1307_control_out_t )
mcm 2:190cad1b683d 85 *
mcm 2:190cad1b683d 86 * @details It configures the output pin ( OUT ).
mcm 2:190cad1b683d 87 *
mcm 2:190cad1b683d 88 * @param[in] myOUT: OUT pin High/Low.
mcm 2:190cad1b683d 89 *
mcm 2:190cad1b683d 90 * @param[out] N/A.
mcm 2:190cad1b683d 91 *
mcm 2:190cad1b683d 92 *
mcm 2:190cad1b683d 93 * @return Status of DS1307_ConfOutput.
mcm 2:190cad1b683d 94 *
mcm 2:190cad1b683d 95 *
mcm 2:190cad1b683d 96 * @author Manuel Caballero
mcm 2:190cad1b683d 97 * @date 30/July/2018
mcm 2:190cad1b683d 98 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 99 * @pre N/A.
mcm 2:190cad1b683d 100 * @warning Square-wave output must be disabled.
mcm 2:190cad1b683d 101 */
mcm 2:190cad1b683d 102 DS1307::DS1307_status_t DS1307::DS1307_ConfOutput ( DS1307_control_out_t myOUT )
mcm 2:190cad1b683d 103 {
mcm 2:190cad1b683d 104 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 105 uint32_t aux;
mcm 2:190cad1b683d 106
mcm 2:190cad1b683d 107
mcm 2:190cad1b683d 108 /* Read CONTROL REGISTER to mask it */
mcm 2:190cad1b683d 109 cmd[0] = DS1307_CONTROL;
mcm 2:190cad1b683d 110 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 111 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 112
mcm 2:190cad1b683d 113
mcm 2:190cad1b683d 114 /* Update the register */
mcm 2:190cad1b683d 115 cmd[1] &= ~( CONTROL_OUT_MASK );
mcm 2:190cad1b683d 116 cmd[1] |= myOUT;
mcm 2:190cad1b683d 117 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 118
mcm 2:190cad1b683d 119
mcm 2:190cad1b683d 120
mcm 2:190cad1b683d 121
mcm 2:190cad1b683d 122 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 123 return DS1307_SUCCESS;
mcm 2:190cad1b683d 124 } else {
mcm 2:190cad1b683d 125 return DS1307_FAILURE;
mcm 2:190cad1b683d 126 }
mcm 2:190cad1b683d 127 }
mcm 2:190cad1b683d 128
mcm 2:190cad1b683d 129
mcm 2:190cad1b683d 130
mcm 2:190cad1b683d 131 /**
mcm 2:190cad1b683d 132 * @brief DS1307_SetTime ( DS1307_vector_data_t )
mcm 2:190cad1b683d 133 *
mcm 2:190cad1b683d 134 * @details It sets the time ( BCD mode ).
mcm 2:190cad1b683d 135 *
mcm 2:190cad1b683d 136 * @param[in] myTime: Time in BCD mode.
mcm 2:190cad1b683d 137 *
mcm 2:190cad1b683d 138 * @param[out] N/A.
mcm 2:190cad1b683d 139 *
mcm 2:190cad1b683d 140 *
mcm 2:190cad1b683d 141 * @return Status of DS1307_SetTime.
mcm 2:190cad1b683d 142 *
mcm 2:190cad1b683d 143 *
mcm 2:190cad1b683d 144 * @author Manuel Caballero
mcm 2:190cad1b683d 145 * @date 30/July/2018
mcm 2:190cad1b683d 146 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 147 * @pre i.e1: 20:35.59 24h --> 0x203559 24h Enabled.
mcm 2:190cad1b683d 148 * i.e2: 08:35.59 12h --> 0x083559 12h Enabled ( PM ).
mcm 2:190cad1b683d 149 * @warning N/A.
mcm 2:190cad1b683d 150 */
mcm 2:190cad1b683d 151 DS1307::DS1307_status_t DS1307::DS1307_SetTime ( DS1307_vector_data_t myTime )
mcm 2:190cad1b683d 152 {
mcm 2:190cad1b683d 153 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 154 uint32_t aux;
mcm 2:190cad1b683d 155
mcm 2:190cad1b683d 156
mcm 2:190cad1b683d 157 /* SECONDS */
mcm 2:190cad1b683d 158 /* Read SECONDS REGISTER to mask it */
mcm 2:190cad1b683d 159 cmd[0] = DS1307_SECONDS;
mcm 2:190cad1b683d 160 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 161 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 162
mcm 2:190cad1b683d 163
mcm 2:190cad1b683d 164 /* Update the register */
mcm 2:190cad1b683d 165 cmd[1] &= ~( SECONDS_10SECONDS_MASK | SECONDS_SECONDS_MASK );
mcm 2:190cad1b683d 166 cmd[1] |= ( myTime.BCDTime & ( SECONDS_10SECONDS_MASK | SECONDS_SECONDS_MASK ) );
mcm 2:190cad1b683d 167 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 168
mcm 2:190cad1b683d 169
mcm 2:190cad1b683d 170 /* MINUTES */
mcm 2:190cad1b683d 171 /* Read MINUTES REGISTER to mask it */
mcm 2:190cad1b683d 172 cmd[0] = DS1307_MINUTES;
mcm 2:190cad1b683d 173 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 174 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 175
mcm 2:190cad1b683d 176
mcm 2:190cad1b683d 177 /* Update the register */
mcm 2:190cad1b683d 178 cmd[1] &= ~( MINUTES_10MINUTES_MASK | MINUTES_MINUTES_MASK );
mcm 2:190cad1b683d 179 cmd[1] |= ( ( myTime.BCDTime >> 8U ) & ( MINUTES_10MINUTES_MASK | MINUTES_MINUTES_MASK ) );
mcm 2:190cad1b683d 180 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 181
mcm 2:190cad1b683d 182
mcm 2:190cad1b683d 183 /* HOURS */
mcm 2:190cad1b683d 184 /* Read HOURS REGISTER to mask it */
mcm 2:190cad1b683d 185 cmd[0] = DS1307_HOURS;
mcm 2:190cad1b683d 186 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 187 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 188
mcm 2:190cad1b683d 189
mcm 2:190cad1b683d 190 /* Mask the register */
mcm 2:190cad1b683d 191 cmd[1] &= ~( HOURS_MODE_MASK | HOUR_10HOUR_MASK | HOUR_HOURS_MASK );
mcm 2:190cad1b683d 192
mcm 2:190cad1b683d 193 /* Check if it is 12h or 24h mode */
mcm 2:190cad1b683d 194 if ( myTime.Time12H_24HMode == HOURS_MODE_24H ) {
mcm 2:190cad1b683d 195 cmd[1] |= ( ( ( myTime.BCDTime >> 16U ) & ( HOUR_10HOUR_MASK | HOUR_HOURS_MASK ) ) | myTime.Time12H_24HMode );
mcm 2:190cad1b683d 196 } else {
mcm 2:190cad1b683d 197 cmd[1] |= ( ( ( myTime.BCDTime >> 16U ) & ( HOUR_10HOUR_MASK | HOUR_HOURS_MASK ) ) | ( myTime.Time12H_24HMode | myTime.TimeAM_PM_Mode ) );
mcm 2:190cad1b683d 198 }
mcm 2:190cad1b683d 199
mcm 2:190cad1b683d 200 /* Update the register */
mcm 2:190cad1b683d 201 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 202
mcm 2:190cad1b683d 203
mcm 2:190cad1b683d 204
mcm 2:190cad1b683d 205
mcm 2:190cad1b683d 206 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 207 return DS1307_SUCCESS;
mcm 2:190cad1b683d 208 } else {
mcm 2:190cad1b683d 209 return DS1307_FAILURE;
mcm 2:190cad1b683d 210 }
mcm 2:190cad1b683d 211 }
mcm 2:190cad1b683d 212
mcm 2:190cad1b683d 213
mcm 2:190cad1b683d 214
mcm 2:190cad1b683d 215 /**
mcm 2:190cad1b683d 216 * @brief DS1307_GetTime ( DS1307_vector_data_t* )
mcm 2:190cad1b683d 217 *
mcm 2:190cad1b683d 218 * @details It gets the time ( BCD mode ).
mcm 2:190cad1b683d 219 *
mcm 2:190cad1b683d 220 * @param[in] N/A.
mcm 2:190cad1b683d 221 *
mcm 2:190cad1b683d 222 * @param[out] myTime: Time in BCD mode.
mcm 2:190cad1b683d 223 *
mcm 2:190cad1b683d 224 *
mcm 2:190cad1b683d 225 * @return Status of DS1307_GetTime.
mcm 2:190cad1b683d 226 *
mcm 2:190cad1b683d 227 *
mcm 2:190cad1b683d 228 * @author Manuel Caballero
mcm 2:190cad1b683d 229 * @date 30/July/2018
mcm 2:190cad1b683d 230 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 231 * @pre i.e1: 20:35.59 24h --> 0x203559 24h Enabled.
mcm 2:190cad1b683d 232 * i.e2: 08:35.59 12h --> 0x083559 12h Enabled ( PM ).
mcm 2:190cad1b683d 233 * @warning N/A.
mcm 2:190cad1b683d 234 */
mcm 2:190cad1b683d 235 DS1307::DS1307_status_t DS1307::DS1307_GetTime ( DS1307_vector_data_t* myTime )
mcm 2:190cad1b683d 236 {
mcm 2:190cad1b683d 237 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 238 uint32_t aux;
mcm 2:190cad1b683d 239
mcm 2:190cad1b683d 240
mcm 2:190cad1b683d 241 /* HOURS */
mcm 2:190cad1b683d 242 /* Read HOURS REGISTER */
mcm 2:190cad1b683d 243 cmd[0] = DS1307_HOURS;
mcm 2:190cad1b683d 244 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 245 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 246
mcm 2:190cad1b683d 247
mcm 2:190cad1b683d 248 /* Parse the data */
mcm 2:190cad1b683d 249 myTime->BCDTime = ( cmd[1] & ( HOUR_10HOUR_MASK | HOUR_HOURS_MASK ) );
mcm 2:190cad1b683d 250
mcm 2:190cad1b683d 251
mcm 2:190cad1b683d 252 /* Check if it is 12h or 24h mode */
mcm 2:190cad1b683d 253 if ( ( cmd[1] & HOURS_MODE_MASK ) == HOURS_MODE_24H ) {
mcm 2:190cad1b683d 254 /* 24h mode */
mcm 2:190cad1b683d 255 myTime->Time12H_24HMode = HOURS_MODE_24H;
mcm 2:190cad1b683d 256
mcm 2:190cad1b683d 257 /* Update the PM/AM mode variable */
mcm 2:190cad1b683d 258 if ( ( cmd[1] & ( HOUR_10HOUR_MASK | HOUR_HOURS_MASK ) ) >= 0x12 ) {
mcm 2:190cad1b683d 259 myTime->TimeAM_PM_Mode = HOURS_MODE_PM;
mcm 2:190cad1b683d 260 } else {
mcm 2:190cad1b683d 261 myTime->TimeAM_PM_Mode = HOURS_MODE_AM;
mcm 2:190cad1b683d 262 }
mcm 2:190cad1b683d 263 } else {
mcm 2:190cad1b683d 264 /* 12h mode */
mcm 2:190cad1b683d 265 myTime->Time12H_24HMode = HOURS_MODE_12H;
mcm 2:190cad1b683d 266 myTime->TimeAM_PM_Mode = (DS1307_hours_am_pm_mode_t) ( cmd[1] & HOURS_MODE_AM_PM_MASK );
mcm 2:190cad1b683d 267 myTime->BCDTime &= ~( HOURS_MODE_AM_PM_MASK );
mcm 2:190cad1b683d 268 }
mcm 2:190cad1b683d 269
mcm 2:190cad1b683d 270 myTime->BCDTime <<= 8U;
mcm 2:190cad1b683d 271
mcm 2:190cad1b683d 272
mcm 2:190cad1b683d 273
mcm 2:190cad1b683d 274 /* MINUTES */
mcm 2:190cad1b683d 275 /* Read MINUTES REGISTER to mask it */
mcm 2:190cad1b683d 276 cmd[0] = DS1307_MINUTES;
mcm 2:190cad1b683d 277 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 278 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 279
mcm 2:190cad1b683d 280
mcm 2:190cad1b683d 281 /* Parse the data */
mcm 2:190cad1b683d 282 cmd[1] &= ( MINUTES_10MINUTES_MASK | MINUTES_MINUTES_MASK );
mcm 2:190cad1b683d 283 myTime->BCDTime |= cmd[1];
mcm 2:190cad1b683d 284 myTime->BCDTime <<= 8U;
mcm 2:190cad1b683d 285
mcm 2:190cad1b683d 286
mcm 2:190cad1b683d 287
mcm 2:190cad1b683d 288 /* SECONDS */
mcm 2:190cad1b683d 289 /* Read SECONDS REGISTER to mask it */
mcm 2:190cad1b683d 290 cmd[0] = DS1307_SECONDS;
mcm 2:190cad1b683d 291 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 292 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 293
mcm 2:190cad1b683d 294
mcm 2:190cad1b683d 295 /* Parse the data */
mcm 2:190cad1b683d 296 cmd[1] &= ( SECONDS_10SECONDS_MASK | SECONDS_SECONDS_MASK );
mcm 2:190cad1b683d 297 myTime->BCDTime |= cmd[1];
mcm 2:190cad1b683d 298
mcm 2:190cad1b683d 299
mcm 2:190cad1b683d 300
mcm 2:190cad1b683d 301
mcm 2:190cad1b683d 302
mcm 2:190cad1b683d 303 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 304 return DS1307_SUCCESS;
mcm 2:190cad1b683d 305 } else {
mcm 2:190cad1b683d 306 return DS1307_FAILURE;
mcm 2:190cad1b683d 307 }
mcm 2:190cad1b683d 308 }
mcm 2:190cad1b683d 309
mcm 2:190cad1b683d 310
mcm 2:190cad1b683d 311
mcm 2:190cad1b683d 312 /**
mcm 2:190cad1b683d 313 * @brief DS1307_SetDayOfTheWeek ( DS1307_vector_data_t )
mcm 2:190cad1b683d 314 *
mcm 2:190cad1b683d 315 * @details It sets the day of the week.
mcm 2:190cad1b683d 316 *
mcm 2:190cad1b683d 317 * @param[in] myDayOfTheWeek: Day of the week.
mcm 2:190cad1b683d 318 *
mcm 2:190cad1b683d 319 * @param[out] N/A.
mcm 2:190cad1b683d 320 *
mcm 2:190cad1b683d 321 *
mcm 2:190cad1b683d 322 * @return Status of DS1307_SetDayOfTheWeek.
mcm 2:190cad1b683d 323 *
mcm 2:190cad1b683d 324 *
mcm 2:190cad1b683d 325 * @author Manuel Caballero
mcm 2:190cad1b683d 326 * @date 30/July/2018
mcm 2:190cad1b683d 327 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 328 * @pre N/A.
mcm 2:190cad1b683d 329 * @warning N/A.
mcm 2:190cad1b683d 330 */
mcm 2:190cad1b683d 331 DS1307::DS1307_status_t DS1307::DS1307_SetDayOfTheWeek ( DS1307_vector_data_t myDayOfTheWeek )
mcm 2:190cad1b683d 332 {
mcm 2:190cad1b683d 333 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 334 uint32_t aux;
mcm 2:190cad1b683d 335
mcm 2:190cad1b683d 336
mcm 2:190cad1b683d 337 /* Read DAY REGISTER to mask it */
mcm 2:190cad1b683d 338 cmd[0] = DS1307_DAY;
mcm 2:190cad1b683d 339 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 340 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 341
mcm 2:190cad1b683d 342
mcm 2:190cad1b683d 343 /* Update the register */
mcm 2:190cad1b683d 344 cmd[1] &= ~( DAY_MASK );
mcm 2:190cad1b683d 345 cmd[1] |= myDayOfTheWeek.DayOfTheWeek;
mcm 2:190cad1b683d 346 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 347
mcm 2:190cad1b683d 348
mcm 2:190cad1b683d 349
mcm 2:190cad1b683d 350
mcm 2:190cad1b683d 351
mcm 2:190cad1b683d 352 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 353 return DS1307_SUCCESS;
mcm 2:190cad1b683d 354 } else {
mcm 2:190cad1b683d 355 return DS1307_FAILURE;
mcm 2:190cad1b683d 356 }
mcm 2:190cad1b683d 357 }
mcm 2:190cad1b683d 358
mcm 2:190cad1b683d 359
mcm 2:190cad1b683d 360
mcm 2:190cad1b683d 361 /**
mcm 2:190cad1b683d 362 * @brief DS1307_GetDayOfTheWeek ( DS1307_vector_data_t )
mcm 2:190cad1b683d 363 *
mcm 2:190cad1b683d 364 * @details It gets the day of the week.
mcm 2:190cad1b683d 365 *
mcm 2:190cad1b683d 366 * @param[in] N/A.
mcm 2:190cad1b683d 367 *
mcm 2:190cad1b683d 368 * @param[out] myDayOfTheWeek: Day of the week.
mcm 2:190cad1b683d 369 *
mcm 2:190cad1b683d 370 *
mcm 2:190cad1b683d 371 * @return Status of DS1307_GetDayOfTheWeek.
mcm 2:190cad1b683d 372 *
mcm 2:190cad1b683d 373 *
mcm 2:190cad1b683d 374 * @author Manuel Caballero
mcm 2:190cad1b683d 375 * @date 30/July/2018
mcm 2:190cad1b683d 376 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 377 * @pre N/A.
mcm 2:190cad1b683d 378 * @warning N/A.
mcm 2:190cad1b683d 379 */
mcm 2:190cad1b683d 380 DS1307::DS1307_status_t DS1307::DS1307_GetDayOfTheWeek ( DS1307_vector_data_t* myDayOfTheWeek )
mcm 2:190cad1b683d 381 {
mcm 2:190cad1b683d 382 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 383 uint32_t aux;
mcm 2:190cad1b683d 384
mcm 2:190cad1b683d 385
mcm 2:190cad1b683d 386 /* Read DAY REGISTER to mask it */
mcm 2:190cad1b683d 387 cmd[0] = DS1307_DAY;
mcm 2:190cad1b683d 388 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 389 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 390
mcm 2:190cad1b683d 391
mcm 2:190cad1b683d 392 /* Parse the data */
mcm 2:190cad1b683d 393 myDayOfTheWeek->DayOfTheWeek = (DS1307_day_t)( cmd[1] & DAY_MASK );
mcm 2:190cad1b683d 394
mcm 2:190cad1b683d 395
mcm 2:190cad1b683d 396
mcm 2:190cad1b683d 397
mcm 2:190cad1b683d 398
mcm 2:190cad1b683d 399 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 400 return DS1307_SUCCESS;
mcm 2:190cad1b683d 401 } else {
mcm 2:190cad1b683d 402 return DS1307_FAILURE;
mcm 2:190cad1b683d 403 }
mcm 2:190cad1b683d 404 }
mcm 2:190cad1b683d 405
mcm 2:190cad1b683d 406
mcm 2:190cad1b683d 407
mcm 2:190cad1b683d 408 /**
mcm 2:190cad1b683d 409 * @brief DS1307_SetDate ( DS1307_vector_data_t )
mcm 2:190cad1b683d 410 *
mcm 2:190cad1b683d 411 * @details It sets the date ( BCD mode ).
mcm 2:190cad1b683d 412 *
mcm 2:190cad1b683d 413 * @param[in] myDate: Date.
mcm 2:190cad1b683d 414 *
mcm 2:190cad1b683d 415 * @param[out] N/A.
mcm 2:190cad1b683d 416 *
mcm 2:190cad1b683d 417 *
mcm 2:190cad1b683d 418 * @return Status of DS1307_SetDate.
mcm 2:190cad1b683d 419 *
mcm 2:190cad1b683d 420 *
mcm 2:190cad1b683d 421 * @author Manuel Caballero
mcm 2:190cad1b683d 422 * @date 30/July/2018
mcm 2:190cad1b683d 423 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 424 * @pre i.e1: 01: 0x01.
mcm 2:190cad1b683d 425 * i.e2: 12: 0x12.
mcm 2:190cad1b683d 426 * @warning N/A.
mcm 2:190cad1b683d 427 */
mcm 2:190cad1b683d 428 DS1307::DS1307_status_t DS1307::DS1307_SetDate ( DS1307_vector_data_t myDate )
mcm 2:190cad1b683d 429 {
mcm 2:190cad1b683d 430 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 431 uint32_t aux;
mcm 2:190cad1b683d 432
mcm 2:190cad1b683d 433
mcm 2:190cad1b683d 434 /* Check date limits */
mcm 2:190cad1b683d 435 if ( ( myDate.BCDDate >= 0x01 ) && ( myDate.BCDDate <= 0x31 ) ) {
mcm 2:190cad1b683d 436 /* Read DATE REGISTER to mask it */
mcm 2:190cad1b683d 437 cmd[0] = DS1307_DATE;
mcm 2:190cad1b683d 438 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 439 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 440
mcm 2:190cad1b683d 441
mcm 2:190cad1b683d 442 /* Update the register */
mcm 2:190cad1b683d 443 cmd[1] &= ~( DATE_10DATE_MASK | DATE_DATE_MASK );
mcm 2:190cad1b683d 444 cmd[1] |= myDate.BCDDate;
mcm 2:190cad1b683d 445 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 446 } else {
mcm 2:190cad1b683d 447 return DS1307_FAILURE;
mcm 2:190cad1b683d 448 }
mcm 2:190cad1b683d 449
mcm 2:190cad1b683d 450
mcm 2:190cad1b683d 451
mcm 2:190cad1b683d 452
mcm 2:190cad1b683d 453 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 454 return DS1307_SUCCESS;
mcm 2:190cad1b683d 455 } else {
mcm 2:190cad1b683d 456 return DS1307_FAILURE;
mcm 2:190cad1b683d 457 }
mcm 2:190cad1b683d 458 }
mcm 2:190cad1b683d 459
mcm 2:190cad1b683d 460
mcm 2:190cad1b683d 461
mcm 2:190cad1b683d 462 /**
mcm 2:190cad1b683d 463 * @brief DS1307_GetDate ( DS1307_vector_data_t* )
mcm 2:190cad1b683d 464 *
mcm 2:190cad1b683d 465 * @details It gets the date ( BCD mode ).
mcm 2:190cad1b683d 466 *
mcm 2:190cad1b683d 467 * @param[in] N/A.
mcm 2:190cad1b683d 468 *
mcm 2:190cad1b683d 469 * @param[out] myDate: Date.
mcm 2:190cad1b683d 470 *
mcm 2:190cad1b683d 471 *
mcm 2:190cad1b683d 472 * @return Status of DS1307_GetDate.
mcm 2:190cad1b683d 473 *
mcm 2:190cad1b683d 474 *
mcm 2:190cad1b683d 475 * @author Manuel Caballero
mcm 2:190cad1b683d 476 * @date 30/July/2018
mcm 2:190cad1b683d 477 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 478 * @pre i.e1: 01: 0x01.
mcm 2:190cad1b683d 479 * i.e2: 12: 0x12.
mcm 2:190cad1b683d 480 * @warning N/A.
mcm 2:190cad1b683d 481 */
mcm 2:190cad1b683d 482 DS1307::DS1307_status_t DS1307::DS1307_GetDate ( DS1307_vector_data_t* myDate )
mcm 2:190cad1b683d 483 {
mcm 2:190cad1b683d 484 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 485 uint32_t aux;
mcm 2:190cad1b683d 486
mcm 2:190cad1b683d 487
mcm 2:190cad1b683d 488 /* Read DATE REGISTER to mask it */
mcm 2:190cad1b683d 489 cmd[0] = DS1307_DATE;
mcm 2:190cad1b683d 490 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 491 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 492
mcm 2:190cad1b683d 493
mcm 2:190cad1b683d 494 /* Parse the data */
mcm 2:190cad1b683d 495 myDate->BCDDate = ( cmd[1] & ( DATE_10DATE_MASK | DATE_DATE_MASK ) );
mcm 2:190cad1b683d 496
mcm 2:190cad1b683d 497
mcm 2:190cad1b683d 498
mcm 2:190cad1b683d 499
mcm 2:190cad1b683d 500 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 501 return DS1307_SUCCESS;
mcm 2:190cad1b683d 502 } else {
mcm 2:190cad1b683d 503 return DS1307_FAILURE;
mcm 2:190cad1b683d 504 }
mcm 2:190cad1b683d 505 }
mcm 2:190cad1b683d 506
mcm 2:190cad1b683d 507
mcm 2:190cad1b683d 508
mcm 2:190cad1b683d 509 /**
mcm 2:190cad1b683d 510 * @brief DS1307_SetMonth ( DS1307_vector_data_t )
mcm 2:190cad1b683d 511 *
mcm 2:190cad1b683d 512 * @details It sets the month ( BCD mode ).
mcm 2:190cad1b683d 513 *
mcm 2:190cad1b683d 514 * @param[in] myMonth: Month.
mcm 2:190cad1b683d 515 *
mcm 2:190cad1b683d 516 * @param[out] N/A.
mcm 2:190cad1b683d 517 *
mcm 2:190cad1b683d 518 *
mcm 2:190cad1b683d 519 * @return Status of DS1307_SetMonth.
mcm 2:190cad1b683d 520 *
mcm 2:190cad1b683d 521 *
mcm 2:190cad1b683d 522 * @author Manuel Caballero
mcm 2:190cad1b683d 523 * @date 30/July/2018
mcm 2:190cad1b683d 524 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 525 * @pre i.e1: January: 0x01.
mcm 2:190cad1b683d 526 * i.e2: December: 0x12.
mcm 2:190cad1b683d 527 * @warning N/A.
mcm 2:190cad1b683d 528 */
mcm 2:190cad1b683d 529 DS1307::DS1307_status_t DS1307::DS1307_SetMonth ( DS1307_vector_data_t myMonth )
mcm 2:190cad1b683d 530 {
mcm 2:190cad1b683d 531 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 532 uint32_t aux;
mcm 2:190cad1b683d 533
mcm 2:190cad1b683d 534
mcm 2:190cad1b683d 535 /* Read MONTH REGISTER to mask it */
mcm 2:190cad1b683d 536 cmd[0] = DS1307_MONTH;
mcm 2:190cad1b683d 537 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 538 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 539
mcm 2:190cad1b683d 540
mcm 2:190cad1b683d 541 /* Update the register */
mcm 2:190cad1b683d 542 cmd[1] &= ~( MONTH_10MONTH_MASK | MONTH_MONTH_MASK );
mcm 2:190cad1b683d 543 cmd[1] |= myMonth.BCDMonth;
mcm 2:190cad1b683d 544 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 545
mcm 2:190cad1b683d 546
mcm 2:190cad1b683d 547
mcm 2:190cad1b683d 548
mcm 2:190cad1b683d 549 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 550 return DS1307_SUCCESS;
mcm 2:190cad1b683d 551 } else {
mcm 2:190cad1b683d 552 return DS1307_FAILURE;
mcm 2:190cad1b683d 553 }
mcm 2:190cad1b683d 554 }
mcm 2:190cad1b683d 555
mcm 2:190cad1b683d 556
mcm 2:190cad1b683d 557
mcm 2:190cad1b683d 558 /**
mcm 2:190cad1b683d 559 * @brief DS1307_GetMonth ( DS1307_vector_data_t* )
mcm 2:190cad1b683d 560 *
mcm 2:190cad1b683d 561 * @details It gets the month ( BCD mode ).
mcm 2:190cad1b683d 562 *
mcm 2:190cad1b683d 563 * @param[in] N/A.
mcm 2:190cad1b683d 564 *
mcm 2:190cad1b683d 565 * @param[out] myMonth: Month.
mcm 2:190cad1b683d 566 *
mcm 2:190cad1b683d 567 *
mcm 2:190cad1b683d 568 * @return Status of DS1307_GetMonth.
mcm 2:190cad1b683d 569 *
mcm 2:190cad1b683d 570 *
mcm 2:190cad1b683d 571 * @author Manuel Caballero
mcm 2:190cad1b683d 572 * @date 30/July/2018
mcm 2:190cad1b683d 573 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 574 * @pre i.e1: January: 0x01.
mcm 2:190cad1b683d 575 * i.e2: December: 0x12.
mcm 2:190cad1b683d 576 * @warning N/A.
mcm 2:190cad1b683d 577 */
mcm 2:190cad1b683d 578 DS1307::DS1307_status_t DS1307::DS1307_GetMonth ( DS1307_vector_data_t* myMonth )
mcm 2:190cad1b683d 579 {
mcm 2:190cad1b683d 580 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 581 uint32_t aux;
mcm 2:190cad1b683d 582
mcm 2:190cad1b683d 583
mcm 2:190cad1b683d 584 /* Read MONTH REGISTER to mask it */
mcm 2:190cad1b683d 585 cmd[0] = DS1307_MONTH;
mcm 2:190cad1b683d 586 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 587 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 588
mcm 2:190cad1b683d 589
mcm 2:190cad1b683d 590 /* Parse the data */
mcm 2:190cad1b683d 591 myMonth->BCDMonth = (DS1307_month_t)( cmd[1] & ( MONTH_10MONTH_MASK | MONTH_MONTH_MASK ) );
mcm 2:190cad1b683d 592
mcm 2:190cad1b683d 593
mcm 2:190cad1b683d 594
mcm 2:190cad1b683d 595
mcm 2:190cad1b683d 596 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 597 return DS1307_SUCCESS;
mcm 2:190cad1b683d 598 } else {
mcm 2:190cad1b683d 599 return DS1307_FAILURE;
mcm 2:190cad1b683d 600 }
mcm 2:190cad1b683d 601 }
mcm 2:190cad1b683d 602
mcm 2:190cad1b683d 603
mcm 2:190cad1b683d 604
mcm 2:190cad1b683d 605 /**
mcm 2:190cad1b683d 606 * @brief DS1307_SetYear ( DS1307_vector_data_t )
mcm 2:190cad1b683d 607 *
mcm 2:190cad1b683d 608 * @details It sets the year ( BCD mode ).
mcm 2:190cad1b683d 609 *
mcm 2:190cad1b683d 610 * @param[in] myYear: Year.
mcm 2:190cad1b683d 611 *
mcm 2:190cad1b683d 612 * @param[out] N/A.
mcm 2:190cad1b683d 613 *
mcm 2:190cad1b683d 614 *
mcm 2:190cad1b683d 615 * @return Status of DS1307_SetYear.
mcm 2:190cad1b683d 616 *
mcm 2:190cad1b683d 617 *
mcm 2:190cad1b683d 618 * @author Manuel Caballero
mcm 2:190cad1b683d 619 * @date 30/July/2018
mcm 2:190cad1b683d 620 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 621 * @pre i.e1: 2000: 0x00.
mcm 2:190cad1b683d 622 * i.e2: 2018: 0x18.
mcm 2:190cad1b683d 623 * @warning N/A.
mcm 2:190cad1b683d 624 */
mcm 2:190cad1b683d 625 DS1307::DS1307_status_t DS1307::DS1307_SetYear ( DS1307_vector_data_t myYear )
mcm 2:190cad1b683d 626 {
mcm 2:190cad1b683d 627 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 628 uint32_t aux;
mcm 2:190cad1b683d 629
mcm 2:190cad1b683d 630
mcm 2:190cad1b683d 631 /* Update the register */
mcm 2:190cad1b683d 632 cmd[0] = DS1307_YEAR;
mcm 2:190cad1b683d 633 cmd[1] = myYear.BCDYear;
mcm 2:190cad1b683d 634 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 635
mcm 2:190cad1b683d 636
mcm 2:190cad1b683d 637
mcm 2:190cad1b683d 638
mcm 2:190cad1b683d 639 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 640 return DS1307_SUCCESS;
mcm 2:190cad1b683d 641 } else {
mcm 2:190cad1b683d 642 return DS1307_FAILURE;
mcm 2:190cad1b683d 643 }
mcm 2:190cad1b683d 644 }
mcm 2:190cad1b683d 645
mcm 2:190cad1b683d 646
mcm 2:190cad1b683d 647
mcm 2:190cad1b683d 648 /**
mcm 2:190cad1b683d 649 * @brief DS1307_GetYear ( DS1307_vector_data_t* )
mcm 2:190cad1b683d 650 *
mcm 2:190cad1b683d 651 * @details It gets the year ( BCD mode ).
mcm 2:190cad1b683d 652 *
mcm 2:190cad1b683d 653 * @param[in] N/A
mcm 2:190cad1b683d 654 *
mcm 2:190cad1b683d 655 * @param[out] myYear: Year.
mcm 2:190cad1b683d 656 *
mcm 2:190cad1b683d 657 *
mcm 2:190cad1b683d 658 * @return Status of DS1307_GetYear.
mcm 2:190cad1b683d 659 *
mcm 2:190cad1b683d 660 *
mcm 2:190cad1b683d 661 * @author Manuel Caballero
mcm 2:190cad1b683d 662 * @date 30/July/2018
mcm 2:190cad1b683d 663 * @version 30/July/2018 The ORIGIN
mcm 2:190cad1b683d 664 * @pre i.e1: 2000: 0x00.
mcm 2:190cad1b683d 665 * i.e2: 2018: 0x18.
mcm 2:190cad1b683d 666 * @warning N/A.
mcm 2:190cad1b683d 667 */
mcm 2:190cad1b683d 668 DS1307::DS1307_status_t DS1307::DS1307_GetYear ( DS1307_vector_data_t* myYear )
mcm 2:190cad1b683d 669 {
mcm 2:190cad1b683d 670 char cmd = 0;
mcm 2:190cad1b683d 671 uint32_t aux;
mcm 2:190cad1b683d 672
mcm 2:190cad1b683d 673
mcm 2:190cad1b683d 674 /* Read YEAR REGISTER to mask it */
mcm 2:190cad1b683d 675 cmd = DS1307_YEAR;
mcm 2:190cad1b683d 676 aux = _i2c.write ( _DS1307_Addr, &cmd, 1U, true );
mcm 2:190cad1b683d 677 aux = _i2c.read ( _DS1307_Addr, (char*)&myYear->BCDYear, 1U );
mcm 2:190cad1b683d 678
mcm 2:190cad1b683d 679
mcm 2:190cad1b683d 680
mcm 2:190cad1b683d 681
mcm 2:190cad1b683d 682
mcm 2:190cad1b683d 683 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 684 return DS1307_SUCCESS;
mcm 2:190cad1b683d 685 } else {
mcm 2:190cad1b683d 686 return DS1307_FAILURE;
mcm 2:190cad1b683d 687 }
mcm 2:190cad1b683d 688 }
mcm 2:190cad1b683d 689
mcm 2:190cad1b683d 690
mcm 2:190cad1b683d 691
mcm 2:190cad1b683d 692 /**
mcm 2:190cad1b683d 693 * @brief DS1307_OscillatorMode ( DS1307_seconds_ch_t )
mcm 2:190cad1b683d 694 *
mcm 2:190cad1b683d 695 * @details It enables/disabled the oscillator.
mcm 2:190cad1b683d 696 *
mcm 2:190cad1b683d 697 * @param[in] myOscillator: Oscillator enabled/disabled.
mcm 2:190cad1b683d 698 *
mcm 2:190cad1b683d 699 * @param[out] N/A.
mcm 2:190cad1b683d 700 *
mcm 2:190cad1b683d 701 *
mcm 2:190cad1b683d 702 * @return Status of DS1307_OscillatorMode.
mcm 2:190cad1b683d 703 *
mcm 2:190cad1b683d 704 *
mcm 2:190cad1b683d 705 * @author Manuel Caballero
mcm 2:190cad1b683d 706 * @date 31/July/2018
mcm 2:190cad1b683d 707 * @version 31/July/2018 The ORIGIN
mcm 2:190cad1b683d 708 * @pre The clock can be halted whenever the timekeeping functions are not required,
mcm 2:190cad1b683d 709 * which minimizes current ( I_BATDR ).
mcm 2:190cad1b683d 710 * @warning N/A.
mcm 2:190cad1b683d 711 */
mcm 2:190cad1b683d 712 DS1307::DS1307_status_t DS1307::DS1307_OscillatorMode ( DS1307_seconds_ch_t myOscillator )
mcm 2:190cad1b683d 713 {
mcm 2:190cad1b683d 714 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 715 uint32_t aux;
mcm 2:190cad1b683d 716
mcm 2:190cad1b683d 717
mcm 2:190cad1b683d 718 /* Read SECONDS REGISTER to mask it */
mcm 2:190cad1b683d 719 cmd[0] = DS1307_SECONDS;
mcm 2:190cad1b683d 720 aux = _i2c.write ( _DS1307_Addr, &cmd[0], 1U, true );
mcm 2:190cad1b683d 721 aux = _i2c.read ( _DS1307_Addr, &cmd[1], 1U );
mcm 2:190cad1b683d 722
mcm 2:190cad1b683d 723
mcm 2:190cad1b683d 724 /* Update the register */
mcm 2:190cad1b683d 725 cmd[1] &= ~( SECONDS_CH_MASK );
mcm 2:190cad1b683d 726 cmd[1] |= myOscillator;
mcm 2:190cad1b683d 727 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 728
mcm 2:190cad1b683d 729
mcm 2:190cad1b683d 730
mcm 2:190cad1b683d 731
mcm 2:190cad1b683d 732
mcm 2:190cad1b683d 733 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 734 return DS1307_SUCCESS;
mcm 2:190cad1b683d 735 } else {
mcm 2:190cad1b683d 736 return DS1307_FAILURE;
mcm 2:190cad1b683d 737 }
mcm 2:190cad1b683d 738 }
mcm 2:190cad1b683d 739
mcm 2:190cad1b683d 740
mcm 2:190cad1b683d 741
mcm 2:190cad1b683d 742 /**
mcm 2:190cad1b683d 743 * @brief DS1307_WriteByteRAM ( uint8_t , uint8_t )
mcm 2:190cad1b683d 744 *
mcm 2:190cad1b683d 745 * @details It writes a byte into the RAM memory.
mcm 2:190cad1b683d 746 *
mcm 2:190cad1b683d 747 * @param[in] myByte: Byte to be written.
mcm 2:190cad1b683d 748 * @param[in] myAddress: Address to write the byte.
mcm 2:190cad1b683d 749 *
mcm 2:190cad1b683d 750 * @param[out] N/A.
mcm 2:190cad1b683d 751 *
mcm 2:190cad1b683d 752 *
mcm 2:190cad1b683d 753 * @return Status of DS1307_WriteByteRAM.
mcm 2:190cad1b683d 754 *
mcm 2:190cad1b683d 755 *
mcm 2:190cad1b683d 756 * @author Manuel Caballero
mcm 2:190cad1b683d 757 * @date 31/July/2018
mcm 2:190cad1b683d 758 * @version 31/July/2018 The ORIGIN
mcm 2:190cad1b683d 759 * @pre N/A.
mcm 2:190cad1b683d 760 * @warning N/A.
mcm 2:190cad1b683d 761 */
mcm 2:190cad1b683d 762 DS1307::DS1307_status_t DS1307::DS1307_WriteByteRAM ( uint8_t myByte, uint8_t myAddress )
mcm 2:190cad1b683d 763 {
mcm 2:190cad1b683d 764 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 765 uint32_t aux;
mcm 2:190cad1b683d 766
mcm 2:190cad1b683d 767
mcm 2:190cad1b683d 768 /* Check RAM memory limits */
mcm 2:190cad1b683d 769 if ( ( myAddress >= 0x08 ) && ( myAddress <= 0x3F ) ) {
mcm 2:190cad1b683d 770 /* Write data into the RAM memory */
mcm 2:190cad1b683d 771 cmd[0] = myAddress;
mcm 2:190cad1b683d 772 cmd[1] = myByte;
mcm 2:190cad1b683d 773 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 774 } else {
mcm 2:190cad1b683d 775 return DS1307_FAILURE;
mcm 2:190cad1b683d 776 }
mcm 2:190cad1b683d 777
mcm 2:190cad1b683d 778
mcm 2:190cad1b683d 779
mcm 2:190cad1b683d 780
mcm 2:190cad1b683d 781 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 782 return DS1307_SUCCESS;
mcm 2:190cad1b683d 783 } else {
mcm 2:190cad1b683d 784 return DS1307_FAILURE;
mcm 2:190cad1b683d 785 }
mcm 2:190cad1b683d 786 }
mcm 2:190cad1b683d 787
mcm 2:190cad1b683d 788
mcm 2:190cad1b683d 789
mcm 2:190cad1b683d 790 /**
mcm 2:190cad1b683d 791 * @brief DS1307_ReadByteRAM ( uint8_t* , uint8_t )
mcm 2:190cad1b683d 792 *
mcm 2:190cad1b683d 793 * @details It reads a byte from the RAM memory.
mcm 2:190cad1b683d 794 *
mcm 2:190cad1b683d 795 * @param[in] myAddress: Address to write the byte.
mcm 2:190cad1b683d 796 *
mcm 2:190cad1b683d 797 * @param[out] myByte: Byte to be read.
mcm 2:190cad1b683d 798 *
mcm 2:190cad1b683d 799 *
mcm 2:190cad1b683d 800 * @return Status of DS1307_ReadByteRAM.
mcm 2:190cad1b683d 801 *
mcm 2:190cad1b683d 802 *
mcm 2:190cad1b683d 803 * @author Manuel Caballero
mcm 2:190cad1b683d 804 * @date 31/July/2018
mcm 2:190cad1b683d 805 * @version 31/July/2018 The ORIGIN
mcm 2:190cad1b683d 806 * @pre N/A.
mcm 2:190cad1b683d 807 * @warning N/A.
mcm 2:190cad1b683d 808 */
mcm 2:190cad1b683d 809 DS1307::DS1307_status_t DS1307::DS1307_ReadByteRAM ( uint8_t* myByte, uint8_t myAddress )
mcm 2:190cad1b683d 810 {
mcm 2:190cad1b683d 811 char cmd = 0;
mcm 2:190cad1b683d 812 uint32_t aux;
mcm 2:190cad1b683d 813
mcm 2:190cad1b683d 814
mcm 2:190cad1b683d 815 /* Check RAM memory limits */
mcm 2:190cad1b683d 816 if ( ( myAddress >= 0x08 ) && ( myAddress <= 0x3F ) ) {
mcm 2:190cad1b683d 817 /* Read data from the RAM memory */
mcm 2:190cad1b683d 818 cmd = myAddress;
mcm 2:190cad1b683d 819 aux = _i2c.write ( _DS1307_Addr, &cmd, 1U, true );
mcm 2:190cad1b683d 820 aux = _i2c.read ( _DS1307_Addr, (char*)myByte, 1U );
mcm 2:190cad1b683d 821 } else {
mcm 2:190cad1b683d 822 return DS1307_FAILURE;
mcm 2:190cad1b683d 823 }
mcm 2:190cad1b683d 824
mcm 2:190cad1b683d 825
mcm 2:190cad1b683d 826
mcm 2:190cad1b683d 827 if ( aux == I2C_SUCCESS ) {
mcm 2:190cad1b683d 828 return DS1307_SUCCESS;
mcm 2:190cad1b683d 829 } else {
mcm 2:190cad1b683d 830 return DS1307_FAILURE;
mcm 2:190cad1b683d 831 }
mcm 2:190cad1b683d 832 }
mcm 2:190cad1b683d 833
mcm 2:190cad1b683d 834
mcm 2:190cad1b683d 835
mcm 2:190cad1b683d 836 /**
mcm 2:190cad1b683d 837 * @brief DS1307_EraseByteRAM ( uint8_t )
mcm 2:190cad1b683d 838 *
mcm 2:190cad1b683d 839 * @details It ereases a byte into the RAM memory.
mcm 2:190cad1b683d 840 *
mcm 2:190cad1b683d 841 * @param[in] myAddress: Address to write the byte.
mcm 2:190cad1b683d 842 *
mcm 2:190cad1b683d 843 * @param[out] N/A
mcm 2:190cad1b683d 844 *
mcm 2:190cad1b683d 845 *
mcm 2:190cad1b683d 846 * @return Status of DS1307_EraseByteRAM.
mcm 2:190cad1b683d 847 *
mcm 2:190cad1b683d 848 *
mcm 2:190cad1b683d 849 * @author Manuel Caballero
mcm 2:190cad1b683d 850 * @date 31/July/2018
mcm 2:190cad1b683d 851 * @version 31/July/2018 The ORIGIN
mcm 2:190cad1b683d 852 * @pre N/A.
mcm 2:190cad1b683d 853 * @warning N/A.
mcm 2:190cad1b683d 854 */
mcm 2:190cad1b683d 855 DS1307::DS1307_status_t DS1307::DS1307_EraseByteRAM ( uint8_t myAddress )
mcm 2:190cad1b683d 856 {
mcm 2:190cad1b683d 857 char cmd[] = { 0, 0 };
mcm 2:190cad1b683d 858 uint32_t aux;
mcm 2:190cad1b683d 859
mcm 2:190cad1b683d 860
mcm 2:190cad1b683d 861 /* Check RAM memory limits */
mcm 2:190cad1b683d 862 if ( ( myAddress >= 0x08 ) && ( myAddress <= 0x3F ) ) {
mcm 2:190cad1b683d 863 /* Write data into the RAM memory */
mcm 2:190cad1b683d 864 cmd[0] = myAddress;
mcm 2:190cad1b683d 865 cmd[1] = 0xFF;
mcm 2:190cad1b683d 866 aux = _i2c.write ( _DS1307_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 2:190cad1b683d 867 } else {
mcm 2:190cad1b683d 868 return DS1307_FAILURE;
mcm 2:190cad1b683d 869 }
mcm 2:190cad1b683d 870
mcm 2:190cad1b683d 871
mcm 2:190cad1b683d 872 if ( aux == I2C_SUCCESS )
mcm 2:190cad1b683d 873 {
mcm 2:190cad1b683d 874 return DS1307_SUCCESS;
mcm 2:190cad1b683d 875 }
mcm 2:190cad1b683d 876 else
mcm 2:190cad1b683d 877 {
mcm 2:190cad1b683d 878 return DS1307_FAILURE;
mcm 2:190cad1b683d 879 }
mcm 2:190cad1b683d 880 }