77 lines
2.8 KiB
Plaintext
77 lines
2.8 KiB
Plaintext
/*
|
|
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
|
|
|
|
This file is part of ChibiOS/RT.
|
|
|
|
ChibiOS/RT 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/RT 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/>.
|
|
|
|
---
|
|
|
|
A special exception to the GPL can be applied should you wish to distribute
|
|
a combined work that includes ChibiOS/RT, without being obliged to provide
|
|
the source code for any proprietary components. See the file exception.txt
|
|
for full details of how and when the exception can be applied.
|
|
*/
|
|
|
|
/**
|
|
* @page article_interrupts How to write interrupt handlers
|
|
* Since version 1.1.0 ChibiOS/RT offers a cross-platform method for writing
|
|
* interrupt handlers. Port-related and compiler-related details are
|
|
* encapsulated within standard system macros.
|
|
*
|
|
* <h2>Writing Regular Interrupt handlers</h2>
|
|
* A Regular Interrupts handler (see @ref interrupt_classes) must be written
|
|
* using the following general form:
|
|
* @code
|
|
CH_IRQ_HANDLER(myIRQ) {
|
|
CH_IRQ_PROLOGUE();
|
|
|
|
// IRQ handling code, preemptable if the architecture supports it.
|
|
|
|
chSysLockFromIsr();
|
|
// Invocation of some I-Class system APIs, never preemptable.
|
|
chSysUnlockFromIsr();
|
|
|
|
// More IRQ handling code, again preemptable.
|
|
|
|
CH_IRQ_EPILOGUE();
|
|
}
|
|
* @endcode
|
|
*
|
|
* <h2>Writing Fast Interrupt handlers</h2>
|
|
* In those architectures (@ref ARM7 and @ref ARMCMx) supporting Fast
|
|
* Interrupts (see @ref interrupt_classes) handlers must be written
|
|
* using the following general form:
|
|
* @code
|
|
CH_FAST_IRQ_HANDLER(myIRQ) {
|
|
|
|
// Fast IRQ handling code, preemptable if the architecture supports it.
|
|
// The invocation of any API is forbidden here because fast interrupt
|
|
// handlers can preempt the kernel even within its critical zones in
|
|
// order to minimize latency.
|
|
}
|
|
* @endcode
|
|
*
|
|
* <h2>Handlers naming</h2>
|
|
* A note about the handler name "myIRQ", in some ports it must be a
|
|
* vector number rather than a function name, it could also be a name from
|
|
* within a predefined set, see the notes about the various ports.
|
|
*
|
|
* <h2>Important Notes</h2>
|
|
* - There is an important application note about ARM7 interrupt handlers,
|
|
* please read about it in the ARM7 port section: @ref ARM7_IH
|
|
* .
|
|
*/
|
|
|