forked from Imagelibrary/rtems
New file based on notes from Jiri Gaisler <jgais@ws.estec.esa.nl>.
This commit is contained in:
77
doc/bsp_howto/adaintr.t
Normal file
77
doc/bsp_howto/adaintr.t
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
@c
|
||||||
|
@c COPYRIGHT (c) 1988-1998.
|
||||||
|
@c On-Line Applications Research Corporation (OAR).
|
||||||
|
@c All rights reserved.
|
||||||
|
@c
|
||||||
|
@c $Id$
|
||||||
|
@c
|
||||||
|
|
||||||
|
@chapter Ada95 Interrupt Support
|
||||||
|
|
||||||
|
@section Introduction
|
||||||
|
|
||||||
|
This chapter describes what is required to enable Ada interrupt
|
||||||
|
and error exception handling when using GNAT over RTEMS.
|
||||||
|
|
||||||
|
The GNAT Ada95 interrupt support RTEMS was developed by
|
||||||
|
Jiri Gaisler <jgais@@ws.estec.esa.nl> who also wrote this
|
||||||
|
chapter.
|
||||||
|
|
||||||
|
@section Mapping Interrupts to POSIX Signals
|
||||||
|
|
||||||
|
In Ada95, interrupts can be attached with the interrupt_attach pragma.
|
||||||
|
For most systems, the gnat run-time will use POSIX signal to implement
|
||||||
|
the interrupt handling, mapping one signal per interrupt. For interrupts
|
||||||
|
to be propagated to the attached Ada handler, the corresponding signal
|
||||||
|
must be raised when the interrupt occurs.
|
||||||
|
|
||||||
|
The same mechanism is used to generate Ada error exceptions.
|
||||||
|
Three error exceptions are defined: program, constraint and storage
|
||||||
|
error. These are generated by raising the predefined signals: SIGILL,
|
||||||
|
SIGFPE and SIGSEGV. These signals should be raised when a spurious
|
||||||
|
or erroneous trap occurs.
|
||||||
|
|
||||||
|
To enable gnat interrupt and error exception support for a particular
|
||||||
|
bsp, the following has to be done:
|
||||||
|
|
||||||
|
@enumerate
|
||||||
|
|
||||||
|
@item Write an interrupt/trap handler that will raise the corresponding
|
||||||
|
signal depending on the interrupt/trap number.
|
||||||
|
|
||||||
|
@item Install the interrupt handler for all interrupts/traps that will be
|
||||||
|
handled by gnat (including spurious).
|
||||||
|
|
||||||
|
@item At startup, gnat calls @code{__gnat_install_handler()}. The bsp
|
||||||
|
must provide this function which installs the interrupt/trap handlers.
|
||||||
|
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
Which cpu-interrupt will generate which signal is implementation
|
||||||
|
defined. There are 32 POSIX signals (1 - 32), and all except the
|
||||||
|
three error signals (SIGILL, SIGFPE and SIGSEGV) can be used. I
|
||||||
|
would suggest to use the upper 16 (17 - 32) which do not
|
||||||
|
have an assigned POSIX name.
|
||||||
|
|
||||||
|
Note that the pragma interrupt_attach will only bind a signal
|
||||||
|
to a particular Ada handler - it will not unmask the
|
||||||
|
interrupt or do any other things to enable it. This have to be
|
||||||
|
done separately, typically by writing various device register.
|
||||||
|
|
||||||
|
@section Example Ada95 Interrupt Program
|
||||||
|
|
||||||
|
An example program is available to show how interrupts
|
||||||
|
can be handled in Ada95. Note that generation of the test
|
||||||
|
interrupt (irqforce.c) is bsp specific and must be edited.
|
||||||
|
|
||||||
|
@section Version Requirements
|
||||||
|
|
||||||
|
With RTEMS 4.0, a patch was required to psignal.c in RTEMS
|
||||||
|
sources (to correct a bug associated to the default action of
|
||||||
|
signals 15-32). The SPARC/ERC32 RTEMS BSP includes the
|
||||||
|
@code{gnatsupp} subdirectory that can be used as an example
|
||||||
|
for other BSPs.
|
||||||
|
|
||||||
|
With GNAT 3.11p, a patch is required for @code{a-init.c} to invoke
|
||||||
|
the BSP specific routine that installs the exception handlers.
|
||||||
|
|
||||||
Reference in New Issue
Block a user