15.2.2 Syntax for Writing ISRs
To declare a C function as an interrupt handler, tag the function with
the interrupt attribute (see the 14.1.2 Function Attributes section for a description of the __attribute__
keyword).
The syntax of the interrupt attribute is:
__attribute__((interrupt [(
[ save(symbol-list)]
[, irq(irqid)]
[, altirq(altirqid)]
[, preprologue(asm)]
[, auto_psv]
[, no_auto_psv]
[, shadow]
)]
))
The interrupt
attribute name and the parameter names
may be written with a pair of underscore characters before and after the name. Thus,
interrupt
and __interrupt__
are equivalent, as are
save
and __save__
.
The optional save
parameter names a list of one or more
variables that are to be saved and restored on entry to and exit from the ISR. The list
of names is written inside parentheses, with the names separated by commas.
You should arrange to save global variables that may be modified in an
ISR if you do not want the value to be exported. Global variables accessed by an ISR
should be qualified volatile
.
The optional irq
parameter allows you to place an
interrupt vector at a specific interrupt, with the optional altirq
parameter allowing you to place an interrupt vector at a specified alternate interrupt.
Each parameter requires a parenthesized interrupt ID number (see the 15.3 Specifying the Interrupt Vector section for a list
of interrupt IDs).
The optional preprologue
parameter allows you to insert
assembly-language statements into the generated code immediately before the
compiler-generated function prologue.
Additionally, for dsPIC33C/E/F and dsPIC30F devices, please specify
either auto_psv
or no_auto_psv
. If none is specified
, a warning is emitted and auto_psv
will be assumed.