rtc_driver.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 - 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016 NXP
4  * All rights reserved.
5  *
6  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
7  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
9  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
10  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
11  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
12  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
14  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
16  * THE POSSIBILITY OF SUCH DAMAGE.
17  */
18 
19 #ifndef RTC_DRIVER_H
20 #define RTC_DRIVER_H
21 
22 #include <stddef.h>
23 #include "status.h"
24 #include "interrupt_manager.h"
25 
33 /*******************************************************************************
34  * Definitions
35  ******************************************************************************/
36 #define SECONDS_IN_A_DAY (86400UL)
37 #define SECONDS_IN_A_HOUR (3600U)
38 #define SECONDS_IN_A_MIN (60U)
39 #define MINS_IN_A_HOUR (60U)
40 #define HOURS_IN_A_DAY (24U)
41 #define DAYS_IN_A_YEAR (365U)
42 #define DAYS_IN_A_LEAP_YEAR (366U)
43 #define YEAR_RANGE_START (1970U)
44 #define YEAR_RANGE_END (2099U)
45 
50 typedef enum
51 {
52  RTC_INT_1HZ = 0x00U,
53  RTC_INT_2HZ = 0x01U,
54  RTC_INT_4HZ = 0x02U,
55  RTC_INT_8HZ = 0x03U,
56  RTC_INT_16HZ = 0x04U,
57  RTC_INT_32HZ = 0x05U,
58  RTC_INT_64HZ = 0x06U,
59  RTC_INT_128HZ = 0x07U
61 
66 typedef enum
67 {
72 
77 typedef enum
78 {
82 
87 typedef enum
88 {
94 
99 typedef struct
100 {
101  uint16_t year;
102  uint16_t month;
103  uint16_t day;
104  uint16_t hour;
105  uint16_t minutes;
106  uint8_t seconds;
108 
113 typedef struct
114 {
116  int8_t compensation;
122 
127 typedef struct
128 {
131  uint32_t numberOfRepeats;
134  void (* alarmCallback)(void * callbackParam);
135  void * callbackParams;
137 
143 typedef struct
144 {
147  void (* rtcCallback)(void * callbackParam);
148  void * callbackParams;
150 
155 typedef struct
156 {
159  void (* rtcSecondsCallback)(void * callbackParam);
162 
167 typedef struct
168 {
174 
175 /*******************************************************************************
176  * Code
177  ******************************************************************************/
178 
179 #if defined(__cplusplus)
180 extern "C" {
181 #endif
182 
195 status_t RTC_DRV_Init(uint32_t instance, const rtc_init_config_t * const rtcUserCfg);
196 
206 status_t RTC_DRV_Deinit(uint32_t instance);
207 
215 void RTC_DRV_GetDefaultConfig(rtc_init_config_t * const config);
216 
225 status_t RTC_DRV_StartCounter(uint32_t instance);
226 
234 status_t RTC_DRV_StopCounter(uint32_t instance);
235 
243 status_t RTC_DRV_GetCurrentTimeDate(uint32_t instance, rtc_timedate_t * const currentTime);
244 
255 status_t RTC_DRV_SetTimeDate(uint32_t instance, const rtc_timedate_t * const time);
256 
268 status_t RTC_DRV_ConfigureRegisterLock(uint32_t instance, const rtc_register_lock_config_t * const lockConfig);
269 
278 void RTC_DRV_GetRegisterLock(uint32_t instance, rtc_register_lock_config_t * const lockConfig);
279 
292 status_t RTC_DRV_ConfigureTimeCompensation(uint32_t instance, uint8_t compInterval, int8_t compensation);
293 
305 void RTC_DRV_GetTimeCompensation(uint32_t instance, uint8_t * compInterval, int8_t * compensation);
306 
317 void RTC_DRV_ConfigureFaultInt(uint32_t instance, rtc_interrupt_config_t * const intConfig);
318 
327 void RTC_DRV_ConfigureSecondsInt(uint32_t instance, rtc_seconds_int_config_t * const intConfig);
328 
339 
348 void RTC_DRV_GetAlarmConfig(uint32_t instance, rtc_alarm_config_t * alarmConfig);
349 
356 bool RTC_DRV_IsAlarmPending(uint32_t instance);
357 
365 void RTC_DRV_ConvertSecondsToTimeDate(const uint32_t * seconds, rtc_timedate_t * const timeDate);
366 
374 void RTC_DRV_ConvertTimeDateToSeconds(const rtc_timedate_t * const timeDate, uint32_t * const seconds);
375 
382 bool RTC_DRV_IsYearLeap(uint16_t year);
383 
390 bool RTC_DRV_IsTimeDateCorrectFormat(const rtc_timedate_t * const timeDate);
391 
401 status_t RTC_DRV_GetNextAlarmTime(uint32_t instance, rtc_timedate_t * const alarmTime);
402 
411 void RTC_DRV_IRQHandler(uint32_t instance);
412 
420 void RTC_DRV_SecondsIRQHandler(uint32_t instance);
421 
422 #if defined(__cplusplus)
423 }
424 #endif
425 
428 #endif /* RTC_DRIVER_H */
429 /*******************************************************************************
430  * EOF
431  ******************************************************************************/
rtc_interrupt_config_t * intConfig
Definition: rtc_driver.c:78
uint16_t day
Definition: rtc_driver.h:103
uint16_t month
Definition: rtc_driver.h:102
bool nonSupervisorAccessEnable
Definition: rtc_driver.h:120
RTC Initialization structure Implements : rtc_init_config_t_Class.
Definition: rtc_driver.h:113
uint16_t year
Definition: rtc_driver.h:101
status_t RTC_DRV_StartCounter(uint32_t instance)
Start RTC instance counter. Before calling this function the user should use RTC_DRV_SetTimeDate to c...
Definition: rtc_driver.c:266
status_t RTC_DRV_StopCounter(uint32_t instance)
Disable RTC instance counter.
Definition: rtc_driver.c:297
RTC interrupt configuration. It is used to configure interrupt other than Time Alarm and Time Seconds...
Definition: rtc_driver.h:143
status_t RTC_DRV_ConfigureRegisterLock(uint32_t instance, const rtc_register_lock_config_t *const lockConfig)
This method configures register lock for the corresponding RTC instance. Remember that all the regist...
Definition: rtc_driver.c:427
uint32_t numberOfRepeats
Definition: rtc_driver.h:131
void RTC_DRV_GetTimeCompensation(uint32_t instance, uint8_t *compInterval, int8_t *compensation)
This retrieves the time compensation coefficients and saves them on the variables referenced by the p...
Definition: rtc_driver.c:535
status_t RTC_DRV_GetCurrentTimeDate(uint32_t instance, rtc_timedate_t *const currentTime)
Get current time and date from RTC instance.
Definition: rtc_driver.c:328
void RTC_DRV_GetAlarmConfig(uint32_t instance, rtc_alarm_config_t *alarmConfig)
Get alarm configuration for RTC instance.
Definition: rtc_driver.c:988
status_t RTC_DRV_Init(uint32_t instance, const rtc_init_config_t *const rtcUserCfg)
This function initializes the RTC instance with the settings provided by the user via the rtcUserCfg ...
Definition: rtc_driver.c:100
void RTC_DRV_ConvertSecondsToTimeDate(const uint32_t *seconds, rtc_timedate_t *const timeDate)
Convert seconds to rtc_timedate_t structure.
Definition: rtc_driver.c:552
RTC alarm configuration Implements : rtc_alarm_config_t_Class.
Definition: rtc_driver.h:127
rtc_alarm_config_t * alarmConfig
Definition: rtc_driver.c:76
rtc_lock_register_select_t
RTC register lock Implements : rtc_lock_register_select_t_Class.
Definition: rtc_driver.h:87
bool RTC_DRV_IsTimeDateCorrectFormat(const rtc_timedate_t *const timeDate)
Check if the date time struct is configured properly.
Definition: rtc_driver.c:696
status_t RTC_DRV_ConfigureTimeCompensation(uint32_t instance, uint8_t compInterval, int8_t compensation)
This method configures time compensation. Data is passed by the compInterval and compensation paramet...
Definition: rtc_driver.c:502
RTC Seconds Interrupt Configuration Implements : rtc_seconds_int_config_t_Class.
Definition: rtc_driver.h:155
rtc_clk_out_config_t clockOutConfig
Definition: rtc_driver.h:118
RTC Register Lock Configuration Implements : rtc_register_lock_config_t_Class.
Definition: rtc_driver.h:167
rtc_second_int_cfg_t
RTC Seconds interrupt configuration Implements : rtc_second_int_cfg_t_Class.
Definition: rtc_driver.h:50
void RTC_DRV_SecondsIRQHandler(uint32_t instance)
This method is the API's Interrupt handler for RTC Second interrupt. This ISR will call the user call...
Definition: rtc_driver.c:851
status_t RTC_DRV_GetNextAlarmTime(uint32_t instance, rtc_timedate_t *const alarmTime)
Gets the next alarm time.
Definition: rtc_driver.c:1020
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:44
uint8_t compensationInterval
Definition: rtc_driver.h:115
uint32_t repetitionInterval
Definition: rtc_driver.h:130
void RTC_DRV_ConfigureFaultInt(uint32_t instance, rtc_interrupt_config_t *const intConfig)
This method configures fault interrupts such as:
Definition: rtc_driver.c:877
void RTC_DRV_ConfigureSecondsInt(uint32_t instance, rtc_seconds_int_config_t *const intConfig)
This method configures the Time Seconds Interrupt with the configuration from the intConfig parameter...
Definition: rtc_driver.c:904
bool RTC_DRV_IsYearLeap(uint16_t year)
Check if the current year is leap.
Definition: rtc_driver.c:738
rtc_second_int_cfg_t secondIntConfig
Definition: rtc_driver.h:157
void RTC_DRV_GetRegisterLock(uint32_t instance, rtc_register_lock_config_t *const lockConfig)
Get which registers are locked for RTC instance.
Definition: rtc_driver.c:474
bool RTC_DRV_IsAlarmPending(uint32_t instance)
Check if alarm is pending.
Definition: rtc_driver.c:1003
void RTC_DRV_IRQHandler(uint32_t instance)
This method is the API's Interrupt handler for generic and alarm IRQ. It will handle the alarm repeti...
Definition: rtc_driver.c:774
rtc_timedate_t alarmTime
Definition: rtc_driver.h:129
uint16_t hour
Definition: rtc_driver.h:104
RTC Time Date structure Implements : rtc_timedate_t_Class.
Definition: rtc_driver.h:99
rtc_clk_select_t clockSelect
Definition: rtc_driver.h:117
void RTC_DRV_GetDefaultConfig(rtc_init_config_t *const config)
This function will set the default configuration values into the structure passed as a parameter...
Definition: rtc_driver.c:195
uint16_t minutes
Definition: rtc_driver.h:105
uint8_t seconds
Definition: rtc_driver.h:106
status_t RTC_DRV_Deinit(uint32_t instance)
This function deinitializes the RTC instance. If the Control register is locked then this method retu...
Definition: rtc_driver.c:159
status_t RTC_DRV_ConfigureAlarm(uint32_t instance, rtc_alarm_config_t *const alarmConfig)
This method configures the alarm with the configuration from the alarmConfig parameter.
Definition: rtc_driver.c:934
rtc_clk_select_t
RTC clock select Implements : rtc_clk_select_t_Class.
Definition: rtc_driver.h:77
status_t RTC_DRV_SetTimeDate(uint32_t instance, const rtc_timedate_t *const time)
Set time and date for RTC instance. The user must stop the counter before using this function...
Definition: rtc_driver.c:383
void RTC_DRV_ConvertTimeDateToSeconds(const rtc_timedate_t *const timeDate, uint32_t *const seconds)
Convert seconds to rtc_timedate_t structure.
Definition: rtc_driver.c:646
rtc_clk_out_config_t
RTC CLKOUT pin configuration Implements : rtc_clk_out_config_t_Class.
Definition: rtc_driver.h:66