/* 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 . */ /** * @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 /** @} */