Xmega Application Note


rtc_driver.h File Reference


Detailed Description

XMEGA RTC driver header file.

This file contains the function prototypes and enumerator definitions for various configuration parameters for the XMEGA RTC driver.

The driver is not intended for size and/or speed critical code, since most functions are just a few lines of code, and the function call overhead would decrease code performance. The driver is intended for rapid prototyping and documentation purposes for getting started with the XMEGA RTC module.

For size and/or speed critical code, it is recommended to copy the function contents directly into your application instead of making a function call.

Application note:
AVR1314: Using the XMEGA Real Time Counter
Documentation
For comprehensive code documentation, supported compilers, compiler settings and supported devices see readme.html
Author:
Atmel Corporation: http://www.atmel.com
Support email: avr@atmel.com
Revision
1569
Date
2008-04-22 13:03:43 +0200 (ti, 22 apr 2008)

Copyright (c) 2008, Atmel Corporation All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. The name of ATMEL may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition in file rtc_driver.h.

#include "avr_compiler.h"

Include dependency graph for rtc_driver.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define RTC_Busy()   ( RTC.STATUS & RTC_SYNCBUSY_bm )
 This macro checks the RTC busy flag.
#define RTC_GetCompareFlag()   ( RTC.INTFLAGS & RTC_COMPIF_bm )
 This macro returns the status of the RTC compare flag.
#define RTC_GetCompareValue()   ( RTC.COMP )
 This macro returns the current RTC compare value.
#define RTC_GetCount()   ( RTC.CNT )
 This macro returns the current RTC count value.
#define RTC_GetOverflowFlag()   ( RTC.INTFLAGS & RTC_OVFIF_bm )
 This macro returns the status of the RTC overflow flag.
#define RTC_GetPeriod()   ( RTC.PER )
 This macro returns the current RTC period value.
#define RTC_SetCompareValue(_cmpVal)   ( RTC.COMP = (_cmpVal) )
 This macro sets a new RTC compare value.
#define RTC_SetCount(_rtccnt)   ( RTC.CNT = (_rtccnt) )
 This macro sets a new RTC count value.
#define RTC_SetPeriod(_rtcper)   ( RTC.PER = (_rtcper) )
 This macro sets a new RTC period.

Functions

void RTC_Initialize (uint16_t period, uint16_t count, uint16_t compareValue, RTC_PRESCALER_t prescaler)
 This function initializes the RTC with period, initial count, compare value and clock prescaler.
void RTC_SetAlarm (uint16_t alarmTimeout)
 This function sets a timeout alarm.
void RTC_SetCompareIntLevel (RTC_COMPINTLVL_t intLevel)
 This function sets the RTC compare interrupt level.
void RTC_SetIntLevels (RTC_OVFINTLVL_t ovfIntLevel, RTC_COMPINTLVL_t compIntLevel)
 This function sets both compare and overflow interrupt levels in one go.
void RTC_SetOverflowIntLevel (RTC_OVFINTLVL_t intLevel)
 This function sets the RTC overflow interrupt level.
void RTC_SetPrescaler (RTC_PRESCALER_t prescaler)
 This function sets a new RTC clock prescaler value.


Define Documentation

 
#define RTC_Busy (  )     ( RTC.STATUS & RTC_SYNCBUSY_bm )

This macro checks the RTC busy flag.

Returns:
Non-Zero if RTC is busy, zero otherwise.

Definition at line 70 of file rtc_driver.h.

Referenced by main().

 
#define RTC_GetCompareFlag (  )     ( RTC.INTFLAGS & RTC_COMPIF_bm )

This macro returns the status of the RTC compare flag.

Returns:
Non-Zero if an RTC compare has occured, zero otherwise.

Definition at line 82 of file rtc_driver.h.

 
#define RTC_GetCompareValue (  )     ( RTC.COMP )

This macro returns the current RTC compare value.

This is the compare value of the RTC, which will be compared to the count sequence. The compare value must be less than the RTC period.

Returns:
The current compare value.

Definition at line 141 of file rtc_driver.h.

 
#define RTC_GetCount (  )     ( RTC.CNT )

This macro returns the current RTC count value.

This is the count value of the RTC, which will count up to the RTC period.

Returns:
The current RTC count value.

Definition at line 101 of file rtc_driver.h.

 
#define RTC_GetOverflowFlag (  )     ( RTC.INTFLAGS & RTC_OVFIF_bm )

This macro returns the status of the RTC overflow flag.

Returns:
Non-Zero if overflow has occured, zero otherwise.

Definition at line 76 of file rtc_driver.h.

 
#define RTC_GetPeriod (  )     ( RTC.PER )

This macro returns the current RTC period value.

This is the period value of the RTC, which is the top of the count sequence.

Returns:
The current RTC period value.

Definition at line 120 of file rtc_driver.h.

#define RTC_SetCompareValue ( _cmpVal   )     ( RTC.COMP = (_cmpVal) )

