rtc18 2.0.0.0
rtc18.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
28#ifndef RTC18_H
29#define RTC18_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52
73#define RTC18_REG_100TH_SECONDS 0x00
74#define RTC18_REG_SECONDS 0x01
75#define RTC18_REG_MINUTES 0x02
76#define RTC18_REG_HOURS 0x03
77#define RTC18_REG_WEEKDAY 0x04
78#define RTC18_REG_DATE 0x05
79#define RTC18_REG_MONTH 0x06
80#define RTC18_REG_YEAR 0x07
81#define RTC18_REG_MINUTES_ALARM 0x08
82#define RTC18_REG_HOURS_ALARM 0x09
83#define RTC18_REG_DATE_ALARM 0x0A
84#define RTC18_REG_TIMER_VALUE_0 0x0B
85#define RTC18_REG_TIMER_VALUE_1 0x0C
86#define RTC18_REG_STATUS 0x0D
87#define RTC18_REG_TEMPERATURE_LSB 0x0E
88#define RTC18_REG_TEMPERATURE_MSB 0x0F
89#define RTC18_REG_CONTROL_1 0x10
90#define RTC18_REG_CONTROL_2 0x11
91#define RTC18_REG_CONTROL_3 0x12
92#define RTC18_REG_TIME_STAMP_CONTROL 0x13
93#define RTC18_REG_CLOCK_INT_MASK 0x14
94#define RTC18_REG_EVI_CONTROL 0x15
95#define RTC18_REG_TLOW_THRESHOLD 0x16
96#define RTC18_REG_THIGH_THRESHOLD 0x17
97#define RTC18_REG_TS_TLOW_COUNT 0x18
98#define RTC18_REG_TS_TLOW_SECONDS 0x19
99#define RTC18_REG_TS_TLOW_MINUTES 0x1A
100#define RTC18_REG_TS_TLOW_HOURS 0x1B
101#define RTC18_REG_TS_TLOW_DATE 0x1C
102#define RTC18_REG_TS_TLOW_MONTH 0x1D
103#define RTC18_REG_TS_TLOW_YEAR 0x1E
104#define RTC18_REG_TS_THIGH_COUNT 0x1F
105#define RTC18_REG_TS_THIGH_SECONDS 0x20
106#define RTC18_REG_TS_THIGH_MINUTES 0x21
107#define RTC18_REG_TS_THIGH_HOURS 0x22
108#define RTC18_REG_TS_THIGH_DATE 0x23
109#define RTC18_REG_TS_THIGH_MONTH 0x24
110#define RTC18_REG_TS_THIGH_YEAR 0x25
111#define RTC18_REG_TS_EVI_COUNT 0x26
112#define RTC18_REG_TS_EVI_100TH_SECONDS 0x27
113#define RTC18_REG_TS_EVI_SECONDS 0x28
114#define RTC18_REG_TS_EVI_MINUTES 0x29
115#define RTC18_REG_TS_EVI_HOURS 0x2A
116#define RTC18_REG_TS_EVI_DATE 0x2B
117#define RTC18_REG_TS_EVI_MONTH 0x2C
118#define RTC18_REG_TS_EVI_YEAR 0x2D
119#define RTC18_REG_PASSWORD_0 0x39
120#define RTC18_REG_PASSWORD_1 0x3A
121#define RTC18_REG_PASSWORD_2 0x3B
122#define RTC18_REG_PASSWORD_3 0x3C
123#define RTC18_REG_EEPROM_ADDRESS 0x3D
124#define RTC18_REG_EEPROM_DATA 0x3E
125#define RTC18_REG_EEPROM_COMMAND 0x3F
126#define RTC18_REG_USER_RAM_16B 0x40
127
132#define RTC18_EEPROM_PMU 0xC0
133#define RTC18_EEPROM_OFFSET 0xC1
134#define RTC18_EEPROM_CLKOUT_1 0xC2
135#define RTC18_EEPROM_CLKOUT_2 0xC3
136#define RTC18_EEPROM_TREF_0 0xC4
137#define RTC18_EEPROM_TREF_1 0xC5
138#define RTC18_EEPROM_PASSWORD_0 0xC6
139#define RTC18_EEPROM_PASSWORD_1 0xC7
140#define RTC18_EEPROM_PASSWORD_2 0xC8
141#define RTC18_EEPROM_PASSWORD_3 0xC9
142#define RTC18_EEPROM_PW_ENABLE 0xCA
143#define RTC18_EEPROM_USER_MEMORY_32B 0xCB
144
145 // rtc18_reg
146
161#define RTC18_STATUS_THF 0x80
162#define RTC18_STATUS_TLF 0x40
163#define RTC18_STATUS_UF 0x20
164#define RTC18_STATUS_TF 0x10
165#define RTC18_STATUS_AF 0x08
166#define RTC18_STATUS_EVF 0x04
167#define RTC18_STATUS_PORF 0x02
168#define RTC18_STATUS_VLF 0x01
169
174#define RTC18_CONTROL1_RESERVED 0x20
175#define RTC18_CONTROL1_USEL 0x10
176#define RTC18_CONTROL1_TE 0x08
177#define RTC18_CONTROL1_EERD 0x04
178#define RTC18_CONTROL1_TD_4096HZ 0x00
179#define RTC18_CONTROL1_TD_64HZ 0x01
180#define RTC18_CONTROL1_TD_1HZ 0x02
181#define RTC18_CONTROL1_TD_1_60HZ 0x03
182#define RTC18_CONTROL1_TD_BIT_MASK 0x03
183
188#define RTC18_CONTROL2_CLKIE 0x40
189#define RTC18_CONTROL2_UIE 0x20
190#define RTC18_CONTROL2_TIE 0x10
191#define RTC18_CONTROL2_AIE 0x08
192#define RTC18_CONTROL2_EIE 0x04
193#define RTC18_CONTROL2_STOP 0x01
194
199#define RTC18_CONTROL3_BSIE 0x10
200#define RTC18_CONTROL3_THE 0x08
201#define RTC18_CONTROL3_TLE 0x04
202#define RTC18_CONTROL3_THIE 0x02
203#define RTC18_CONTROL3_TLIE 0x01
204
209#define RTC18_MONDAY 0x00
210#define RTC18_TUESDAY 0x01
211#define RTC18_WEDNESDAY 0x02
212#define RTC18_THURSDAY 0x03
213#define RTC18_FRIDAY 0x04
214#define RTC18_SATURDAY 0x05
215#define RTC18_SUNDAY 0x06
216
221#define RTC18_TEMPERATURE_RESOLUTION 0.0625
222#define RTC18_TEMPERATURE_LSB_TEMP_BIT_MASK 0xF0
223#define RTC18_TEMPERATURE_LSB_EEF 0x08
224#define RTC18_TEMPERATURE_LSB_EEBUSY 0x04
225#define RTC18_TEMPERATURE_LSB_CLKF 0x02
226#define RTC18_TEMPERATURE_LSB_BSF 0x01
227
232#define RTC18_EECMD_UPDATE 0x11
233#define RTC18_EECMD_REFRESH 0x12
234#define RTC18_EECMD_WRITE_ONE_BYTE 0x21
235#define RTC18_EECMD_READ_ONE_BYTE 0x22
236
242#define RTC18_DEVICE_ADDRESS 0x51
243
244 // rtc18_set
245
260#define RTC18_MAP_MIKROBUS( cfg, mikrobus ) \
261 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
262 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
263 cfg.evi = MIKROBUS( mikrobus, MIKROBUS_CS ); \
264 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
265
266 // rtc18_map
267 // rtc18
268
273typedef struct
274{
275 // Output pins
276 digital_out_t evi;
278 // Input pins
279 digital_in_t int_pin;
281 // Modules
282 i2c_master_t i2c;
284 // I2C slave address
287} rtc18_t;
288
293typedef struct
294{
295 pin_name_t scl;
296 pin_name_t sda;
298 pin_name_t evi;
299 pin_name_t int_pin;
301 uint32_t i2c_speed;
302 uint8_t i2c_address;
305
311typedef struct
312{
314 uint8_t second;
315 uint8_t minute;
316 uint8_t hour;
317
319
325typedef struct
326{
327 uint8_t day_of_week;
328 uint8_t day;
329 uint8_t month;
330 uint8_t year;
331
333
338typedef enum
339{
341 RTC18_ERROR = -1
342
344
361
375err_t rtc18_init ( rtc18_t *ctx, rtc18_cfg_t *cfg );
376
390
405err_t rtc18_generic_write ( rtc18_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
406
421err_t rtc18_generic_read ( rtc18_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
422
436err_t rtc18_write_register ( rtc18_t *ctx, uint8_t reg, uint8_t data_in );
437
450err_t rtc18_read_register ( rtc18_t *ctx, uint8_t reg, uint8_t *data_out );
451
461void rtc18_set_evi_pin ( rtc18_t *ctx, uint8_t state );
462
471uint8_t rtc18_get_int_pin ( rtc18_t *ctx );
472
484
497err_t rtc18_set_time ( rtc18_t *ctx, rtc18_time_t *time );
498
512
525err_t rtc18_set_date ( rtc18_t *ctx, rtc18_date_t *date );
526
540
552err_t rtc18_read_temperature ( rtc18_t *ctx, float *temperature );
553
567err_t rtc18_write_eeprom ( rtc18_t *ctx, uint8_t address, uint8_t data_in );
568
581err_t rtc18_read_eeprom ( rtc18_t *ctx, uint8_t address, uint8_t *data_out );
582
583#ifdef __cplusplus
584}
585#endif
586#endif // RTC18_H
587
588 // rtc18
589
590// ------------------------------------------------------------------------ END
err_t rtc18_generic_write(rtc18_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
RTC 18 I2C writing function.
err_t rtc18_generic_read(rtc18_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
RTC 18 I2C reading function.
err_t rtc18_read_register(rtc18_t *ctx, uint8_t reg, uint8_t *data_out)
RTC 18 read register function.
err_t rtc18_init(rtc18_t *ctx, rtc18_cfg_t *cfg)
RTC 18 initialization function.
err_t rtc18_read_time(rtc18_t *ctx, rtc18_time_t *time)
RTC 18 read time function.
err_t rtc18_clear_periodic_interrupt(rtc18_t *ctx)
RTC 18 clear periodic interrupt function.
void rtc18_cfg_setup(rtc18_cfg_t *cfg)
RTC 18 configuration object setup function.
err_t rtc18_read_eeprom(rtc18_t *ctx, uint8_t address, uint8_t *data_out)
RTC 18 read eeprom function.
err_t rtc18_set_time(rtc18_t *ctx, rtc18_time_t *time)
RTC 18 set time function.
err_t rtc18_write_register(rtc18_t *ctx, uint8_t reg, uint8_t data_in)
RTC 18 write register function.
void rtc18_set_evi_pin(rtc18_t *ctx, uint8_t state)
RTC 18 set EVI pin function.
err_t rtc18_default_cfg(rtc18_t *ctx)
RTC 18 default configuration function.
uint8_t rtc18_get_int_pin(rtc18_t *ctx)
RTC 18 get int pin function.
err_t rtc18_set_date(rtc18_t *ctx, rtc18_date_t *date)
RTC 18 set date function.
err_t rtc18_read_temperature(rtc18_t *ctx, float *temperature)
RTC 18 read temperature function.
err_t rtc18_write_eeprom(rtc18_t *ctx, uint8_t address, uint8_t data_in)
RTC 18 write eeprom function.
err_t rtc18_read_date(rtc18_t *ctx, rtc18_date_t *date)
RTC 18 read date function.
rtc18_return_value_t
RTC 18 Click return value data.
Definition rtc18.h:339
@ RTC18_OK
Definition rtc18.h:340
@ RTC18_ERROR
Definition rtc18.h:341
RTC 18 Click configuration object.
Definition rtc18.h:294
uint32_t i2c_speed
Definition rtc18.h:301
pin_name_t evi
Definition rtc18.h:298
pin_name_t scl
Definition rtc18.h:295
pin_name_t int_pin
Definition rtc18.h:299
pin_name_t sda
Definition rtc18.h:296
uint8_t i2c_address
Definition rtc18.h:302
RTC 18 Click date object.
Definition rtc18.h:326
uint8_t month
Definition rtc18.h:329
uint8_t day
Definition rtc18.h:328
uint8_t year
Definition rtc18.h:330
uint8_t day_of_week
Definition rtc18.h:327
RTC 18 Click context object.
Definition rtc18.h:274
digital_out_t evi
Definition rtc18.h:276
digital_in_t int_pin
Definition rtc18.h:279
i2c_master_t i2c
Definition rtc18.h:282
uint8_t slave_address
Definition rtc18.h:285
RTC 18 Click time object.
Definition rtc18.h:312
uint8_t second
Definition rtc18.h:314
uint8_t minute
Definition rtc18.h:315
uint8_t second_100th
Definition rtc18.h:313
uint8_t hour
Definition rtc18.h:316