X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/5051df08d761acada01c4db4ee468e236245bc04..a032d77d0e8009a3ef7e1666f144cde6f08f800e:/LUFA/Platform/UC3/InterruptManagement.h diff --git a/LUFA/Platform/UC3/InterruptManagement.h b/LUFA/Platform/UC3/InterruptManagement.h index 4c2721077..e9efbf311 100644 --- a/LUFA/Platform/UC3/InterruptManagement.h +++ b/LUFA/Platform/UC3/InterruptManagement.h @@ -41,8 +41,8 @@ * * \section Sec_Dependencies Module Source Dependencies * The following files must be built with any user project that uses this module: - * - LUFA/Platform/UC3/InterruptManagement.c - * - LUFA/Platform/UC3/Exception.S + * - LUFA/Platform/UC3/InterruptManagement.c (Makefile source module name: LUFA_SRC_PLATFORM) + * - LUFA/Platform/UC3/Exception.S (Makefile source module name: LUFA_SRC_PLATFORM) * * \section Sec_ModDescription Module Description * Interrupt controller driver for the AVR32 UC3 microcontrollers, for the configuration of interrupt @@ -51,12 +51,12 @@ * Usage Example: * \code * #include - * + * * ISR(USB_Group_IRQ_Handler) * { * // USB group handler code here * } - * + * * void main(void) * { * INTC_Init(); @@ -71,7 +71,7 @@ #define _UC3_INTERRUPT_MANAGEMENT_H_ /* Includes: */ - #include + #include "../../Common/Common.h" /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) @@ -84,14 +84,16 @@ typedef void (*InterruptHandlerPtr_t)(void); /* External Variables: */ - extern const void EVBA_Table; - extern const uint32_t Autovector_Table[]; + #if defined(__INCLUDE_FROM_INTMANAGEMENT_C) + extern const void EVBA_Table; + #endif extern InterruptHandlerPtr_t InterruptHandlers[AVR32_INTC_NUM_INT_GRPS]; + extern const uint32_t Autovector_Table[]; #endif /* Public Interface - May be used in end-application: */ /* Macros: */ - /** Converts a given interrupt index into its assocated interrupt group. + /** Converts a given interrupt index into its associated interrupt group. * * \param[in] IRQIndex Index of the interrupt request to convert. * @@ -99,7 +101,7 @@ */ #define INTC_IRQ_GROUP(IRQIndex) (IRQIndex / 32) - /** Converts a given interrupt index into its assocated interrupt line. + /** Converts a given interrupt index into its associated interrupt line. * * \param[in] IRQIndex Index of the interrupt request to convert. * @@ -108,10 +110,19 @@ #define INTC_IRQ_LINE(IRQIndex) (IRQIndex % 32) /* Function Prototypes: */ - /** Initializes the interrupt controller, nulling out all interrupt handlers ready for new registration. This - * function should be called once on startup to ensure the interrupt controller is ready for use. + /** Initializes the interrupt controller ready to handle interrupts. This must be called at the + * start of the user program before any interrupts are registered or enabled. + */ + void INTC_Init(void); + + /** Retrieves the associated interrupt handler for the interrupt group currently being fired. This + * is called directly from the exception handler routine before dispatching to the ISR. + * + * \param[in] InterruptLevel Priority level of the interrupt. + * + * \return Pointer to the associated interrupt handler function, or NULL if no handler set. */ - void INTC_Init(void); + InterruptHandlerPtr_t INTC_GetInterruptHandler(const uint_reg_t InterruptLevel); /* Inline Functions: */ /** Registers a handler for a given interrupt group. On the AVR32 UC3 devices, interrupts are grouped by