This macro sets a new RTC compare value.

This is the compare value of the RTC, which will be compared to the count sequence. The compare value must be less than the RTC period.

Note:
The program code needs to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.
Parameters:
_cmpVal The new compare value.

Definition at line 132 of file rtc_driver.h.

#define RTC_SetCount ( _rtccnt   )     ( RTC.CNT = (_rtccnt) )

This macro sets a new RTC count value.

This is the count value of the RTC, which will count up to the RTC period.

Note:
The program code needs to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.
Parameters:
_rtccnt The new count value.

Definition at line 93 of file rtc_driver.h.

#define RTC_SetPeriod ( _rtcper   )     ( RTC.PER = (_rtcper) )

This macro sets a new RTC period.

This is the period value of the RTC, which is the top of the count sequence.

Note:
The program code needs to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.
Parameters:
_rtcper The new RTC period.

Definition at line 112 of file rtc_driver.h.


Function Documentation

void RTC_Initialize ( uint16_t  period,
uint16_t  count,
uint16_t  compareValue,
RTC_PRESCALER_t  prescaler 
)

This function initializes the RTC with period, initial count, compare value and clock prescaler.

All the synchronized registers are written at the same time to save time. The program code need to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.

Parameters:
period RTC period. Topvalue = Period - 1.
count Initial RTC count.
compareValue Compare value.
prescaler Clock prescaler setting.

Definition at line 75 of file rtc_driver.c.

Referenced by main().

00079 {
00080         RTC.PER = period - 1;
00081         RTC.CNT = count;
00082         RTC.COMP = compareValue;
00083         RTC.CTRL = ( RTC.CTRL & ~RTC_PRESCALER_gm ) | prescaler;
00084 }

void RTC_SetAlarm ( uint16_t  alarmTimeout  ) 

This function sets a timeout alarm.

This function sets a timeout alarm by adding the timeout to the current count value. If the resulting alarm value is larger than the RTC period value, it will wrap around. An RTC compare interrupt will be triggered¨ after the specified timeout.

Note:
The program code needs to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.

The timeout must be less than the timer period. The timeout should not be set too low, as the timeout may be missed, depending on CPU speed.

Parameters:
alarmTimeout Timeout time in RTC clock cycles (scaled).

Definition at line 138 of file rtc_driver.c.

00139 {
00140         /* Calculate compare time. */
00141         uint16_t compareValue = RTC.CNT + alarmTimeout;
00142 
00143         /* Wrap on period. */
00144         if (compareValue > RTC.PER){
00145                 compareValue -= RTC.PER;
00146         }
00147 
00148         /* Add the timeout value to get the absolute time of the alarm. */
00149         RTC.COMP = compareValue;
00150 }

void RTC_SetCompareIntLevel ( RTC_COMPINTLVL_t  intLevel  ) 

This function sets the RTC compare interrupt level.

Parameters:
intLevel The compare interrupt level.

Definition at line 101 of file rtc_driver.c.

00102 {
00103         RTC.INTCTRL = ( RTC.INTCTRL & ~RTC_COMPINTLVL_gm ) | intLevel;
00104 }

void RTC_SetIntLevels ( RTC_OVFINTLVL_t  ovfIntLevel,
RTC_COMPINTLVL_t  compIntLevel 
)

This function sets both compare and overflow interrupt levels in one go.

Parameters:
ovfIntLevel The overflow interrupt level.
compIntLevel The compare interrupt level.

Definition at line 113 of file rtc_driver.c.

Referenced by main().

00115 {
00116         RTC.INTCTRL = ( RTC.INTCTRL &
00117                       ~( RTC_COMPINTLVL_gm | RTC_OVFINTLVL_gm ) ) |
00118                       ovfIntLevel |
00119                       compIntLevel;
00120 }

void RTC_SetOverflowIntLevel ( RTC_OVFINTLVL_t  intLevel  ) 

This function sets the RTC overflow interrupt level.

Parameters:
intLevel The overflow interrupt level.

Definition at line 91 of file rtc_driver.c.

00092 {
00093         RTC.INTCTRL = ( RTC.INTCTRL & ~RTC_OVFINTLVL_gm ) | intLevel;
00094 }

void RTC_SetPrescaler ( RTC_PRESCALER_t  prescaler  ) 

This function sets a new RTC clock prescaler value.

Note:
The program code need to check if the RTC is busy before calling this function. The RTC_Busy() function can be used to do this.
Parameters:
prescaler Clock prescaler setting.

Definition at line 160 of file rtc_driver.c.

00161 {
00162         RTC.CTRL = ( RTC.CTRL & ~RTC_PRESCALER_gm ) | prescaler;
00163 }

@DOC_TITLE@
Generated on Wed Apr 23 08:25:24 2008 for AVR1314 Using the Xmega Real Time Counter by doxygen 1.5.5