675 lines
32 KiB
C
675 lines
32 KiB
C
|
|
/**********************************************************************************************************************
|
||
|
|
* COPYRIGHT
|
||
|
|
* -------------------------------------------------------------------------------------------------------------------
|
||
|
|
* \verbatim
|
||
|
|
* Copyright (c) 2025 by Vector Informatik GmbH. All rights reserved.
|
||
|
|
*
|
||
|
|
* This software is copyright protected and proprietary to Vector Informatik GmbH.
|
||
|
|
* Vector Informatik GmbH grants to you only those rights as set out in the license conditions.
|
||
|
|
* All other rights remain with Vector Informatik GmbH.
|
||
|
|
* \endverbatim
|
||
|
|
* -------------------------------------------------------------------------------------------------------------------
|
||
|
|
* FILE DESCRIPTION
|
||
|
|
* -----------------------------------------------------------------------------------------------------------------*/
|
||
|
|
/** \file File: ARMBrsHwIntTb_CortexR.c
|
||
|
|
* Project: Vector Basic Runtime System
|
||
|
|
* Module: BrsHw for all platforms with ARM core Cortex-R
|
||
|
|
* Template: This file is reviewed according to Brs_Template@Implementation[1.03.12]
|
||
|
|
*
|
||
|
|
* \brief Description: This is a global, hardware-independent file for the ARM-BRS.
|
||
|
|
* It consists of the core exception table for Startup and a 2nd one to be copied into RAM
|
||
|
|
* for FBL projects.
|
||
|
|
*
|
||
|
|
* \attention Please note:
|
||
|
|
* The demo and example programs only show special aspects of the software. With regard to the fact
|
||
|
|
* that these programs are meant for demonstration purposes only, Vector Informatik liability shall be
|
||
|
|
* expressly excluded in cases of ordinary negligence, to the extent admissible by law or statute.
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
|
||
|
|
/**********************************************************************************************************************
|
||
|
|
* REVISION HISTORY
|
||
|
|
* -------------------------------------------------------------------------------------------------------------------
|
||
|
|
* Refer to ARMBrsHw_CortexR.h.
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
|
||
|
|
/**********************************************************************************************************************
|
||
|
|
* EXAMPLE CODE ONLY
|
||
|
|
* -------------------------------------------------------------------------------------------------------------------
|
||
|
|
* This Example Code is only intended for illustrating an example of a possible BSW integration and BSW configuration.
|
||
|
|
* The Example Code has not passed any quality control measures and may be incomplete. The Example Code is neither
|
||
|
|
* intended nor qualified for use in series production. The Example Code as well as any of its modifications and/or
|
||
|
|
* implementations must be tested with diligent care and must comply with all quality requirements which are necessary
|
||
|
|
* according to the state of the art before their use.
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
|
||
|
|
#define ARMBRSHWINTTB_CORTEXR_SOURCE
|
||
|
|
|
||
|
|
/**********************************************************************************************************************
|
||
|
|
* INCLUDES
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
#include "ARMBrsHw_CortexR.h"
|
||
|
|
|
||
|
|
/**********************************************************************************************************************
|
||
|
|
* CONFIGURATION CHECK
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
#if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
|
||
|
|
#else
|
||
|
|
#error "Unknown compiler specified!"
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/**********************************************************************************************************************
|
||
|
|
* PROTOTYPES OF LOCAL FUNCTIONS
|
||
|
|
*********************************************************************************************************************/
|
||
|
|
#if defined (BRS_FIRST_EXECUTION_INSTANCE)
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_CoreExceptionHandler(void);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if defined (BRS_ENABLE_OS_MULTICORESUPPORT)
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_MultiCoreExceptionHandler(void);
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core1Exceptions)
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 2)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core2Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 3)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core3Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 4)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core4Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 5)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core5Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 6)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core6Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 7)
|
||
|
|
BRS_LOCAL_FUNCTION_PROTOTYPE(intvect_Core7Exceptions)
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 8)
|
||
|
|
#error "More than 8 cores actually not supported by ARMBrsHwIntTb_CortexR.c!"
|
||
|
|
# endif
|
||
|
|
#endif /*BRS_ENABLE_OS_MULTICORESUPPORT*/
|
||
|
|
|
||
|
|
#if defined (BRS_ENABLE_FBL_SUPPORT) && defined (BRS_FBL_EXCEPTIONTABLE_IN_RAM)
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_CoreExceptionHandler_Ram(void);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
extern void brsStartupEntry(void);
|
||
|
|
|
||
|
|
#if defined (BRS_FIRST_EXECUTION_INSTANCE)
|
||
|
|
/* This code is only needed for the first instance/executable in the system */
|
||
|
|
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Startup Core Exception Handler *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
#define BRS_START_SEC_STARTUP_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_CoreExceptionHandler(void)
|
||
|
|
{
|
||
|
|
#if defined (BRSHW_BRSHW_COREEXCEPTIONHANDLER_CALLOUT)
|
||
|
|
BrsTestsuite_BrsHw_CoreExceptionHandler();
|
||
|
|
#endif
|
||
|
|
|
||
|
|
volatile uint8 Brs_Continue;
|
||
|
|
Brs_Continue = 0;
|
||
|
|
|
||
|
|
while (Brs_Continue == 0)
|
||
|
|
{
|
||
|
|
/* Set BrsMain_Continue to 1 to continue here.
|
||
|
|
* If the debugger is not able to show the stack properly, this mechanism can be used to find the
|
||
|
|
* source of the exception. */
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#define BRS_STOP_SEC_STARTUP_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Startup Core Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect"
|
||
|
|
__attribute__((naked)) void intvect_CoreExceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVectConst"))) void (* const intvect_CoreExceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_CoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVectConst"))) void (* const intvect_CoreExceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_CoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_CoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#endif /*BRS_FIRST_EXECUTION_INSTANCE*/
|
||
|
|
|
||
|
|
#if defined (BRS_ENABLE_OS_MULTICORESUPPORT)
|
||
|
|
const ARMBrsHw_PhysicalCoreId_CoreExceptions_MappingType BrsHw_intvect_CoreExceptions_list[BRS_CPU_CORE_AMOUNT-1] = {
|
||
|
|
{1, intvect_Core1Exceptions}
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 2)
|
||
|
|
,{2, intvect_Core2Exceptions}
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 3)
|
||
|
|
,{3, intvect_Core3Exceptions}
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 4)
|
||
|
|
,{4, intvect_Core4Exceptions}
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 5)
|
||
|
|
,{5, intvect_Core5Exceptions}
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 6)
|
||
|
|
,{6, intvect_Core6Exceptions}
|
||
|
|
# endif
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 7)
|
||
|
|
,{7, intvect_Core7Exceptions}
|
||
|
|
# endif
|
||
|
|
};
|
||
|
|
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* MultiCore Exception Handler *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
#if defined (BRS_FIRST_EXECUTION_INSTANCE)
|
||
|
|
#define BRS_START_SEC_STARTUP_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
#endif
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_MultiCoreExceptionHandler(void)
|
||
|
|
{
|
||
|
|
#if defined (BRSHW_BRSHW_MULTICOREEXCEPTIONHANDLER_CALLOUT)
|
||
|
|
BrsTestsuite_BrsHw_MultiCoreExceptionHandler();
|
||
|
|
#endif
|
||
|
|
|
||
|
|
volatile uint8 Brs_Continue;
|
||
|
|
Brs_Continue = 0;
|
||
|
|
|
||
|
|
while (Brs_Continue == 0)
|
||
|
|
{
|
||
|
|
/* Set Brs_Continue to 1 to continue here.
|
||
|
|
* If the debugger is not able to show the stack properly, this mechanism can be used to find the
|
||
|
|
* source of the exception. */
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#if defined (BRS_FIRST_EXECUTION_INSTANCE)
|
||
|
|
#define BRS_STOP_SEC_STARTUP_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 1 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect1"
|
||
|
|
__attribute__((naked)) void intvect_Core1Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect1Const"))) void (* const intvect_Core1Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect1Const"))) void (* const intvect_Core1Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 2)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 2 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect2"
|
||
|
|
__attribute__((naked)) void intvect_Core2Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect2Const"))) void (* const intvect_Core2Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect2Const"))) void (* const intvect_Core2Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 2*/
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 3)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 3 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect3"
|
||
|
|
__attribute__((naked)) void intvect_Core3Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect3Const"))) void (* const intvect_Core3Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect3Const"))) void (* const intvect_Core3Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 3*/
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 4)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 4 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect4"
|
||
|
|
__attribute__((naked)) void intvect_Core4Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect4Const"))) void (* const intvect_Core4Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect4Const"))) void (* const intvect_Core4Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 4*/
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 5)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 5 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect5"
|
||
|
|
__attribute__((naked)) void intvect_Core5Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect5Const"))) void (* const intvect_Core5Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect5Const"))) void (* const intvect_Core5Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 5*/
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 6)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 6 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect6"
|
||
|
|
__attribute__((naked)) void intvect_Core6Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect6Const"))) void (* const intvect_Core6Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect6Const"))) void (* const intvect_Core6Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 6*/
|
||
|
|
|
||
|
|
# if (BRS_CPU_CORE_AMOUNT > 7)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core 7 Exception Table *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVect7"
|
||
|
|
__attribute__((naked)) void intvect_Core7Exceptions(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect7Const"))) void (* const intvect_Core7Exceptions_vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* Backup Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVect7Const"))) void (* const intvect_Core7Exceptions_vectortable_backup[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 2: SVCall */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 5: Reserved */
|
||
|
|
BrsHw_MultiCoreExceptionHandler, /* Exception 6: IRQ */
|
||
|
|
BrsHw_MultiCoreExceptionHandler /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# endif /*BRS_CPU_CORE_AMOUNT > 7*/
|
||
|
|
#endif /*BRS_ENABLE_OS_MULTICORESUPPORT*/
|
||
|
|
|
||
|
|
#if defined (BRS_ENABLE_FBL_SUPPORT) && defined (BRS_FBL_EXCEPTIONTABLE_IN_RAM)
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core Exception Handler in RAM *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
#define BRS_START_SEC_RAM_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
BRS_ISR_KEYWORD void BrsHw_CoreExceptionHandler_Ram(void)
|
||
|
|
{
|
||
|
|
#if defined (BRSHW_BRSHW_COREEXCEPTIONHANDLER_RAM_CALLOUT)
|
||
|
|
BrsTestsuite_BrsHw_CoreExceptionHandler_Ram();
|
||
|
|
#endif
|
||
|
|
|
||
|
|
volatile uint8 Brs_Continue;
|
||
|
|
Brs_Continue = 0;
|
||
|
|
|
||
|
|
while (Brs_Continue == 0)
|
||
|
|
{
|
||
|
|
/* Set Brs_Continue to 1 to continue here.
|
||
|
|
* If the debugger is not able to show the stack properly, this mechanism can be used to find the
|
||
|
|
* source of the exception. */
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#define BRS_STOP_SEC_RAM_CODE
|
||
|
|
#include "Brs_MemMap.h"
|
||
|
|
|
||
|
|
/********************************************************************************************
|
||
|
|
* *
|
||
|
|
* Core Exception Table in RAM *
|
||
|
|
* *
|
||
|
|
********************************************************************************************/
|
||
|
|
# if !defined (BRS_FIRST_EXECUTION_INSTANCE)
|
||
|
|
#error "If this executable is not first execution instance, reset vector must be manually set in RAM exception table to entry address!"
|
||
|
|
/* Replace brsStartupEntry in the RAM exception table with, e.g., 0x80, as this linker symbol will not exist in this case. Then, comment out the error message above. */
|
||
|
|
# endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# if defined (BRS_COMP_LLVMTEXASINSTRUMENTS)
|
||
|
|
# pragma clang section text = ".brsExcVectRam"
|
||
|
|
__attribute__((naked)) void intvect_CoreExceptions_Ram(void)
|
||
|
|
{
|
||
|
|
/* Exception Table */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 0: Reset */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 1: Undefined Instruction */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 2: SVCall */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 3: Abort Prefetch */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 4: Abort Data */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 5: Reserved */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 6: IRQ */
|
||
|
|
__asm(" ldr pc,[pc,#0x18] "); /* Exception 7: FIQ */
|
||
|
|
}
|
||
|
|
# pragma clang section text = ""
|
||
|
|
|
||
|
|
/* Exception Vectors */
|
||
|
|
__attribute__((section(".brsExcVectRamConst"))) void (* const intvect_CoreExceptions_Ram_Vectortable[])(void) = {
|
||
|
|
brsStartupEntry, /* Exception 0: Reset */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 1: Undefined Instruction */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 2: SVCall */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 3: Abort Prefetch */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 4: Abort Data */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 5: Reserved */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram, /* Exception 6: IRQ */
|
||
|
|
BrsHw_CoreExceptionHandler_Ram /* Exception 7: FIQ */
|
||
|
|
};
|
||
|
|
# endif /*BRS_COMP_LLVMDIAB||BRS_COMP_LLVMTEXASINSTRUMENTS*/
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#endif /*BRS_ENABLE_FBL_SUPPORT&&BRS_FBL_EXCEPTIONTABLE_IN_RAM*/
|