Xmega IEC60730 Class B Library
1.0
All
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
error_handler.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 Macros and definitions for handling errors and other configurable actions.
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_ERROR_HANDLER_H
52
#define CLASSB_ERROR_HANDLER_H
53
54
#include "
avr_compiler.h
"
55
56
57
//! \defgroup error_handler Error Handling
58
//! \brief Definitions related to error handling for Class B tests.
59
//!
60
//! In order to make the library as flexible as possible, the user can configure
61
//! the response to the different errors that can appear during the tests. Therefore,
62
//! the user is responsible to handle the errors in a way such that the application
63
//! is safe and reliable.
64
//@{
65
66
//! \name Global variables defined in the main application.
67
//@{
68
//! \brief The global error flag in the examples
69
NO_INIT
extern
volatile
uint8_t
classb_error
;
70
//@}
71
72
//! \name Functions prototypes
73
//! \brief Declare functions that are called by the error handlers.
74
//! Those functions should be defined in an application file.
75
//@{
76
77
//@}
78
79
//! \name Error handlers for Class B tests.
80
//! These are the statements that should be run if a test fails.
81
//! \note The statements need to be declared as:
82
//! - <tt>do{<statements>}while(0)</tt> or similar.
83
//! - Example: in order to hang the device it is possible to set <tt>do{}while(1)</tt>.
84
//!
85
//@{
86
//! Error handler for the ADC, DAC and analog multiplexer test
87
#define CLASSB_ERROR_HANDLER_ANALOG() do{classb_error = 1;}while(0)
88
//! Error handler for the CRC test
89
#define CLASSB_ERROR_HANDLER_CRC() do{classb_error = 1;}while(0)
90
//! Error handler for the CPU frequency test
91
#define CLASSB_ERROR_HANDLER_FREQ() do{classb_error = 1;}while(0)
92
//! Error handler for the interrupt monitor
93
#define CLASSB_ERROR_HANDLER_INTERRUPT() do{classb_error = 1;}while(0)
94
//! Error handler for the CPU registers test
95
#define CLASSB_ERROR_HANDLER_REGISTERS() do{classb_error = 1;}while(0)
96
//! Error handler for the SRAM test
97
#define CLASSB_ERROR_HANDLER_SRAM() do{classb_error = 1;}while(0)
98
//! Error handler for watchdog timer test
99
#define CLASSB_ERROR_HANDLER_WDT() do{}while(1)
100
//@}
101
102
//! \name Configurable actions and conditions for Class B tests.
103
//! Some test have a configurable behavior.
104
//! \note
105
//! - The conditions should be declared as: <tt>(<condition>)</tt>.
106
//! - Statements need to be declared as: <tt>do{<statements>}while(0)</tt> or similar.
107
//! - Example: in order to hang the device it is possible to set: <tt>do{}while(1)</tt>.
108
//@{
109
110
111
//! Condition to assign a new state
112
#define CLASSB_CONDITION1_INTERRUPT (!classb_error)
113
114
//! Condition to stop checking interrupts within the monitor
115
#define CLASSB_CONDITION2_INTERRUPT (classb_error)
116
117
118
//! Configurable actions in the RTC interrupt.
119
#define CLASSB_ACTIONS_RTC() ;
120
121
//! First group of configurable actions in the watchdog timer test.
122
#define CLASSB_ACTIONS_WDT_RUNTIME_FAILURE() \
123
do{\
124
/* In our example application we set the error variable and \
125
re-enable watchdog timer.*/
\
126
classb_error = 1;\
127
/* WDT configuration for the main application: WDT in normal mode */
\
128
CCP = CCP_IOREG_gc;\
129
WDT.CTRL = WDT_ENABLE_bm | CLASSB_WDT_PER | WDT_CEN_bm ;\
130
/* Wait until WDT Synchronized */
\
131
while( WDT.STATUS & WDT_SYNCBUSY_bm );\
132
/* Set Closed period (when WDT cannot be reset) */
\
133
CCP = CCP_IOREG_gc;\
134
WDT.WINCTRL = WDT_WEN_bm | CLASSB_WDT_WPER | WDT_WCEN_bm;\
135
/* Wait until WDT Synchronized */
\
136
while( WDT.STATUS & WDT_SYNCBUSY_bm );\
137
}while(0)
138
139
//! \brief Second group of configurable actions in the watchdog timer test.
140
#define CLASSB_ACTIONS_WDT_OTHER_FAILURE() do{}while(0)
141
//@}
142
143
144
//@}
145
146
#endif //CLASSB_ERROR_HANDLER_H
tests
error_handler.h
Generated by
1.8.1