rtc16 2.0.0.0
rtc16.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 RTC16_H
29#define RTC16_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 RTC16_REG_SECOND_COUNTER 0x00
74#define RTC16_REG_MINUTE_COUNTER 0x01
75#define RTC16_REG_HOUR_COUNTER 0x02
76#define RTC16_REG_DAY_OF_WEEK_COUNTER 0x03
77#define RTC16_REG_DAY_COUNTER 0x04
78#define RTC16_REG_MONTH_COUNTER 0x05
79#define RTC16_REG_YEAR_COUNTER 0x06
80#define RTC16_REG_TIME_TRIMMING 0x07
81#define RTC16_REG_ALARM_A_MINUTE 0x08
82#define RTC16_REG_ALARM_A_HOUR 0x09
83#define RTC16_REG_ALARM_A_DAY_OF_WEEK 0x0A
84#define RTC16_REG_ALARM_B_MINUTE 0x0B
85#define RTC16_REG_ALARM_B_HOUR 0x0C
86#define RTC16_REG_ALARM_B_DAY_OF_WEEK 0x0D
87#define RTC16_REG_CONTROL1 0x0E
88#define RTC16_REG_CONTROL2 0x0F
89
90 // rtc16_reg
91
106#define RTC16_CONTROL1_ALARM_A_DISABLE 0x00
107#define RTC16_CONTROL1_ALARM_A_ENABLE 0x80
108#define RTC16_CONTROL1_ALARM_B_DISABLE 0x00
109#define RTC16_CONTROL1_ALARM_B_ENABLE 0x40
110#define RTC16_CONTROL1_TEST_NORMAL 0x00
111#define RTC16_CONTROL1_TEST_TEST 0x10
112#define RTC16_CONTROL1_CT_OFF 0x00
113#define RTC16_CONTROL1_CT_FIXED_L 0x01
114#define RTC16_CONTROL1_CT_PULSE_2HZ 0x02
115#define RTC16_CONTROL1_CT_PULSE_1HZ 0x03
116#define RTC16_CONTROL1_CT_EVERY_SECOND 0x04
117#define RTC16_CONTROL1_CT_EVERY_MINUTE 0x05
118#define RTC16_CONTROL1_CT_EVERY_HOUR 0x06
119#define RTC16_CONTROL1_CT_EVERY_MONTH 0x07
120
125#define RTC16_CONTROL2_12HOUR_TIME 0x00
126#define RTC16_CONTROL2_24HOUR_TIME 0x20
127#define RTC16_CONTROL2_ADJ_BIT 0x10
128#define RTC16_CONTROL2_CLOCK_ENABLE 0x00
129#define RTC16_CONTROL2_CLOCK_DISABLE 0x08
130#define RTC16_CONTROL2_CLEAR_INTERRUPT 0x04
131#define RTC16_CONTROL2_CLEAR_ALARM_A 0x02
132#define RTC16_CONTROL2_CLEAR_ALARM_B 0x01
133
138#define RTC16_MONDAY 0x00
139#define RTC16_TUESDAY 0x01
140#define RTC16_WEDNESDAY 0x02
141#define RTC16_THURSDAY 0x03
142#define RTC16_FRIDAY 0x04
143#define RTC16_SATURDAY 0x05
144#define RTC16_SUNDAY 0x06
145
150#define RTC16_FAST_READ_BIT 0x04
151
157#define RTC16_DEVICE_ADDRESS 0x32
158
159 // rtc16_set
160
175#define RTC16_MAP_MIKROBUS( cfg, mikrobus ) \
176 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
177 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
178 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
179
180 // rtc16_map
181 // rtc16
182
187typedef struct
188{
189 // Input pins
190 digital_in_t int_pin;
192 // Modules
193 i2c_master_t i2c;
195 // I2C slave address
198} rtc16_t;
199
204typedef struct
205{
206 pin_name_t scl;
207 pin_name_t sda;
209 pin_name_t int_pin;
211 uint32_t i2c_speed;
212 uint8_t i2c_address;
215
221typedef struct
222{
223 uint8_t second;
224 uint8_t minute;
225 uint8_t hour;
226
228
234typedef struct
235{
236 uint8_t day_of_week;
237 uint8_t day;
238 uint8_t month;
239 uint8_t year;
240
242
247typedef enum
248{
250 RTC16_ERROR = -1
251
253
270
284err_t rtc16_init ( rtc16_t *ctx, rtc16_cfg_t *cfg );
285
299
313err_t rtc16_write_register ( rtc16_t *ctx, uint8_t reg, uint8_t data_in );
314
329err_t rtc16_write_multiple_registers ( rtc16_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
330
343err_t rtc16_read_register ( rtc16_t *ctx, uint8_t reg, uint8_t *data_out );
344
358err_t rtc16_read_register_fast ( rtc16_t *ctx, uint8_t reg, uint8_t *data_out );
359
374err_t rtc16_read_multiple_registers ( rtc16_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
375
390err_t rtc16_read_multiple_registers_fast ( rtc16_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
391
400uint8_t rtc16_get_int_pin ( rtc16_t *ctx );
401
413
426err_t rtc16_set_time ( rtc16_t *ctx, rtc16_time_t *time );
427
441
454err_t rtc16_set_date ( rtc16_t *ctx, rtc16_date_t *date );
455
469
470#ifdef __cplusplus
471}
472#endif
473#endif // RTC16_H
474
475 // rtc16
476
477// ------------------------------------------------------------------------ END
err_t rtc16_write_register(rtc16_t *ctx, uint8_t reg, uint8_t data_in)
RTC 16 write register function.
err_t rtc16_set_date(rtc16_t *ctx, rtc16_date_t *date)
RTC 16 set date function.
err_t rtc16_default_cfg(rtc16_t *ctx)
RTC 16 default configuration function.
void rtc16_cfg_setup(rtc16_cfg_t *cfg)
RTC 16 configuration object setup function.
err_t rtc16_clear_interrupts(rtc16_t *ctx)
RTC 16 clear interrupts function.
err_t rtc16_read_multiple_registers(rtc16_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
RTC 16 read multiple registers function.
err_t rtc16_read_register_fast(rtc16_t *ctx, uint8_t reg, uint8_t *data_out)
RTC 16 read register fast function.
err_t rtc16_read_multiple_registers_fast(rtc16_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
RTC 16 read multiple registers fast function.
err_t rtc16_write_multiple_registers(rtc16_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
RTC 16 write multiple registers function.
err_t rtc16_read_register(rtc16_t *ctx, uint8_t reg, uint8_t *data_out)
RTC 16 read register function.
err_t rtc16_read_date(rtc16_t *ctx, rtc16_date_t *date)
RTC 16 read date function.
err_t rtc16_read_time(rtc16_t *ctx, rtc16_time_t *time)
RTC 16 read time function.
uint8_t rtc16_get_int_pin(rtc16_t *ctx)
RTC 16 get int pin function.
err_t rtc16_init(rtc16_t *ctx, rtc16_cfg_t *cfg)
RTC 16 initialization function.
err_t rtc16_set_time(rtc16_t *ctx, rtc16_time_t *time)
RTC 16 set time function.
rtc16_return_value_t
RTC 16 Click return value data.
Definition rtc16.h:248
@ RTC16_ERROR
Definition rtc16.h:250
@ RTC16_OK
Definition rtc16.h:249
RTC 16 Click configuration object.
Definition rtc16.h:205
uint32_t i2c_speed
Definition rtc16.h:211
pin_name_t scl
Definition rtc16.h:206
pin_name_t int_pin
Definition rtc16.h:209
pin_name_t sda
Definition rtc16.h:207
uint8_t i2c_address
Definition rtc16.h:212
RTC 16 Click date object.
Definition rtc16.h:235
uint8_t month
Definition rtc16.h:238
uint8_t day
Definition rtc16.h:237
uint8_t year
Definition rtc16.h:239
uint8_t day_of_week
Definition rtc16.h:236
RTC 16 Click context object.
Definition rtc16.h:188
digital_in_t int_pin
Definition rtc16.h:190
i2c_master_t i2c
Definition rtc16.h:193
uint8_t slave_address
Definition rtc16.h:196
RTC 16 Click time object.
Definition rtc16.h:222
uint8_t second
Definition rtc16.h:223
uint8_t minute
Definition rtc16.h:224
uint8_t hour
Definition rtc16.h:225