Xmega IEC60730 Class B Library  1.0
 All Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
classb_rtc_common.h
Go to the documentation of this file.
1 /* This file has been prepared for Doxygen automatic documentation generation.*/
2 /**
3  * \file
4  *
5  * \brief Settings for the RTC driver.
6  *
7  * \par Application note:
8  * AVR1610: Guide to IEC60730 Class B compliance with XMEGA
9  *
10  * \par Documentation
11  * For comprehensive code documentation, supported compilers, compiler
12  * settings and supported devices see readme.html
13  *
14  * \author
15  * Atmel Corporation: http://www.atmel.com \n
16  * Support email: avr@atmel.com
17  *
18  * Copyright (C) 2012 Atmel Corporation. All rights reserved.
19  *
20  * \page License
21  *
22  * Redistribution and use in source and binary forms, with or without
23  * modification, are permitted provided that the following conditions are met:
24  *
25  * 1. Redistributions of source code must retain the above copyright notice,
26  * this list of conditions and the following disclaimer.
27  *
28  * 2. Redistributions in binary form must reproduce the above copyright notice,
29  * this list of conditions and the following disclaimer in the documentation
30  * and/or other materials provided with the distribution.
31  *
32  * 3. The name of Atmel may not be used to endorse or promote products derived
33  * from this software without specific prior written permission.
34  *
35  * 4. This software may only be redistributed and used in connection with an
36  * Atmel AVR product.
37  *
38  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
39  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
40  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
41  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
42  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
44  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
45  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
46  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
47  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
48  * DAMAGE.
49  */
50 
51 #ifndef CLASSB_RTC_COMMON_H
52 #define CLASSB_RTC_COMMON_H
53 
54 #include "avr_compiler.h"
55 #include "error_handler.h"
56 
57 
58 //! \defgroup rtc_driver Real Time Counter Driver
59 //!
60 //! \brief This is a basic driver for the Real Time Counter (RTC).
61 //!
62 //! The RTC is used to generate interrupts periodically for both the CPU frequency
63 //! and the interrupt self-diagnostic routines. Depending on the specific device,
64 //! an RTC or an RTC32 will be used. In both cases the RTC is clocked independently
65 //! from the CPU with a 32.768 kHz oscillator scaled down to 1024 Hz.
66 //!
67 //! The interrupt period can be configured in the driver through \ref CLASSB_RTC_INT_PERIOD.
68 //! Further, the RTC module is setup with \ref classb_rtc_setup(). Note that interrupts
69 //! should be enabled in the main application with \c sei().
70 //!
71 //! Note that it is possible to use a different RTC driver. The only requirement is
72 //! that it defines the constants for the interrupt period \ref CLASSB_RTC_INT_PERIOD and the
73 //! RTC frequency \ref CLASSB_RTC_FREQ.
74 //!
75 //!
76 //@{
77 
78 //! \name RTC Settings and Class B Interface.
79 //!
80 //! \brief Settings and RTC information.
81 //!
82 //! These two constants give information about the RTC to the Class B tests. Therefore, they need
83 //! to be defined with correct values. As long as these are defined, any RTC driver can be used.
84 //!
85 //@{
86 
87 /**
88  * \brief RTC interrupt period.
89  *
90  * This constant is used to configure the period of the RTC compare interrupt. In addition, it is
91  * used in the Class B tests. An example value is \c 2048UL.
92  *
93  * \note This is a 16- or 32-bit value depending on the RTC hardware module.
94  */
95 #define CLASSB_RTC_INT_PERIOD 2048UL
96 
97 /**
98  * \brief RTC frequency.
99 
100  * This gives information to the Class B tests. However, the RTC frequency is hard coded in this
101  * driver to 1024 Hz. More details in \ref classb_rtc_setup().
102  */
103 #define CLASSB_RTC_FREQ 1024UL
104 
105 //@}
106 
107 #ifdef __DOXYGEN__
108  //! \name Test declarations.
109  //!
110  //! \brief Set which Class B tests are included in the RTC interrupt.
111  //!
112  //! These symbols can be defined at the compiler level or in this file.
113  //@{
114  //! \brief Test for the CPU frequency.
115  #define CLASSB_FREQ_TEST
116  //! \brief Interrupt monitor.
117  #define CLASSB_INT_MON
118  //@}
119 #else
120  //#define CLASSB_FREQ_TEST
121  //#define CLASSB_INT_MON
122 #endif
123 
124 
125 // Include header files for the callbacks in the RTC interrupt.
126 #ifdef CLASSB_FREQ_TEST
127 # include "classb_freq.h"
128 #endif
129 #ifdef CLASSB_INT_MON
130 # include "classb_interrupt_monitor.h"
131 #endif
132 
133 
134 // Workaround for missing CNT, PER and COMP in device header files.
135 #ifdef RTC32
136  #ifdef __ICCAVR__
137  # define _DWORDREGISTER DWORDREGISTER
138  #endif
139 
140  typedef struct RTC32_struct2 {
141  register8_t CTRL;
142  register8_t SYNCCTRL;
143  register8_t INTCTRL;
144  register8_t INTFLAGS;
145  _DWORDREGISTER(CNT);
146  _DWORDREGISTER(PER);
147  _DWORDREGISTER(COMP);
148  } RTC32_t2;
149 
150  #undef RTC32
151  #define RTC32 (*(RTC32_t2 *)0x0420)
152 #endif
153 
154 
155 //! \internal \name Compatibility with RTC and RTC32.
156 //! Depending on the XMEGA device there will be a 16- or 32-bits RTC.
157 //! To make this transparent we define the following constants.
158 //@{
159 #if defined(RTC32) || defined(__DOXYGEN__)
160  //! \internal \brief Name of the RTC module.
161  #define RTC_TEST RTC32
162  //! \internal \brief Bit mask used to start RTC.
163  #define RTC_TEST_START_bm RTC32_ENABLE_bm
164  //! \internal \brief Compare interrupt level group configuration
165  #define RTC_TEST_COMPINTLVL_LO_gc RTC32_COMPINTLVL_LO_gc
166  //! \internal \brief Compare interrupt disable group configuration
167  #define RTC_TEST_COMPINTLVL_OFF_gc RTC32_COMPINTLVL_OFF_gc
168  //! \internal \brief Compare interrupt flag bit mask
169  #define RTC_TEST_COMPIF_bm RTC32_COMPIF_bm
170  //! \internal \brief Compare interrupt vector
171  #define RTC_TEST_COMP_vect RTC32_COMP_vect
172  //! \internal \brief Overflow Interrupt Flag bit mask
173  #define RTC_TEST_OVFIF_bm RTC32_OVFIF_bm
174 #else
175  #define RTC_TEST RTC
176  #define RTC_TEST_START_bm RTC_PRESCALER_DIV1_gc
177  #define RTC_TEST_COMPINTLVL_LO_gc RTC_COMPINTLVL_LO_gc
178  #define RTC_TEST_COMPINTLVL_OFF_gc RTC_COMPINTLVL_OFF_gc
179  #define RTC_TEST_COMPIF_bm RTC_COMPIF_bm
180  #define RTC_TEST_COMP_vect RTC_COMP_vect
181  #define RTC_TEST_OVFIF_bm RTC_OVFIF_bm
182 #endif
183 
184 
185 
186 
187 
188 //! \name Functions
189 //@{
190 void classb_rtc_setup();
191 void vbat_init(void);
192 bool rtc_is_busy(void);
193 //@}
194 
195 
196 //@}
197 
198 #endif //CLASSB_RTC_COMMON_H