summaryrefslogtreecommitdiff
path: root/FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h')
-rw-r--r--FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h710
1 files changed, 0 insertions, 710 deletions
diff --git a/FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h b/FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h
deleted file mode 100644
index af7c106f6..000000000
--- a/FreeRTOS/Demo/CORTEX_SmartFusion2_M2S050_SoftConsole/RTOSDemo_Hardware_Platform/drivers/mss_rtc/mss_rtc.h
+++ /dev/null
@@ -1,710 +0,0 @@
-/*******************************************************************************
- * (c) Copyright 2008-2013 Microsemi SoC Products Group. All rights reserved.
- *
- * SmartFusion2 MSS RTC bare metal software driver public API.
- *
- * SVN $Revision: 5396 $
- * SVN $Date: 2013-03-27 21:57:50 +0000 (Wed, 27 Mar 2013) $
- */
-
-/*=========================================================================*//**
- @mainpage SmartFusion2 MSS RTC Bare Metal Driver.
-
- @section intro_sec Introduction
- The SmartFusion2 microcontroller subsystem (MSS) includes a real time counter
- (RTC) that can generate alarms and wakeup interrupts in real time. This
- software driver provides a set of functions for controlling the MSS RTC as
- part of a bare metal system where no operating system is available. The driver
- can be adapted for use as part of an operating system, but the implementation
- of the adaptation layer between the driver and the operating system's driver
- model is outside the scope of the driver.
-
- The MSS RTC driver provides support for the following features:
- - Initialization of the RTC
- - Configuration of the RTC timebase
- - Configuration as a calendar or binary mode counter
- - Set the current calendar or binary mode count
- - Get the current calendar or binary mode count
- - Start and stop the RTC counting
- - Set alarm conditions
- - Enable, disable and clear the wakeup interrupt
-
- @section hw_dependencies Hardware Flow Dependencies
- The configuration of all features of the MSS RTC is covered by this driver
- with the exception of the clock source driving the MSS RTC clock (RTCCLK)
- input. The SmartFusion2 MSS clock controller can supply one of three clock
- sources to the MSS RTC clock input:
- - Crystal Oscillator 32.768 kHz
- - 1MHz Oscillator
- - 50MHz Oscillator. (25 MHz in a 1.0v part).
- The SmartFusion2 MSS configurator tool in the hardware flow configures one
- of these clocks as the RTCCLK input source.
- The base address and register addresses and interrupt number assignment for
- the MSS RTC block are defined as constants in the SmartFusion2 CMSIS HAL. You
- must ensure that the SmartFusion2 CMSIS HAL is either included in the software
- tool chain used to build your project or is included in your project.
-
- @section theory_op Theory of Operation
- The MSS RTC driver functions are grouped into the following categories:
- - Initialization of the RTC driver and hardware
- - Setting and reading the RTC counter current value
- - Setting RTC alarm values
- - Starting and stopping the RTC
- - Interrupt Control
-
- Initialization
- The MSS RTC driver is initialized through a call to the MSS_RTC_init()
- function. The MSS_RTC_init() function must be called before any other MSS RTC
- driver functions are called.
- The MSS_RTC_init() function:
- - Stops the RTC counters and disables the RTC alarm
- - Disables the RTC wakeup interrupt in the RTC and in the Cortex-M3
- interrupt controller (NVIC).
- - Clears any pending RTC wakeup interrupt in the RTC and in the Cortex-M3
- interrupt controller (NVIC).
- - Enables the RTC_WAKEUP_CR[0] mask bit in the MSS System Register to
- connect the RTC wakeup interrupt to the Cortex-M3 interrupt controller.
- - Resets the RTC counters and the alarm and compare registers
- - Sets the RTC's operating mode to binary counter mode or calendar counter
- mode, as specified by the mode parameter
- - Sets the RTC's prescaler register to the value specified by the prescaler
- parameter. The frequency of the clock source driving the MSS RTC clock
- (RTCCLK) input is required to calculate the prescaler value.
-
- Setting and Reading the RTC Counter Value
- The MSS RTC supports two mode of operation – binary mode and calendar mode.
- The following functions are used to set and read the current value of the
- counter when the MSS RTC is configured to operate in binary mode:
- - MSS_RTC_set_binary_count() – This function is used to set the current
- value of the RTC binary counter.
- - MSS_RTC_get_binary_count() – This function is used to read the current
- value of the RTC binary counter.
- The following functions are used to set and read the current value of the
- counter the MSS RTC is configured to operate in calendar mode:
- - MSS_RTC_set_calendar_count() – This function is used to set the current
- value of the RTC calendar counter.
- - MSS_RTC_get_calendar_count() – This function is used to read the current
- value of the RTC calendar counter.
-
- The following functions resets the RTC counter in either binary and calendar
- operating mode:
- - MSS_RTC_reset_counter() – This function resets the RTC counter.
-
- Setting RTC Alarms
- The MSS RTC can generate alarms when the counter matches a specified count
- value in binary mode or a date and time in calendar mode.
- The following functions are used to set up alarms:
- - MSS_RTC_set_binary_count_alarm() – This function sets up one-shot or
- periodic alarms when the MSS RTC is configured to operate in binary mode.
- - MSS_RTC_set_calendar_count_alarm() – This function sets up one-shot or
- periodic alarms when the MSS RTC is configured to operate in calendar
- mode.
- Note: The alarm asserts a wakeup interrupt to the Cortex-M3. This function
- enables the RTC’s wakeup interrupt output, however the RTC wakeup
- interrupt input to the Cortex-M3 NVIC must be enabled separately by
- calling the MSS_RTC_enable_irq() function. The alarm can be disabled at
- any time by calling the MSS_RTC_disable_irq() function. activate
-
- Starting and Stopping the RTC Counter
- The following functions start and stop the RTC counter:
- - MSS_RTC_start() – This function starts the RTC counter.
- - MSS_RTC_stop() – This function stops the RTC counter.
-
- Interrupt Control
- The MSS_RTC_init() function enables the RTC_WAKEUP_CR[0] mask bit in the MSS
- System Register to connect the RTC wakeup interrupt to the Cortex-M3 interrupt
- controller.
- An RTC_Wakeup_IRQHandler() default implementation is defined, with weak
- linkage, in the SmartFusion2 CMSIS HAL. You must provide your own
- implementation of the RTC_Wakeup_IRQHandler() function, which will override
- the default implementation, to suit your application.
- The function prototype for the RTC wakeup interrupt handler is as follows:
- void RTC_Wakeup_IRQHandler ( void )
- The RTC wakeup interrupt is controlled using the following functions:
- - MSS_RTC_enable_irq() – The MSS_RTC_enable_irq() function enables the RTC
- to interrupt the Cortex-M3 when a wakeup alarm occurs.
- - MSS_RTC_disable_irq() – The MSS_RTC_disable_irq() function disables the
- RTC from interrupting the Cortex-M3 when a wakeup alarm occurs.
- - MSS_RTC_clear_irq() – The MSS_RTC_clear_irq() function clears a pending
- RTC wakeup interrupt at the RTC wakeup output. You must call the
- MSS_RTC_clear_irq() function as part of your implementation of the
- RTC_Wakeup_IRQHandler() interrupt service routine (ISR) in order to
- prevent the same interrupt event retriggering a call to the ISR.
-
- *//*=========================================================================*/
-#ifndef MSS_RTC_H_
-#define MSS_RTC_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "../../CMSIS/m2sxxx.h"
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_BINARY_MODE constant is used to specify the mode parameter to the
- MSS_RTC_init() function. The RTC will run in binary mode if this constant is
- used. In binary mode, the calendar counter counts consecutively from 0 all the
- way to 2^43.
- */
-#define MSS_RTC_BINARY_MODE 0u
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_CALENDAR_MODE constant is used to specify the mode parameter to
- the MSS_RTC_init() function. The RTC will run in calendar mode if this
- constant is used. In calendar mode, the calendar counter counts seconds,
- minutes, hours, days, months, years, weekdays and weeks.
- */
-#define MSS_RTC_CALENDAR_MODE 1u
-
-/*-------------------------------------------------------------------------*//**
- The alarm_value parameter of the MSS_RTC_set_calendar_count_alarm() function
- is a pointer to an mss_rtc_calendar_t data structure specifying the date and
- time at which the alarm is to occur. You must assign the required date and
- time values to the mss_rtc_calendar_t structure before calling the function.
- Any of the fields of the mss_rtc_calendar_t structure can be set to
- MSS_RTC_CALENDAR_DONT_CARE, to indicate that they are not to be considered in
- deciding when the alarm will occur; this is necessary when setting periodic
- alarms.
- */
-#define MSS_RTC_CALENDAR_DONT_CARE 0xFFu
-
-/*-------------------------------------------------------------------------*//**
- Days of the week.
- */
-#define MSS_RTC_SUNDAY 1u
-#define MSS_RTC_MONDAY 2u
-#define MSS_RTC_TUESDAY 3u
-#define MSS_RTC_WEDNESDAY 4u
-#define MSS_RTC_THRUSDAY 5u
-#define MSS_RTC_FRIDAY 6u
-#define MSS_RTC_SATURDAY 7u
-
-/*-------------------------------------------------------------------------*//**
- The mss_rtc_alarm_type_t enumeration is used as the alarm_type parameter for
- the MSS_RTC_set_calendar_count_alarm() and MSS_RTC_set_binary_count_alarm()
- functions to specify whether the requested alarm should occur only one time or
- periodically.
- */
-typedef enum {
- MSS_RTC_SINGLE_SHOT_ALARM,
- MSS_RTC_PERIODIC_ALARM
-} mss_rtc_alarm_type_t;
-
-/*-------------------------------------------------------------------------*//**
- A pointer to an instance of the mss_rtc_calender_t data structure is used to
- write new date and time values to the RTC using the
- MSS_RTC_set_rtc_calendar_count() and MSS_RTC_set_calendar_count_alarm()
- functions. The MSS_RTC_get_calendar_count() function also uses a pointer to an
- instance of the mss_rtc_calender_t data structure to read the current date and
- time value from the RTC.
- */
-typedef struct mss_rtc_calendar
-{
- uint8_t second;
- uint8_t minute;
- uint8_t hour;
- uint8_t day;
- uint8_t month;
- uint8_t year;
- uint8_t weekday;
- uint8_t week;
-} mss_rtc_calendar_t ;
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_init() function initializes the RTC driver and hardware to a known
- state.
- To initialize the RTC hardware, this function:
- - Stops the RTC counters and disables the RTC alarm
- - Disables the RTC wakeup interrupt in the RTC and in the Cortex-M3
- interrupt controller (NVIC).
- - Clears any pending RTC wakeup interrupt in the RTC and in the Cortex-M3
- interrupt controller (NVIC).
- - Resets the RTC counters and the alarm and compare registers
- - Sets the RTC's operating mode to binary counter mode or calendar counter
- mode, as specified by the mode parameter
- - Sets the RTC's prescaler register to the value specified by the prescaler
- parameter
- The MSS clock controller can supply one of three clock sources to the RTC
- clock input (RTCCLK):
- - Crystal Oscillator 32.768 kHz
- - 1MHz Oscillator
- - 50MHz Oscillator. (25 MHz in a 1.0v part).
- For calendar mode, program the prescaler register to generate a 1Hz signal
- from the active RTCCLK according to the following equation:
- prescaler = RTCCLK – 1 (where RTCCLK unit is Hz)
- For a 32.768 kHz clock, set the prescaler to 32768 - 1 = 32767. The prescaler
- register is 26 bits wide, allowing clock sources of up to 67 MHz to generate
- the 1Hz time base.
- For binary mode, the prescaler register can be programmed to generate a 1Hz
- time base or a different time base, as required.
-
- @param mode
- The mode parameter is used to specify the operating mode of the RTC. The
- allowed values for mode are:
- - MSS_RTC_BINARY_MODE
- - MSS_RTC_CALENDAR_MODE
-
- @param prescaler
- The prescaler parameter specifies the value to divide the incoming RTC clock
- by, to generate the RTC time base signal. For calendar mode, set the
- prescaler value to generate a 1Hz time base from the incoming RTC clock
- according to the following equation:
- prescaler = RTCCLK – 1 (where the RTCCLK unit is Hz)
- For binary mode, set the prescaler value to generate a 1Hz time base or a
- different time base, as required.
- The prescaler parameter can be any integer value in the range 2 to 2^26.
-
- @return
- This function does not return a value.
-
- The example code below shows how the RTC can be initialized only after a power-on
- reset.
- @code
- #define PO_RESET_DETECT_MASK 0x00000001u
-
- void init_application(void)
- {
- uint32_t power_on_reset;
- power_on_reset = SYSREG->RESET_SOURCE_CR & PO_RESET_DETECT_MASK;
- if(power_on_reset)
- {
- MSS_RTC_init(MSS_RTC_CALENDAR_MODE, 32767);
- SYSREG->RESET_SOURCE_CR = PO_RESET_DETECT_MASK;
- }
- }
- @endcode
- */
-void
-MSS_RTC_init
-(
- uint8_t mode,
- uint32_t prescaler
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_set_rtc_calendar_count() function sets the current value of the
- RTC calendar counter.
- Note: This function must only be used when the RTC is configured to operate in
- calendar counter mode.
-
- @param new_rtc_value
- The new_rtc_value parameter is a pointer to an mss_rtc_calendar_t data
- structure specifying the new date and time value from which the RTC will
- increment. You must populate the mss_rtc_calendar_t structure with the
- required date and time values before calling this function.
-
- @return
- This function does not return a value.
- */
-
-void
-MSS_RTC_set_calendar_count
-(
- const mss_rtc_calendar_t *new_rtc_value
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_set_binary_count() function sets the current value of the RTC
- binary counter.
- Note: This function must only be used when the RTC is configured to operate in
- binary counter mode.
-
- @param new_rtc_value
- The new_rtc_value parameter specifies the new count value from which the RTC
- will increment. The binary counter is 43 bits wide, so the maximum allowed
- binary value is 2^43.
-
- @return
- This function does not return a value.
- */
-
-void
-MSS_RTC_set_binary_count
-(
- uint64_t new_rtc_value
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_get_calendar_count() function returns the current value of the RTC
- calendar counter via the data structure pointed to by the p_rtc_calendar
- parameter.
- Note: This function must only be used when the RTC is configured to operate in
- calendar counter mode.
-
- @param p_rtc_calendar
- The p_rtc_calendar parameter is a pointer to an mss_rtc_calendar_t data
- structure where the current value of the calendar counter will be written by
- the MSS_RTC_get_calendar_count() function
-
- @return
- This function does not return a value.
- */
-void
-MSS_RTC_get_calendar_count
-(
- mss_rtc_calendar_t *p_rtc_calendar
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_get_binary_count() function returns the current value of the RTC
- binary counter.
- Note: This function must only be used when the RTC is configured to operate in
- binary counter mode.
-
- @param
- This function takes no parameters.
-
- @return
- This function returns the current value of the RTC binary counter as an
- unsigned 64-bit integer.
- */
-uint64_t
-MSS_RTC_get_binary_count(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_start() function starts the RTC incrementing.
-
- @param
- This function takes no parameters.
-
- @return
- This function does not return a value.
- */
-void MSS_RTC_start(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_stop() function stops the RTC from incrementing.
-
- @param
- This function takes no parameters.
-
- @return
- This function does not return a value.
- */
-void MSS_RTC_stop(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_reset_counter() function resets the RTC counters. If the counter
- was running before calling this function, then it continues incrementing from
- the counter’s reset value.
-
- @param
- This function takes no parameters.
-
- @return
- This function does not return a value.
- */
-void MSS_RTC_reset_counter(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_enable_irq() function enables the RTC wakeup output to interrupt
- the Cortex-M3 when an alarm occurs. It enables the RTC wakeup interrupt
- (RTC_Wakeup_IRQn) in the Cortex-M3 interrupt controller (NVIC). The
- RTC_Wakeup_IRQHandler() function will be called when an RTC wakeup interrupt
- occurs.
- Note: An RTC_Wakeup_IRQHandler() default implementation is defined, with weak
- linkage, in the SmartFusion2 CMSIS HAL. You must provide your own
- implementation of the RTC_Wakeup_IRQHandler() function, which will
- override the default implementation, to suit your application.
- Note: This function only enables the RTC wakeup interrupt at the Cortex-M3
- NVIC level. The alarm setting functions enable the wakeup interrupt
- output from the RTC.
- */
-void MSS_RTC_enable_irq(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_disable_irq() function disables the RTC wakeup interrupt
- (RTC_Wakeup_IRQn) in the Cortex-M3 interrupt controller (NVIC).
- Note: This function only disables the RTC wakeup interrupt at the Cortex-M3
- NVIC level. It does not disable the wakeup interrupt output from the
- RTC.
-
- @param
- This function takes no parameters.
-
- @return
- This function does not return a value.
- */
-void MSS_RTC_disable_irq(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_clear_irq() function clears a pending wakeup interrupt from the
- RTC. This function does not clear the interrupt in the Cortex-M3 interrupt
- controller (NVIC); it only clears the wakeup output from the RTC.
- Note: You must call the MSS_RTC_clear_irq() function as part of your
- implementation of the RTC_Wakeup_IRQHandler() RTC wakeup interrupt
- service routine (ISR) in order to prevent the same interrupt event
- retriggering a call to the ISR.
-
- @param
- This function takes no parameters.
-
- @return
- This function does not return a value.
-
- Example:
- The example code below demoinstrates how the MSS_RTC_clear_irq() function is
- intended to be used as part of the RTC wakeup interrupt servicer routine used
- by an application to handle RTC alarms.
- @code
- #if defined(__GNUC__)
- __attribute__((__interrupt__)) void RTC_Wakeup_IRQHandler( void )
- #else
- void RTC_Wakeup_IRQHandler( void )
- #endif
- {
- process_alarm();
- MSS_RTC_clear_irq();
- }
- @endcode
-*/
-void MSS_RTC_clear_irq(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_set_calendar_count_alarm() function sets up the RTC to generate an
- alarm when the RTC count reaches the time/date specified by the alarm_value
- parameter. The alarm asserts a wakeup interrupt to the Cortex-M3. This
- function enables the RTC’s wakeup interrupt output, however the RTC wakeup
- interrupt input to the Cortex-M3 NVIC must be enabled separately by calling
- the MSS_RTC_enable_irq() function. The alarm can be disabled at any time by
- calling the MSS_RTC_disable_irq() function.
-
- Single-shot alarm
- The alarm can be a single-shot alarm, which will generate a single wakeup
- interrupt the first time the RTC count reaches the time/date specified by
- alarm_value. A single shot alarm is achieved by specifying a value for every
- field of the mss_rtc_calendar_t data structure pointed to by the alarm_value
- parameter. The RTC counter will keep incrementing after a single shot alarm
- occurs.
-
- Periodic alarm
- The alarm can also be a periodic alarm, which will generate a wakeup interrupt
- every time the RTC count reaches the time/date specified by alarm_value, with
- the counter running in a continuous loop. The periodic alarm can be set to
- occur every minute, hour, day, month, year, week, day of the week, or any
- valid combination of these. This is achieved by setting some of the fields of
- the mss_rtc_calendar_t data structure pointed to by the alarm_value parameter,
- to MSS_RTC_CALENDAR_DONT_CARE. For example, setting the weekday field to
- MSS_RTC_MONDAY and all other fields to MSS_RTC_CALENDAR_DONT_CARE will result
- in an alarm occurring every Monday. You can refine the time at which the alarm
- will occur by specifying values for the hour, minute and second fields.
- Note: This function must only be used when the RTC is configured to operate in
- calendar counter mode.
-
- @param alarm_value
- The alarm_value parameter is a pointer to an mss_rtc_calendar_t data
- structure specifying the date and time at which the alarm is to occur. You
- must assign the required date and time values to the mss_rtc_calendar_t
- structure before calling this function. Some of the fields within the
- mss_rtc_calendar_t structure can be set to MSS_RTC_CALENDAR_DONT_CARE, to
- indicate that they are not to be considered in deciding when the alarm will
- occur; this is necessary when setting periodic alarms.
-
- @return
- This function does not return a value.
-
- Examples:
-
- The following example code demonstrates how to configure the RTC to generate a
- single calendar alarm at a specific date and time. The alarm will only occur
- once and the RTC will keep incrementing regardless of the alarm taking place.
-
- @code
- const mss_rtc_calendar_t initial_calendar_count =
- {
- 15u, second
- 30u, minute
- 6u, hour
- 6u, day
- 9u, month
- 12u, year
- 5u, weekday
- 37u week
- };
-
- mss_rtc_calendar_t alarm_calendar_count =
- {
- 17u, second
- 30u, minute
- 6u, hour
- 6u, day
- 9u, month
- 12u, year
- 5u, weekday
- 37u week
- };
-
- MSS_RTC_init(MSS_RTC_CALENDAR_MODE, RTC_PRESCALER);
- MSS_RTC_clear_irq();
- MSS_RTC_set_calendar_count(&initial_calendar_count);
- MSS_RTC_enable_irq();
- MSS_RTC_start();
-
- MSS_RTC_set_calendar_count_alarm(&alarm_calendar_count);
- @endcode
-
- The following example code demonstrates how to configure the RTC to generate a
- periodic calendar alarm. The RTC is configured to generate an alarm every
- Tuesday at 16:45:00. The alarm will reoccur every week until the RTC wakeup
- interrupt is disabled using a call to MSS_RTC_disable_irq().
-
- @code
- mss_rtc_calendar_t initial_calendar_count =
- {
- 58u, <--second
- 59u, <--minute
- 23u, <--hour
- 10u, <--day
- 9u, <--month
- 12u, <--year
- MSS_RTC_MONDAY, <--weekday
- 37u <--week
- };
-
- mss_rtc_calendar_t alarm_calendar_count =
- {
- MSS_RTC_CALENDAR_DONT_CARE, <--second
- 45u, <--minute
- 16u, <--hour
- MSS_RTC_CALENDAR_DONT_CARE, <--day
- MSS_RTC_CALENDAR_DONT_CARE, <--month
- MSS_RTC_CALENDAR_DONT_CARE, <--year
- MSS_RTC_TUESDAY, <--weekday
- MSS_RTC_CALENDAR_DONT_CARE <--week
- };
-
- MSS_RTC_init(MSS_RTC_CALENDAR_MODE, RTC_PRESCALER);
- MSS_RTC_set_calendar_count(&initial_calendar_count);
- MSS_RTC_enable_irq();
- MSS_RTC_start();
-
- MSS_RTC_set_calendar_count_alarm(&alarm_calendar_count);
- @endcode
-
- The following example code demonstrates the code that you need to include in
- your application to handle alarms. It is the interrupt service routine for the
- RTC wakeup interrupt input to the Cortex-M3 NVIC. You need to add your
- application code in this function in place of the process_alarm() function but
- you must retain the call to MSS_RTC_clear_irq() to ensure that the same alarm
- does not retrigger the interrupt.
-
- @code
- #if defined(__GNUC__)
- __attribute__((__interrupt__)) void RTC_Wakeup_IRQHandler( void )
- #else
- void RTC_Wakeup_IRQHandler( void )
- #endif
- {
- process_alarm();
- MSS_RTC_clear_irq();
- }
- @endcode
- */
-void MSS_RTC_set_calendar_count_alarm
-(
- const mss_rtc_calendar_t * alarm_value
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_set_binary_count_alarm() function sets up the RTC to generate an
- alarm when the RTC count reaches the value specified by the alarm_value
- parameter. The alarm asserts a wakeup interrupt to the Cortex-M3. This
- function enables the RTC’s wakeup interrupt output, however the RTC wakeup
- interrupt input to the Cortex-M3 NVIC must be enabled separately by calling
- the MSS_RTC_enable_irq() function. The alarm can be disabled at any time by
- calling the MSS_RTC_disable_irq() function.
-
- Single-shot alarm
- The alarm can be a single-shot alarm, which will generate a single wakeup
- interrupt the first time the RTC count reaches the value specified by the
- alarm_value parameter. Setting the alarm_value parameter to
- MSS_RTC_PERIODIC_ALARM produces a single-shot alarm. The RTC counter continues
- incrementing when a single shot alarm occurs.
-
- Periodic alarm
- The alarm can also be a periodic alarm, which will generate a wakeup interrupt
- every time the RTC count reaches the value specified by the alarm_value
- parameter. Setting the alarm_value parameter to MSS_RTC_SINGLE_SHOT_ALARM
- produces a periodic alarm. The RTC counter automatically wraps around to zero
- and continues incrementing when a periodic alarm occurs.
- Note: This function must only be used when the RTC is configured to operate in
- binary counter mode
-
- @param alarm_value
- The alarm_value parameter is a 64-bit unsigned value specifying the RTC
- counter value that must be reached for the requested alarm to occur.
-
- @param alarm_type
- The alarm_type parameter specifies whether the requested alarm is a single
- shot or periodic alarm. It can only take one of these two values:
- - MSS_RTC_SINGLE_SHOT_ALARM,
- - MSS_RTC_PERIODIC_ALARM
-
- @return
- This function does not return a value.
- */
-void MSS_RTC_set_binary_count_alarm
-(
- uint64_t alarm_value,
- mss_rtc_alarm_type_t alarm_type
-);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_get_update_flag() function indicates if the RTC counter has
- incremented since the last call to MSS_RTC_clear_update_flag(). It returns
- zero if no RTC counter increment has occurred. It returns a non-zero value if
- the RTC counter has incremented. This function can be used whether the RTC is
- configured to operate in calendar or binary counter mode.
-
- @return
- This function returns,
- zero: if the RTC has not incremented since the last call to
- MSS_RTC_clear_update_flag(),
- non-zero: if the RTC has incremented since the last call to
- MSS_RTC_clear_update_flag().
-
-
- Example
- This example waits for the RTC timer to increment by one second.
- @code
- void wait_start_of_second(void)
- {
- uint32_t rtc_count_updated;
- MSS_RTC_clear_update_flag();
- do {
- rtc_count_updated = MSS_RTC_get_update_flag();
- } while(!rtc_count_updated)
- }
- @endcode
- */
-uint32_t MSS_RTC_get_update_flag(void);
-
-/*-------------------------------------------------------------------------*//**
- The MSS_RTC_clear_update_flag() function clears the CONTROL register flag that
- is set when the RTC counter increments. It is used alongside function
- MSS_RTC_get_update_flag() to detect RTC counter increments.
-
- @return
- This function does not return a value.
-
- Example
- The example below will wait for the RTC timer to increment by one second.
- @code
- void wait_start_of_second(void)
- {
- uint32_t rtc_count_updated;
- MSS_RTC_clear_update_flag();
- do {
- rtc_count_updated = MSS_RTC_get_update_flag();
- } while(!rtc_count_updated)
- }
- @endcode
- */
-void MSS_RTC_clear_update_flag(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MSS_RTC_H_ */