201 lines
5.5 KiB
ArmAsm
201 lines
5.5 KiB
ArmAsm
/*
|
|
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
|
|
2015,2016,2017,2018,2019,2020,2021,2022 Giovanni Di Sirio.
|
|
|
|
This file is part of ChibiOS.
|
|
|
|
ChibiOS is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation version 3 of the License.
|
|
|
|
ChibiOS is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* @file ARMvx-M-SB/compilers/GCC/vectors.S
|
|
* @brief Sandbox VRQ vectors.
|
|
*
|
|
* @defgroup ARMVXM_SB_GCC_VECTORS Sandbox VRQ vectors
|
|
* @{
|
|
*/
|
|
|
|
#if !defined(FALSE) || defined(__DOXYGEN__)
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
#if !defined(TRUE) || defined(__DOXYGEN__)
|
|
#define TRUE 1
|
|
#endif
|
|
|
|
#if !defined(SB_VECTORS_NORTOS)
|
|
#define _FROM_ASM_
|
|
#include "chlicense.h"
|
|
#include "chconf.h"
|
|
#endif
|
|
|
|
/*===========================================================================*/
|
|
/* Module constants. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* Module pre-compile time settings. */
|
|
/*===========================================================================*/
|
|
|
|
/*===========================================================================*/
|
|
/* Code section. */
|
|
/*===========================================================================*/
|
|
|
|
#if !defined(__DOXYGEN__)
|
|
|
|
.syntax unified
|
|
.cpu cortex-m3
|
|
.thumb
|
|
|
|
|
|
.bss
|
|
|
|
.align 2
|
|
.globl __sb_in_vrq
|
|
__sb_in_vrq:
|
|
.ds.l 1
|
|
|
|
.text
|
|
|
|
.align 2
|
|
.globl __crt0_vrq
|
|
__crt0_vrq:
|
|
ldr.w r1, =__sb_in_vrq
|
|
mov.w r2, #1
|
|
str.w r2, [r1]
|
|
|
|
ldr.w r2, =__sb_vectors
|
|
ldr.w r2, [r2, r0, lsl #2]
|
|
blx r2
|
|
|
|
ldr.w r1, =__sb_in_vrq
|
|
mov.w r2, #0
|
|
str.w r2, [r1]
|
|
|
|
#if !defined(SB_VECTORS_NORTOS)
|
|
#if CH_DBG_STATISTICS
|
|
bl __stats_start_measure_crit_thd
|
|
#endif
|
|
#if CH_DBG_SYSTEM_STATE_CHECK
|
|
bl __dbg_check_lock
|
|
#endif
|
|
bl chSchPreemption
|
|
#if CH_DBG_SYSTEM_STATE_CHECK
|
|
bl __dbg_check_unlock
|
|
#endif
|
|
#if CH_DBG_STATISTICS
|
|
bl __stats_stop_measure_crit_thd
|
|
#endif
|
|
#endif
|
|
|
|
svc #127 /* SB_FASTC_VRQ_RETURN */
|
|
|
|
.align 2
|
|
.globl __sb_vectors
|
|
__sb_vectors:
|
|
.long __sb_vector0, __sb_vector1, __sb_vector2, __sb_vector3
|
|
.long __sb_vector4, __sb_vector5, __sb_vector6, __sb_vector7
|
|
.long __sb_vector8, __sb_vector9, __sb_vector10, __sb_vector11
|
|
.long __sb_vector12, __sb_vector13, __sb_vector14, __sb_vector15
|
|
.long __sb_vector16, __sb_vector17, __sb_vector18, __sb_vector19
|
|
.long __sb_vector20, __sb_vector21, __sb_vector22, __sb_vector23
|
|
.long __sb_vector24, __sb_vector25, __sb_vector26, __sb_vector27
|
|
.long __sb_vector28, __sb_vector29, __sb_vector30, __sb_vector31
|
|
|
|
.align 2
|
|
.weak __sb_vector0, __sb_vector1, __sb_vector2, __sb_vector3
|
|
.weak __sb_vector4, __sb_vector5, __sb_vector6, __sb_vector7
|
|
.weak __sb_vector8, __sb_vector9, __sb_vector10, __sb_vector11
|
|
.weak __sb_vector12, __sb_vector13, __sb_vector14, __sb_vector15
|
|
.weak __sb_vector16, __sb_vector17, __sb_vector18, __sb_vector19
|
|
.weak __sb_vector20, __sb_vector21, __sb_vector22, __sb_vector23
|
|
.weak __sb_vector24, __sb_vector25, __sb_vector26, __sb_vector27
|
|
.weak __sb_vector28, __sb_vector29, __sb_vector30, __sb_vector31
|
|
|
|
.thumb_func
|
|
__sb_vector0:
|
|
.thumb_func
|
|
__sb_vector1:
|
|
.thumb_func
|
|
__sb_vector2:
|
|
.thumb_func
|
|
__sb_vector3:
|
|
.thumb_func
|
|
__sb_vector4:
|
|
.thumb_func
|
|
__sb_vector5:
|
|
.thumb_func
|
|
__sb_vector6:
|
|
.thumb_func
|
|
__sb_vector7:
|
|
.thumb_func
|
|
__sb_vector8:
|
|
.thumb_func
|
|
__sb_vector9:
|
|
.thumb_func
|
|
__sb_vector10:
|
|
.thumb_func
|
|
__sb_vector11:
|
|
.thumb_func
|
|
__sb_vector12:
|
|
.thumb_func
|
|
__sb_vector13:
|
|
.thumb_func
|
|
__sb_vector14:
|
|
.thumb_func
|
|
__sb_vector15:
|
|
.thumb_func
|
|
__sb_vector16:
|
|
.thumb_func
|
|
__sb_vector17:
|
|
.thumb_func
|
|
__sb_vector18:
|
|
.thumb_func
|
|
__sb_vector19:
|
|
.thumb_func
|
|
__sb_vector20:
|
|
.thumb_func
|
|
__sb_vector21:
|
|
.thumb_func
|
|
__sb_vector22:
|
|
.thumb_func
|
|
__sb_vector23:
|
|
.thumb_func
|
|
__sb_vector24:
|
|
.thumb_func
|
|
__sb_vector25:
|
|
.thumb_func
|
|
__sb_vector26:
|
|
.thumb_func
|
|
__sb_vector27:
|
|
.thumb_func
|
|
__sb_vector28:
|
|
.thumb_func
|
|
__sb_vector29:
|
|
.thumb_func
|
|
__sb_vector30:
|
|
.thumb_func
|
|
__sb_vector31:
|
|
bl __unhandled_vrq
|
|
|
|
.thumb_func
|
|
.weak __unhandled_vrq
|
|
__unhandled_vrq:
|
|
/* TODO terminate SB???*/
|
|
svc #127 /* SB_FASTC_VRQ_RETURN */
|
|
.stay: b .stay
|
|
|
|
#endif /* !defined(__DOXYGEN__) */
|
|
|
|
/** @} */
|