/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ /*This file is prepared for Doxygen automatic documentation generation.*/ /*! \file ********************************************************************* * * \brief NEWLIB_ADDONS exceptions include file for AVR32. * * - Compiler: GNU GCC for AVR32 * - Supported devices: All AVR32 devices can be used. * - AppNote: * * \author Atmel Corporation: http://www.atmel.com \n * Support and FAQ: http://support.atmel.no/ * ******************************************************************************/ /* Copyright (c) 2009 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. * * 4. This software may only be redistributed and used in connection with an Atmel * AVR product. * * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 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 * */ #ifndef __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ #define __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ #include <_ansi.h> _BEGIN_STD_C /* Exception vector offsets */ #define EVBA_UNRECOVERABLE 0x000 #define EVBA_TLB_MULTIPLE 0x004 #define EVBA_BUS_ERROR_DATA 0x008 #define EVBA_BUS_ERROR_INSTR 0x00C #define EVBA_NMI 0x010 #define EVBA_INSTR_ADDR 0x014 #define EVBA_ITLB_MISS 0x050 #define EVBA_ITLB_PROT 0x018 #define EVBA_BREAKPOINT 0x01C #define EVBA_ILLEGAL_OPCODE 0x020 #define EVBA_UNIMPLEMENTED 0x024 #define EVBA_PRIVILEGE_VIOL 0x028 #define EVBA_FLOATING_POINT 0x02C #define EVBA_COP_ABSENT 0x030 #define EVBA_SCALL 0x100 #define EVBA_DATA_ADDR_R 0x034 #define EVBA_DATA_ADDR_W 0x038 #define EVBA_DTLB_MISS_R 0x060 #define EVBA_DTLB_MISS_W 0x070 #define EVBA_DTLB_PROT_R 0x03C #define EVBA_DTLB_PROT_W 0x040 #define EVBA_DTLB_MODIFIED 0x044 /* Define the form of the function used when registering exceptions. The function should return the address which the exception should return to after the exception processing. */ typedef unsigned int (*__exception_handler)(int /*evba_offset*/, int /*return address*/); /* Define the form of the function used when registering a scall handler. */ typedef void (*__scall_handler)(int /*code*/, int /*p1*/, int /*p2*/ , int /*p3*/, int /*p4*/); /* Function for registering an exception handler for the exception with offset given by evba_offset. */ void _register_exception_handler(__exception_handler handler, int evba_offset); /* Function for registering a scall handler which can be a arbirary function which uses r8-r12 for parameters. */ void _register_scall_handler(__scall_handler handler); /* Initialize exceptions. Must be called before registering exception handlers and needed to enable exceptions. 'evba' is the pointer to the exception vector. 'handler_table' is a pointer to an array where the pointers to the exception handlers are stored. This array must be at least 0x104 bytes and word aligned. */ void init_exceptions(void *evba, void *handler_table); _END_STD_C #endif