60 lines
1.8 KiB
ArmAsm
60 lines
1.8 KiB
ArmAsm
/*
|
|
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,
|
|
2011,2012,2013,2014 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; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
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 ARM/compilers/GCC/irq.s
|
|
* @brief IRQ handling for ARM devices.
|
|
*
|
|
* @defgroup ARM_IRQ ARM IRQ Handling
|
|
* @{
|
|
*/
|
|
|
|
#define __FROM_ASM__
|
|
#include "armparams.h"
|
|
|
|
#if !defined(__DOXYGEN__)
|
|
|
|
.section irq
|
|
.code 32
|
|
.balign 4
|
|
|
|
/*
|
|
* IRQ entry point, note this code is always located at address 0x40, the
|
|
* IRQ controller data register offset must be calculated accordingly.
|
|
*/
|
|
.global IrqHandler
|
|
IrqHandler:
|
|
stmfd sp!, {r0-r3, r12, lr}
|
|
ldr r0, =ARM_IRQ_VECTOR_REG
|
|
ldr r0, [r0]
|
|
ldr lr, =_port_irq_common
|
|
bx r0
|
|
|
|
.weak _port_irq_common
|
|
_port_irq_common:
|
|
// This exit sequence is usually replaced by the RTOS
|
|
// specific one.
|
|
ldmfd sp!, {r0-r3, r12, lr}
|
|
subs pc, lr, #4
|
|
|
|
#endif
|
|
|
|
/** @} */
|