rtc3  2.0.0.0
rtc3.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef RTC3_H
36 #define RTC3_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 
42 // -------------------------------------------------------------- PUBLIC MACROS
52 #define RTC3_MAP_MIKROBUS( cfg, mikrobus ) \
53  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
54  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
55  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
56 
62 #define RTC3_I2C_ADDRESS 0x68
63 
69 #define RTC3_REG_TIME_SEC 0x00
70 #define RTC3_REG_TIME_MIN 0x01
71 #define RTC3_REG_TIME_HOUR 0x02
72 #define RTC3_REG_TIME_DAY_OF_THE_WEEK 0x03
73 #define RTC3_REG_TIME_DATE_DAY 0x04
74 #define RTC3_REG_TIME_DATE_MONTH 0x05
75 #define RTC3_REG_TIME_DATE_YEAR 0x06
76 #define RTC3_REG_CONFIG1 0x07
77 #define RTC3_REG_TRICKLE_CHARGE2 0x08
78 #define RTC3_REG_CONFIG2 0x09
79 #define RTC3_REG_SF_KEY1 0x20
80 #define RTC3_REG_SF_KEY2 0x21
81 #define RTC3_REG_SFR 0x22
82 
88 #define RTC3_ENABLE_COUNTING 0x7F
89 #define RTC3_DISABLE_COUNTING 0x80
90 #define RTC3_CONFIG1_INITIAL 0x80
91 #define RTC3_TCH2_OPEN 0x00
92 #define RTC3_TCH2_CLOSED 0x20
93 #define RTC3_TCFE_OPEN 0x00
94 #define RTC3_TCFE_CLOSED 0x20
95 #define RTC3_FTF_NORMAL_512_HZ 0x00
96 #define RTC3_FTF_1_HZ 0x01
97 
103 #define RTC3_RETVAL uint8_t
104 
105 #define RTC3_OK 0x00
106 #define RTC3_INIT_ERROR 0xFF
107  // End group macro
110 // --------------------------------------------------------------- PUBLIC TYPES
119 typedef struct
120 {
121 
123  uint8_t date_day;
124  uint8_t date_month;
125  uint16_t date_year;
126 
127 } date_data_t;
128 
132 typedef struct
133 {
134 
135  uint8_t time_hours;
136  uint8_t time_minutes;
137  uint8_t time_seconds;
138  int8_t time_hun_sec;
139 
140 } time_data_t;
141 
145 typedef struct
146 {
147  // Input pins
148 
149  digital_in_t int_pin;
150 
151  // Modules
152 
153  i2c_master_t i2c;
154 
155  // ctx variable
156 
157  uint8_t slave_address;
158 
159  // time and date data
160 
163 
164 } rtc3_t;
165 
169 typedef struct
170 {
171  // Communication gpio pins
172 
173  pin_name_t scl;
174  pin_name_t sda;
175 
176  // Additional gpio pins
177 
178  pin_name_t int_pin;
179 
180  // static variable
181 
182  uint32_t i2c_speed;
183  uint8_t i2c_address;
184 
185 } rtc3_cfg_t;
186  // End types group
188 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
189 
195 #ifdef __cplusplus
196 extern "C"{
197 #endif
198 
207 void rtc3_cfg_setup ( rtc3_cfg_t *cfg );
208 
217 RTC3_RETVAL rtc3_init ( rtc3_t *ctx, rtc3_cfg_t *cfg );
218 
226 void rtc3_default_cfg ( rtc3_t *ctx );
227 
238 void rtc3_generic_write ( rtc3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
239 
251 void rtc3_generic_read ( rtc3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
252 
260 void rtc3_enable_disable_counting ( rtc3_t *ctx, uint8_t en_dis );
261 
274 uint8_t rtc3_get_time_value ( rtc3_t *ctx, uint8_t time_part );
275 
286 void rtc3_set_time_value ( rtc3_t *ctx, uint8_t time_part, uint8_t time_addr );
287 
298 uint8_t rtc3_get_date_day ( rtc3_t *ctx );
299 
309 void rtc3_set_date_day ( rtc3_t *ctx, uint8_t date_day );
310 
321 uint8_t rtc3_get_date_month ( rtc3_t *ctx );
322 
332 void rtc3_set_date_month ( rtc3_t *ctx, uint8_t date_month );
333 
344 uint8_t rtc3_get_date_year ( rtc3_t *ctx );
345 
355 void rtc3_set_date_year ( rtc3_t *ctx, uint16_t date_year );
356 
367 uint8_t rtc3_get_day_of_the_week ( rtc3_t *ctx );
368 
387 void rtc3_set_day_of_the_week ( rtc3_t *ctx, uint8_t w_day );
388 
397 void rtc3_set_time ( rtc3_t *ctx );
398 
407 void rtc3_get_time ( rtc3_t *ctx );
408 
417 void rtc3_set_date ( rtc3_t *ctx );
418 
427 void rtc3_get_date ( rtc3_t *ctx );
428 
446 void rtc3_set_calibration ( rtc3_t *ctx, uint8_t cal_sign, uint8_t cal_mumber );
447 
463 void rtc3_set_trickle_charge ( rtc3_t *ctx, uint8_t tch2 );
464 
479 void rtc3_set_trickle_charge_bypass ( rtc3_t *ctx, uint8_t tcfe );
480 
494 void rtc3_set_special_function_key1 ( rtc3_t *ctx, uint8_t sfkey1 );
495 
509 void rtc3_set_special_function_key2 ( rtc3_t *ctx, uint8_t sfkey2 );
510 
530 void rtc3_set_frequency_calibration( rtc3_t *ctx, uint8_t ftf );
531 
544 uint8_t rtc3_get_interrupt( rtc3_t *ctx );
545 
546 #ifdef __cplusplus
547 }
548 #endif
549 #endif // _RTC3_H_
550  // End public_function group
553 
554 // ------------------------------------------------------------------------- END
rtc3_get_interrupt
uint8_t rtc3_get_interrupt(rtc3_t *ctx)
Get state of interrupt pin function.
rtc3_set_date_month
void rtc3_set_date_month(rtc3_t *ctx, uint8_t date_month)
Set month function.
rtc3_get_date
void rtc3_get_date(rtc3_t *ctx)
Get time hours, minutes and seconds function.
rtc3_get_time_value
uint8_t rtc3_get_time_value(rtc3_t *ctx, uint8_t time_part)
Get time value function.
time_data_t
Time data structure.
Definition: rtc3.h:132
rtc3_cfg_t::int_pin
pin_name_t int_pin
Definition: rtc3.h:178
time_data_t::time_seconds
uint8_t time_seconds
Definition: rtc3.h:137
rtc3_set_calibration
void rtc3_set_calibration(rtc3_t *ctx, uint8_t cal_sign, uint8_t cal_mumber)
Set calibration function.
time_data_t::time_minutes
uint8_t time_minutes
Definition: rtc3.h:136
rtc3_get_time
void rtc3_get_time(rtc3_t *ctx)
Get time hours, minutes, seconds and hundredth of a seconds function.
rtc3_t::slave_address
uint8_t slave_address
Definition: rtc3.h:157
rtc3_cfg_t::scl
pin_name_t scl
Definition: rtc3.h:173
rtc3_cfg_setup
void rtc3_cfg_setup(rtc3_cfg_t *cfg)
Config Object Initialization function.
RTC3_RETVAL
#define RTC3_RETVAL
Definition: rtc3.h:103
date_data_t
Date data structure.
Definition: rtc3.h:119
rtc3_get_date_year
uint8_t rtc3_get_date_year(rtc3_t *ctx)
Get year function.
time_data_t::time_hun_sec
int8_t time_hun_sec
Definition: rtc3.h:138
rtc3_t::int_pin
digital_in_t int_pin
Definition: rtc3.h:149
date_data_t::day_of_the_week
uint8_t day_of_the_week
Definition: rtc3.h:122
rtc3_set_special_function_key2
void rtc3_set_special_function_key2(rtc3_t *ctx, uint8_t sfkey2)
Set special function key byte 2 function.
rtc3_get_day_of_the_week
uint8_t rtc3_get_day_of_the_week(rtc3_t *ctx)
Get day of the week function.
rtc3_init
RTC3_RETVAL rtc3_init(rtc3_t *ctx, rtc3_cfg_t *cfg)
Initialization function.
rtc3_t::i2c
i2c_master_t i2c
Definition: rtc3.h:153
rtc3_set_time_value
void rtc3_set_time_value(rtc3_t *ctx, uint8_t time_part, uint8_t time_addr)
Set time values function.
rtc3_cfg_t
Click configuration structure definition.
Definition: rtc3.h:169
rtc3_generic_read
void rtc3_generic_read(rtc3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
rtc3_set_trickle_charge_bypass
void rtc3_set_trickle_charge_bypass(rtc3_t *ctx, uint8_t tcfe)
Set trickle charge bypass control function.
rtc3_set_time
void rtc3_set_time(rtc3_t *ctx)
Set time hours, minutes, seconds and hundredth of a seconds function.
rtc3_set_trickle_charge
void rtc3_set_trickle_charge(rtc3_t *ctx, uint8_t tch2)
Set trickle charge control function.
time_data_t::time_hours
uint8_t time_hours
Definition: rtc3.h:135
rtc3_generic_write
void rtc3_generic_write(rtc3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
rtc3_set_frequency_calibration
void rtc3_set_frequency_calibration(rtc3_t *ctx, uint8_t ftf)
Set frequency calibration control function.
rtc3_set_special_function_key1
void rtc3_set_special_function_key1(rtc3_t *ctx, uint8_t sfkey1)
Set special function key byte 1 function.
rtc3_get_date_month
uint8_t rtc3_get_date_month(rtc3_t *ctx)
Get month function.
rtc3_enable_disable_counting
void rtc3_enable_disable_counting(rtc3_t *ctx, uint8_t en_dis)
Enable/Disable counting function.
rtc3_set_date
void rtc3_set_date(rtc3_t *ctx)
Set date hours, minutes and seconds function.
rtc3_set_date_year
void rtc3_set_date_year(rtc3_t *ctx, uint16_t date_year)
Set year function.
rtc3_cfg_t::i2c_address
uint8_t i2c_address
Definition: rtc3.h:183
rtc3_t::time
time_data_t time
Definition: rtc3.h:162
rtc3_set_day_of_the_week
void rtc3_set_day_of_the_week(rtc3_t *ctx, uint8_t w_day)
Set day of the week function.
date_data_t::date_year
uint16_t date_year
Definition: rtc3.h:125
date_data_t::date_day
uint8_t date_day
Definition: rtc3.h:123
date_data_t::date_month
uint8_t date_month
Definition: rtc3.h:124
rtc3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: rtc3.h:182
rtc3_set_date_day
void rtc3_set_date_day(rtc3_t *ctx, uint8_t date_day)
Set day function.
rtc3_default_cfg
void rtc3_default_cfg(rtc3_t *ctx)
Click Default Configuration function.
rtc3_cfg_t::sda
pin_name_t sda
Definition: rtc3.h:174
rtc3_t::date
date_data_t date
Definition: rtc3.h:161
rtc3_get_date_day
uint8_t rtc3_get_date_day(rtc3_t *ctx)
Get day function.
rtc3_t
Click ctx object definition.
Definition: rtc3.h:145